搜索
bottom↓
回复: 2

dsp2812 定时器的使用问题

[复制链接]

出0入8汤圆

发表于 2011-1-2 08:57:18 | 显示全部楼层 |阅读模式
小弟刚学DSP,弄定时器时有些问题希望各位给解释一下;谢谢啦
注释有很多问号的是我不明白的。
代码:
#include "DSP281x_Device.h"     // DSP281x Headerfile Include File
#include "DSP281x_Examples.h"   // DSP281x Examples Include File

// Prototype statements for functions found within this file.
interrupt void cpu_timer0_isr(void);

#define LEDS *(int *)0xc0000  //定义LED接口


int i=0,nCount;
unsigned int uLBD;

void main(void)
{   
       

   InitSysCtrl();//初始化cpu

   DINT;//关中断

   InitPieCtrl();//初始化pie寄存器
   

   IER = 0x0000;//禁止所有的中断
   IFR = 0x0000;//中断标志清零


   InitPieVectTable();//初始化pie中断向量表


   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

           CpuTimer0.RegsAddr = &CpuTimer0Regs;//?????????????????????
        // Initialize timer period to maximum:       
        CpuTimer0Regs.PRD.all  = 0xffff;
        CpuTimer0Regs.TPRH.all = 0;
        // Initialize pre-scale counter to divide by 1 (SYSCLKOUT):       
        CpuTimer0Regs.TPR.all  = 0;

        CpuTimer0Regs.TIM.all  = 0;
       
        // Make sure timer is stopped:
        CpuTimer0Regs.TCR.bit.TSS = 1;//停止定时器
        CpuTimer0Regs.TCR.bit.FREE = 1;//FREE : SOFT=1 : 1 定时器自由运行
        CpuTimer0Regs.TCR.bit.SOFT = 1;
       
        // Reload all counter register with period value:
        CpuTimer0Regs.TCR.bit.TRB = 1;//TIMH:TIM寄存器重新装载PRDH:PRD中的周期值
        CpuTimer0Regs.TCR.bit.TIE = 1;//定时器中断使能
        // Reset interrupt counters:
        CpuTimer0.InterruptCount = 0;//????????????????????????????                


   StartCpuTimer0();//启动定时器0

// Enable CPU INT1 which is connected to CPU-Timer 0:
   IER |= M_INT1;//使能中断组1

// Enable TINT0 in the PIE: Group 1 interrupt 7
   PieCtrlRegs.PIEIER1.bit.INTx7 = 1; //在PIE中使能Timer0中断

// Enable global Interrupts and higher priority real-time debug events:
   EINT;   // Enable Global interrupt INTM 使能全局中断
   ERTM;   // Enable Global realtime interrupt DBGM
     while ( 1 )
        {
               
        }

}


interrupt void cpu_timer0_isr(void)
{

   // Acknowledge this interrupt to receive more interrupts from group 1
   PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //?????????????????????????????????
   CpuTimer0Regs.TCR.bit.TIF = 1;//写1清除该标志位
   CpuTimer0Regs.TCR.bit.TRB = 1;//TIMH:TIM寄存器重新装载PRDH:PRD中的周期值
   if ( nCount==0 )
   {
                LEDS=uLBD;
                uLBD++;
                uLBD%=16;
   }
   nCount++;
    nCount%=194;

}


//===========================================================================
// No more.
//========================================

补充:是怎样计算出定时时间的??

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2011-1-2 10:07:07 | 显示全部楼层
TIMH:TIM寄存器重新装载PRDH:PRD中的周期值。这句话定义了DSC中定时器的周期,你又知道了你的定时器的时钟频率,应该是系统时钟的1分频,你用周期寄存器的数值除以时钟频率就是你的定时器的定时周期。

出0入8汤圆

 楼主| 发表于 2011-1-2 11:20:56 | 显示全部楼层
回复【1楼】tiancaigao7  天才杨威利
-----------------------------------------------------------------------

周期寄存器的值=SYSCLKOUT*要定时的时间(us);
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-26 05:50

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表