TI DSP 5502定時器使用

 

  • 概述

TMS320VC5502有3個64-位可編程的定時器,其中2個用作通用定時器(TIM0 和 TIM1),第三個定時器可以配置爲通用定時器或看門狗定時器,其功能取決於看門狗全局定時控制寄存器1(WDTGCTL1)中的TIMMODE位以及看門狗定時器控制寄存器1(WDTWCTL1)中的看門狗使能位(WDEN)的設置。在系統復位時,第三個定時器缺省配置爲 64 位的通用定時器。5502 的每一個定時器均有一個外部引腳,該引腳可配置爲輸入或者輸出。

general-purpose (GP) timers :也可以簡化爲GPT,叫做通用定時器。

  • 寄存器介紹
  1. GCTL1
  2. CTL1 、CTL2 定時器控制寄存器

寄存器裏的內容確定了定時器的功能

  1. PRD1、PRD2、PRD3、PRD4 定時器週期寄存器

                 定時器週期寄存器,由四個16位的寄存器組成一個64位的寄存器

  1. CNT1、CNT2、CNT3、CNT4  定時器計數器

定時器計數器爲64位,由四個16位的計數器組成:CNT1、CNT2、CNT3、CNT4

  1. CLK 定時器時鐘寄存器

CLKDIV 內部時鐘分頻,only read

  • 庫函數配置結構體

存放在 CCS3.3安裝目錄下的  \C5500\csl\include\csl_gpt.h初始化需要添加該頭文件

typedef struct {

         Uint16 gptemu;        // 仿真管理寄存器

         Uint16 gptgpint;       //  GPIO中斷控制寄存器

         Uint16 gptgpen;               //  GPIO使能寄存器

         Uint16 gptgpdir;              //  GPIO方向寄存器

         Uint16 gptgpdat;             //  GPIO數據寄存器

         Uint16 gptprd1;               // 定時器週期寄存器1

         Uint16 gptprd2;               // 定時器週期寄存器2

         Uint16 gptprd3;               // 定時器週期寄存器3

         Uint16 gptprd4;               // 定時器週期寄存器4

         Uint16 gptctl1;                 // 定時器控制寄存器1

         Uint16 gptctl2;                 // 定時器控制寄存器1

         Uint16 gptgctl1;               // 全局定時器控制寄存器

} GPT_Config;

 

  • 使用實例

GPT_Config  MyGptConfig = {

0,                                                            //Emulation management register

0,                                                           //GPIO interrupt control register

0,                                                            //GPIO enable register

0,                                                           //GPIO direction register

0,                                                           //GPIO data register

0xB9EF,                                            //Timer period register 1

0x05F5,                                                //Timer period register 2

0,                                                              //Timer period register 3

0,                                                            //Timer period register 4

GPT_GPTCTL1_RMK(                          //Timer control register 1

  GPT_GPTCTL1_TIEN_NOT_GATED,           //不使用外部引腳源

  GPT_GPTCTL1_CLKSRC_VBUS,              //定時器使用內部時鐘源

  GPT_GPTCTL1_ENAMODE_CONTINUOUS,       //連續模式

  GPT_GPTCTL1_PWID_INACTIVE_1CYCLE,     //輸出寬度爲1個時鐘週期

  GPT_GPTCTL1_CP_CLOCK_MODE,        //Clock mode

  GPT_GPTCTL1_INVIN_DONT_INVERT_OUTPUT, //Timer input inverter control bit. Only affects operation if CLKSRC = 1.

  GPT_GPTCTL1_INVOUT_DONT_INVERT_OUTPUT //Timer output inverter control bit,The timer output is not inverted

  ),                            

GPT_GPTCTL2_RMK(                                    //Timer control register 2

  GPT_GPTCTL2_TIEN_NOT_GATED,

  GPT_GPTCTL2_CLKSRC_VBUS,

  GPT_GPTCTL2_ENAMODE_CONTINUOUS,

  GPT_GPTCTL2_PWID_INACTIVE_1CYCLE,

  GPT_GPTCTL2_CP_CLOCK_MODE,

  GPT_GPTCTL2_INVIN_DONT_INVERT_OUTPUT,

  GPT_GPTCTL2_INVOUT_DONT_INVERT_OUTPUT

  ),                            

GPT_GPTGCTL1_RMK(                                 //Global timer control register

  GPT_GPTGCTL1_TDDR34_DEFAULT,

  GPT_GPTGCTL1_PSC34_DEFAULT,

  GPT_GPTGCTL1_TIMMODE_DEFAULT,      //64位定時器

  GPT_GPTGCTL1_TIM34RS_NOT_IN_RESET,

  GPT_GPTGCTL1_TIM12RS_NOT_IN_RESET

  )

};

 

interrupt void Timer0Isr(void);//定義中斷類型

GPT_Handle    hGpt; //創建用於打開定時器0的句柄

 

hGpt = GPT_open(GPT_DEV0, GPT_OPEN_RESET); //打開定時器0,並將相關寄存器的值設置爲默認值

EventId0 = GPT_getEventId(hGpt); //獲取定時器0事件ID,爲了使用CSL中斷功能   

IRQ_clear(EventId0);               //清除任何掛起的中斷

IRQ_plug(EventId0,&Timer0Isr);     //將中斷向量地址放在指定的位置

GPT_config(hGpt, &MyGptConfig);   //配置定時器0

IRQ_enable(EventId0);     //使能定時器0短短

IRQ_globalEnable();     //打開全局中斷

GPT_start(hGpt);       //開始計數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章