学习笔记2:F28002x-cputimer0计时1ms中断

本文详细描述了如何在Cortex-M微控制器上初始化定时器CpuTimer0,包括设置配置参数、定时器周期、控制寄存器状态以及中断处理过程。特别强调了ConfigCpuTimer函数的使用和中断配置的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

​​​​​​初始化函数

 注意配置的顺序,其中有个配置不能放在后面,不然进不了中断,具体是哪个忘记了。(好像是ConfigCpuTimer(&CpuTimer0,100,1000);不能放在CpuTimer0Regs.TCR.bit.TSS = 0;后面)

extern void ISR_Timer0(void);
extern struct CPUTIMER_VARS CpuTimer0;

void CpuTimer0_Init(void)
{
        CpuTimer0.RegsAddr = &CpuTimer0Regs;//指向定时器0地址
        CpuTimer0Regs.PRD.all  = 0xFFFFFFFF;//初始化定时器周期寄存器值

        CpuTimer0Regs.TPR.bit.TDDR  = 0;
        CpuTimer0Regs.TPR.bit.PSC   = 0;
        CpuTimer0Regs.TPRH.all = 0;

        CpuTimer0Regs.TCR.bit.TSS = 1;//StopCpuTimer0

        CpuTimer0Regs.TCR.bit.FREE = 1;//在软件断点时,计时器将继续运行。
        CpuTimer0Regs.TCR.bit.TRB = 1;//使能重新装载

        CpuTimer0.InterruptCount = 0;//重置定时器计数值

        CpuTimer0Regs.TCR.bit.TIE = 1;//CPU-Timer Interrupt Enable
        CpuTimer0Regs.TCR.bit.TIF = 1;//CPU-Timer Overflow Flag

        ConfigCpuTimer(&CpuTimer0,100,1000);//<定时器x,系统时钟频率MHZ,时间us,

        CpuTimer0Regs.TCR.bit.TSS = 0;//StartCpuTimer0

        EALLOW;
        PieVectTable.TIMER0_INT = &ISR_Timer0;//注册中断向量表
        PieCtrlRegs.PIECTRL.bit.ENPIE = 1;//使能PIE
        PieCtrlRegs.PIEIER1.bit.INTx7 = 1;//使能1.7-Timer0
        IER |= (1<<0);//使能int1
        EDIS;
}

在f28002x_cputimers.c文件中已经有这个函数,直接调用即可。 

void
ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period)
{
    Uint32 temp;

    //
    // Initialize timer period
    //
    Timer->CPUFreqInMHz = Freq;
    Timer->PeriodInUSec = Period;
    temp = (long) (Freq * Period);
    Timer->RegsAddr->PRD.all = temp;

    //
    // Set pre-scale counter to divide by 1 (SYSCLKOUT)
    //
    Timer->RegsAddr->TPR.all  = 0;
    Timer->RegsAddr->TPRH.all  = 0;

    //
    // Initialize timer control register
    //

    //
    // 1 = Stop timer, 0 = Start/Restart Timer
    //
    Timer->RegsAddr->TCR.bit.TSS = 1;

    //
    // 1 = reload timer
    //
    Timer->RegsAddr->TCR.bit.TRB = 1;
    Timer->RegsAddr->TCR.bit.SOFT = 0;

    //
    // Timer Free Run Disabled
    //
    Timer->RegsAddr->TCR.bit.FREE = 0;

    //
    // 0 = Disable 1 = Enable Timer Interrupt
    //
    Timer->RegsAddr->TCR.bit.TIE = 1;

    //
    // Reset interrupt counter
    //
    Timer->InterruptCount = 0;
}

中断函数

中断函数内容根据需要填写 

#pragma CODE_SECTION(ISR_Timer0, ".TI.ramfunc");
__interrupt void ISR_Timer0(void)//
{
    //
    //
    //
    CpuTimer0Regs.TCR.bit.TIF = 1;//清除中断标志位
    PieCtrlRegs.PIEACK.bit.ACK1 = 1;//清除PIE级中断应答
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值