色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > s3c2410的timer定時器的使用

          s3c2410的timer定時器的使用

          作者: 時間:2016-11-22 來源:網絡 收藏
          2410共有5個定時器,其中timer4沒有引腳輸出,其余都可以用作pwm。

          0、1共用一個預分頻器

          本文引用地址:http://cafeforensic.com/article/201611/319913.htm

          2、3、4共用一個預分頻器

          TCFG0 [0:7][8:15] 分別對應這兩個預分頻器,分頻值不要忘了+1,因為分頻值不能為0

          TCFG1[0:3][][][][][] 分別對應這每個定時器自己的分頻值

          TCNTB0 定時器的計數值

          TCMPB0 定時器的比較值

          我理解的PWM,在一個固定的時間周期中,也就是TCNTB0這個值,一個周期開始后,TCNTB0開始減1計數,當減到和TCMPB0 相等時,TOUT0輸出反轉,當TCNTB0減到0時,TOUT0輸出再次反轉,一個新的計數周期開始。

          TCNTO0 定時器監(jiān)聽寄存器

          TCON0 控制寄存器

          在第一次使用定時器時,需要手動更新位1以使TCNTB0/TCMPB0 裝入內部寄存器。CNT0/TCMP0中。下一次如果還要設置這一位,需要先將它清0.

          DMA模式

          給出一個實現timer0的例子

          void init_irq(void)
          {
          rPRIORITY = (rPRIORITY & ((~0x01) | (0x03 << 7))) | (0x0 << 7);

          //rINTMSK &= (~(1 << 0)) & (~(1 << 2)) & (~(1 << 5));
          rINTMSK &= ((~(1 << 0)) & (~(1 << 2)));

          pISR_EINT0 = (unsigned)Eint0_ISR;
          pISR_EINT2 = (unsigned)Eint2_ISR;
          //pISR_EINT4_7 = (unsigned)Eint4_7_ISR;
          rINTMSK &= ~(1 << 10);//允許timer0的中斷
          pISR_TIMER0 = (unsigned)Eint10_TIMER0_ISR; //將中斷函數賦值
          }

          void Timer0_init()
          {
          //rTCFG0設置預分頻器
          //PCLK 50M/200 = 250KHz
          rTCFG0 = (rTCFG0 & (~(0xFF << 0))) | (200 << 0);

          //rTCFG1設置工作在哪種分頻 2、4、8、16或者是TCLK0/TCLK1
          rTCFG1 = (rTCFG1 & (~(0xF << 0))) | (3 << 0);//16分頻

          rTCNTB0 = 30000; //計數值

          rTCON |=(1 << 1); //手動將計數值裝入TCNT0中
          rTCON &= ~(1 << 1);// 這位一定要再次清零,否則,定時器不會自動裝載
          rTCON |=(1 << 3) | (1 << 0);//開啟定時器,并自動裝載
          }


          void __irq Eint10_TIMER0_ISR(void)
          {
          i++;
          rSRCPND = BIT_TIMER0;
          rINTPND = BIT_TIMER0;
          }



          關鍵詞: s3c2410timer定時

          評論


          技術專區(qū)

          關閉