This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F2812 Timer0读TIM寄存器问题

这是程序中测试读TIM寄存器的部分

   ConfigCpuTimer(&CpuTimer0,120,10);  //该条语句是给Timer0配置成10us的周期    
   StartCpuTimer0();                              // 启动CPU Timer0定时器
   test_tmp1=CpuTimer0Regs.TIM.half.LSW;
   test_tmp2=CpuTimer0Regs.TIM.all;

 想问问配置好后TIM寄存器的值应该是在0到1200之间吗?这种读TIM的方式对不对?为什么读出的值超出了这个范围很多,谢谢大家了

  • 关键还是看你DSP28_CpuTimers.c文件时怎么配置的,如果配置好,应该可以的,下面是我经常的配置(请指教):

    #include "DSP28_Device.h"

    struct CPUTIMER_VARS CpuTimer0; //对用户开放的CPU定时器只有CpuTimer0,CpuTimer1
    struct CPUTIMER_VARS CpuTimer1; //和CpuTimer2被保留用作实习操作系统OS(例如DSP
    struct CPUTIMER_VARS CpuTimer2; //BIOS)

    /****************************************************************************
    *
    *名    称:InitCpuTimers()
    *
    *功    能:初始化CpuTimer0。
    *
    *入口参数:无
    *
    *出口参数:无
    *
    ****************************************************************************/

    void InitCpuTimers(void)
    {
     CpuTimer0.RegsAddr = &CpuTimer0Regs; //使得CpuTimer0.RegsAddr 指向定时器寄存器
     
     CpuTimer0Regs.PRD.all  = 0xFFFFFFFF; //初始化CpuTimer0的周期寄存器

     CpuTimer0Regs.TPR.all  = 0;          //初始化定时器预定标计数器
     CpuTimer0Regs.TPRH.all = 0;
     
     CpuTimer0Regs.TCR.bit.TSS = 1;       //停止定时器      

     CpuTimer0Regs.TCR.bit.TRB = 1;       //将周期寄存器PRD中的值装入计数器寄存器TIM中          
     
     CpuTimer0.InterruptCount = 0;        //初始化定时器中断计数器

     
    /****************************************************************************
    *
    *名    称:ConfigCpuTimer()
    *
    *功    能:此函数将使用Freq和Period两个参数来对CPU定时器进行配置。Freq以MHz
    *          为单位,Period以us作为单位。
    *
    *入口参数:*Timer(指定的定时器),Freq,Period
    *
    *出口参数:无
    *
    ****************************************************************************/

    void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period)
    {
     Uint32  temp;
     
     Timer->CPUFreqInMHz = Freq;
     Timer->PeriodInUSec = Period;
     temp = (long) (Freq * Period);
     Timer->RegsAddr->PRD.all = temp;  //给定时器周期寄存器赋值

     Timer->RegsAddr->TPR.all  = 0;    //给定时器预定标寄存器赋值
     Timer->RegsAddr->TPRH.all  = 0;
     
     // 初始化定时器控制寄存器:
     Timer->RegsAddr->TCR.bit.TIF=1;   //清除中断标志位
     Timer->RegsAddr->TCR.bit.TSS = 1; //停止定时器
     Timer->RegsAddr->TCR.bit.TRB = 1; //定时器重装,将定时器周期寄存器的值装入定时器计数器寄存器
     Timer->RegsAddr->TCR.bit.SOFT = 1;
     Timer->RegsAddr->TCR.bit.FREE = 1;    
     Timer->RegsAddr->TCR.bit.TIE = 1; //使能定时器中断
     
     Timer->InterruptCount = 0;        //初始化定时器中断计数器
    }

x 出现错误。请重试或与管理员联系。