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);       //开始计数

你可能感兴趣的:(DSP)