新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > SAM4E單片機之旅——7、LED閃爍之TC中斷

        SAM4E單片機之旅——7、LED閃爍之TC中斷

        作者: 時間:2017-02-04 來源:網絡 收藏

          RTT主要用做一個全局的定時器,而且不太通用。現在嘗試使用一個更為通用的定時器進行定時:定時計數器(Timer Counter, TC)。

        本文引用地址:http://www.104case.com/article/201702/343520.htm

          TC提供了廣泛的功能,主要可以分為對輸入的測量,以及波形的輸出。同樣,它可以產生一系列的中斷。這一次將使TC以一個固定的周期產生中斷,以達到定時的目的。

          一、 TC配置

          1. 在PMC中使能TC時鐘。

          2. 時鐘選擇。

          TC的每個通道內部都有一個32位的計數器。可以為這個計數器選擇一個時鐘,使其以固定頻率步進。為使的閃爍頻率較低,需要選擇較小的時鐘周期。

          3. 波形及中斷選擇。

          當TC工作在波形輸出模式下時,可以為輸出選擇若干種波形。在這里,不需要關心具體的波形,而是要關注每個波形模式下,計數器的工作方式,以及產生中斷的時機。

          選擇的波形如下:

            

        clip_image002

         

          在當計數器的值和RC寄存器里的值相等時,會產生一個觸發,使計數器重置,并重新開始計數。

          在輸出模式下,可以選擇在計數器的值在與RA、RB、和(或)RC相等時,產生中斷。這里選擇與RC值相同時中斷。

          4. 使能通道。

          首先需要使能(enable)通道時鐘,并且需要啟動(start)這個時鐘。可以通過訪問TC_CCR寄存器使能時鐘,同時可以產生一個軟觸發,以啟動時鐘。

          5. NVIC中使能中斷。

          該部分相關代碼如下,使用的通道是TC0的通道0,計時器頻率為MCK/128,RC值為31250,即每一秒產生一次中斷。

          #define gUseTc TC0->TC_CHANNEL[0]

          void ConfigTC(void)

          {

          PMC->PMC_PCER0 = (1 << ID_TC0);

          gUseTc.TC_CMR =

          TC_CMR_WAVE /* 波形模式 */

          | TC_CMR_TCCLKS_TIMER_CLOCK4 /* 時鐘4: MCK/128 */

          | TC_CMR_WAVSEL_UP_RC; /* 波形,僅上升,且RC比較時自動觸發 */

          ;

          /* 設置 RC */

          gUseTc.TC_RC = TC_RC_RC(31250);

          /* RC 比較時產生中斷 */

          gUseTc.TC_IER = TC_IER_CPCS;

          /* 使能TC時鐘 */

          gUseTc.TC_CCR = TC_CCR_CLKEN | TC_CCR_SWTRG;

          /* NVIC */

          NVIC_DisableIRQ(TC0_IRQn);

          NVIC_ClearPendingIRQ(TC0_IRQn);

          NVIC_SetPriority(TC0_IRQn, 1);

          NVIC_EnableIRQ(TC0_IRQn);

          }

          1

          二、 TC中斷服務函數

          僅需改變引腳的電平即可。

          void TC0_Handler(void)

          {

          uint32_t status = gUseTc.TC_SR;

          /* 判斷中斷是否為RC比較觸發的 */

          if (status & TC_SR_CPCS)

          {

          if ((_PIOC->PIO_ODSR & LED_PIO))

          {

          LED_PIOC->PIO_CODR = LED_PIO;

          }

          else

          {

          LED_PIOC->PIO_SODR = LED_PIO;

          }

          }

          }



        關鍵詞: SAM4E LED

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 稷山县| 东源县| 潼关县| 宁都县| 河南省| 东宁县| 瑞丽市| 彭水| 浦北县| 宁河县| 绥滨县| 嵊泗县| 沐川县| 尼玛县| 囊谦县| 裕民县| 遵义县| 赤水市| 通山县| 福清市| 普陀区| 阜宁县| 鄂伦春自治旗| 玉山县| 内丘县| 璧山县| 崇明县| 牟定县| 双鸭山市| 屏东县| 红安县| 清徐县| 昌乐县| 巴青县| 山阴县| 松江区| 通城县| 洪雅县| 临夏市| 怀仁县| 成安县|