TMS320F28335-CPU定时器

1.基本原理

TMS320F28335的CPU Time有三个,分别为Timer0,Timer1,Timer2,其中Timer2是为操作系统DSP/BIOS保留的,当未移植操作系统时,可用来做普通的定时器。这三个定时器的中断信号分别为TINT0, TINT1, TINT2,分别对应于中断向量INT1,INT13,INT14。下图为定时器的结构框图,图中TIMH:TIM为计数寄存器,PRDH:PRD为周期寄存器。

详细介绍在Tms320F2833x用户指南的1.3.5节详细介绍。

 简单说就是一个32bit 的减计数器,timer2留给操作系统作为系统节拍定时器用。timer0 和 timer1 给用户使用,如果不使用操作系统tiemr2也可以使用。中断系统如下图所示:

2.库函数介绍

Ti给的库函数 DSP2833x_CpuTimers.c 都把基本操作包含好了。用户只需要调用函数即可。常用的函数就两个如下所示:

InitCpuTimers(); //负责初始化

ConfigCpuTimer(&CpuTimer0, 150, 100000);//设置定时器频率和周期.

3.实际应用

我们需要用定时器产生一个 ms 定时器,比如产生 500ms 定时去驱动LED指示灯。代码如下所示:

__interrupt void cpu_timer0_isr(void)
{
    CpuTimer0.InterruptCount++;
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;// Acknowledge this interrupt to receive more interrupts from group 1
    //to do ...
    GpioDataRegs.GPATOGGLE.bit.GPIO18 = 1;
}

void User_CpuTimer0Init(void)
{
    EALLOW;                                     // This is needed to write to EALLOW protected registers
    PieVectTable.TINT0 = &cpu_timer0_isr;
    EDIS;                                       // This is needed to disable write to EALLOW protected registers
    InitCpuTimers();                            //初始化 CPU定时器
    ConfigCpuTimer(&CpuTimer0, 150, 100000);    //500000--500ms
    CpuTimer0Regs.TCR.all = 0x4000;             // Use write-only instruction to set TSS bit = 0
    IER |= M_INT1;                              // Enable CPU INT1 which is connected to CPU-Timer 0:
    PieCtrlRegs.PIEIER1.bit.INTx7 = 1;          // Enable TINT0 in the PIE: Group 1 interrupt 7
    // Enable global Interrupts and higher priority real-time debug events
    EINT;           // Enable Global interrupt INTM
    ERTM;           // Enable Global realtime interrupt DBGM
}

主函数代码如下所示:

void main(void)
{
    InitSysCtrl();
    DINT;                 //禁止全局中断
    InitPieCtrl();        // 初始化PIE模块
    IER = 0x0000;         //清除 CPU寄存器
    IFR = 0x0000;
    InitPieVectTable();   //初始化中断服务表

    EALLOW;
    GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 0;
    GpioCtrlRegs.GPADIR.bit.GPIO18 = 1;
    EDIS;

    User_CpuTimer0Init(); //CPU Timer0 初始化

    EINT;           // 使能全局中断
    ERTM;           // Enable Global realtime interrupt DBGM
    while(1)
    {
    }
}

自此就完成了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值