首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

关于2812的一个编程问题,希望大家帮忙看一下,谢谢!

关于2812的一个编程问题,希望大家帮忙看一下,谢谢!

本帖最后由 raoxianbin 于 2013-10-11 16:07 编辑

在CCS编程环境中,关于用CPU定时器0的周期中断实现LED灯的闪烁,在这个例子中我存在几个疑问,希望大家解答一下
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-&gteriodInUSec = Period;
        temp = (long) (Freq * Period);
        Timer->RegsAddr-&gtRD.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;        //初始化定时器中断计数器
}

这是对CPU定时器0的一个初始化函数

void main(void)
{
    InitSysCtrl();  //初始化系统函数

        DINT;
        IER = 0x0000;   //禁止CPU中断
        IFR = 0x0000;   //清除CPU中断标志
        
        InitPieCtrl();  //初始化PIE控制寄存器

        InitPieVectTable(); //初始化PIE中断向量表         
        
        InitPeripherals(); //初始化Cpu定时器模块
        
        InitGpio(); //初始化GPIO

       &nbspieCtrl.PIEIER1.bit.INTx7 =1; //使能PIE模块中的Cpu定时器0的中断
   
    IER|=M_INT1;  //开CPU中断
   
    EINT;  //使能全局中断
    ERTM;  //使能实时中断
   
    ConfigCpuTimer(&CpuTimer0, 150, 1000000);        //Cpu定时器0的周期为1s
        StartCpuTimer0(); //启动Cpu定时器0
        
        for(;;)
        {
           
        }

}
这是主函数,我的疑问是
1.在初始化函数中没用对CPU定时器使能,即缺少CpuTimer0Regs.TCR.bit.TIE =1这条语句,这样还会向PIE控制器提出中断请求吗?
2.主函数也没调用CPU的初始化函数,难道不影响吗?

这是一个例子,但是能正常实现,但是我还是存在以上的疑问,希望各位解答一下,谢谢!
返回列表