TMS320VC5502有3个64-位可编程的定时器,其中2个用作通用定时器(TIM0 和 TIM1),第三个定时器可以配置为通用定时器或看门狗定时器,其功能取决于看门狗全局定时控制寄存器1(WDTGCTL1)中的TIMMODE位以及看门狗定时器控制寄存器1(WDTWCTL1)中的看门狗使能位(WDEN)的设置。在系统复位时,第三个定时器缺省配置为 64 位的通用定时器。5502 的每一个定时器均有一个外部引脚,该引脚可配置为输入或者输出。
general-purpose (GP) timers :也可以简化为GPT,叫做通用定时器。
寄存器里的内容确定了定时器的功能
定时器周期寄存器,由四个16位的寄存器组成一个64位的寄存器
定时器计数器为64位,由四个16位的计数器组成:CNT1、CNT2、CNT3、CNT4
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); //开始计数