这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 寄存器操作

共1条 1/1 1 跳转至

寄存器操作

菜鸟
2009-02-23 17:14:40     打赏

下面是一个定时器的中断函数,即定时器的比较中断函数
__interrupt(vect=22) void CSystem::TimerISR(void)
{
    static bool Toggle;

     // Read the flag before clearing it
     volatile char x   = TV.TCSRV.BYTE;

    // Clear compare match flag A
   TV.TCSRV.BYTE    = 0x19;   // enable control fan
  
   // Allow interrupts
   and_ccr(0x7F);

   // Run system tick every 1ms
   if (Toggle) {
      Toggle = false;
      CSystem::Tick1ms();
   } else {
      Toggle = true;
   }
}
有两个问题:
1. 一直都有这样一个习惯,就是再中断函数中在清寄存器标志位前会读该标志位,但现在回到 思考一下,觉得很迷茫,为何要这样做呢?
2. 还有,将下面语句:
volatile char x   = TV.TCSRV.BYTE;
改写成:
char x   = TV.TCSRV.BYTE;
程序也不会出问题,为何要加上一个volatile? 这也不是一个其他函数要用到的变量啊。
希望哪位给小弟指点迷津。多谢!!




关键词: 寄存器     操作    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]