- 概述
TMS320VC5502有3個64-位可編程的定時器,其中2個用作通用定時器(TIM0 和 TIM1),第三個定時器可以配置爲通用定時器或看門狗定時器,其功能取決於看門狗全局定時控制寄存器1(WDTGCTL1)中的TIMMODE位以及看門狗定時器控制寄存器1(WDTWCTL1)中的看門狗使能位(WDEN)的設置。在系統復位時,第三個定時器缺省配置爲 64 位的通用定時器。5502 的每一個定時器均有一個外部引腳,該引腳可配置爲輸入或者輸出。
general-purpose (GP) timers :也可以簡化爲GPT,叫做通用定時器。
- 寄存器介紹
- GCTL1
- CTL1 、CTL2 定時器控制寄存器
寄存器裏的內容確定了定時器的功能
- PRD1、PRD2、PRD3、PRD4 定時器週期寄存器
定時器週期寄存器,由四個16位的寄存器組成一個64位的寄存器
- CNT1、CNT2、CNT3、CNT4 定時器計數器
定時器計數器爲64位,由四個16位的計數器組成:CNT1、CNT2、CNT3、CNT4
- 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); //開始計數