C6678定时器中断学习180614

时间:2024-03-13 14:14:09

第一次写博客,希望能够在两年内记录一下自己的学习历程。目前刚开始接触DSP,所以在学习DSP上会对多写点,如果有不对的地方 希望大家能够不吝赐教!

话不多说,接触的6678板子,所以先从6678的中断部分开始写起,之前写了一个GPIO的,但是楼主发现脑子短路了,因为没有外部中断GPIO口来触发,所以改成了定时器的中断触发,同时也增加了我对于ti的csl库函数的理解


 一、定时器的工作模式选择

定时器一共有以下4中模式,在全局控制寄存器(global control register)TGCR中控制TIMMODE位可以选择以下工作模式,复位默认00

 C6678定时器中断学习180614

 二、定时器使能标志

A. 定时器处于64bit00)和(11)工作模式时,两个寄存器需要配置,TGCR中TIMLORS、TIMHIRS配置为1TCRtimer control regisetr)中ENAMODE_LO需要置01b,10b或者11b。

B. 处于01模式(独立的2个定时器模块),可以分为2个部分TIMLO、TIMHI,TGCR中TIMLORS1TCRtimer control regisetr)中ENAMODE_LO需要置01b,10b或者11b,使能TIMLO。同样,TGCR中TIMHIRS1TCRtimer control regisetr)中ENAMODE_LO需要置01b,10b或者11b。

可以参见图中。

 C6678定时器中断学习180614

说明:定时器使能后,定时器count开始计数,使能一次就是计数达到设定值就停止,持续使能就是一直计数,当达到设定值后,计数器值count0

 三、定时器时钟选择

定时器时钟是可以自己选择的,在TCR寄存器CLKSRC位、TIEN_LO位可以选择下图中的配置方式。

 C6678定时器中断学习180614

定时器的输出模式

共分为2中模式,脉冲和时钟模式,在TCR中控制CP_LO、CP_HI位

CP_LO、CP_HI = 0,脉冲模式可以自己控制脉冲宽度位来控制占空比。

CP_LO、CP_HI =1,时钟模式就是50%的标准时钟占空比。

 四、定时器中断

如果我们需要定时性的中断产生,那么理所当然的我们需要配置定时器的工作模式处于持续模式。计数器达到配置值,就可以产生一个CPU中断。定时器初始化流程。

 C6678定时器中断学习180614

 定时器csl中断

根据上面所诉内容,可以配置一个64bit位定时器中断触发。定时器的中断,因此初始化工作就是:

A. 选择工作模式,配置TGCR寄存器、

B. 使能寄存器

 

 

第一步:对于在csl库中操作,对于外设一般第一步就是打开实例,返回句柄,接下来的工作都是对句柄进行操作。不过在打开时需要注意一点,就是先初始化CSL定时器模块,

CSL_Status CSL_tmrInit ( CSL_TmrContext * pContext  )

//形参类型   tmrObj          Pointer to GPTIMER object.

            tmrNum          Instance of GPTIMER CSL to be opened.

            pTmrParam       Module specific parameters.

            status          Status of the function cal

tmrObj          定时器看门狗结构体

pTmrParam       模块特定参数(可以不用管)

 

       CSL_TmrHandle CSL_tmrOpen

(

href="file:///D:\ti\pdk_C6678_1_1_2_6\packages\ti\csl\docs\doxygen\html\struct_c_s_l___tmr_obj.html" CSL_TmrObj *

pTmrObj,

 

 

CSL_InstNum

tmrNum,

 

 

CSL_TmrParam *

pTmrParam,

 

 

CSL_Status *

pStatus

 

 

)

 

 

 

第二步:就是配置工作模式(一般cslsetup都是配置性参数)

下面函数功能就是将例化的参数配置到硬件寄存器中。

 

CSL_Status CSL_tmrHwSetup

 

(

CSL_TmrHandle

hTmr,

 

 

CSL_TmrHwSetup *

hwSetup

 

  

)

 

 

 

CSL_TmrHwSetup 成员如图所示。

 

 

 

 

 C6678定时器中断学习180614

工作模式如下可以配置:

C6678定时器中断学习180614 

 

第三步:就是使能寄存器控制(一般在csl库函数中的control

 C6678定时器中断学习180614

 

第二个形参控制字

 C6678定时器中断学习180614

 结果分析

出现问题:之前自定义中断函数进不去。

检验办法:一、可以查看一些寄存器的值,比如查看控制寄存器中的IER中断号是否使能,NMEI是否使能,以及全局中断使能GIE寄存器是否使能。二、查看相应的定时器的上面使能寄存器位。

解决办法:发现使用64bit定时器工作模式时,对定时器的period time定时周期配置太大, 32bit1000,低32bit1000,这样时间太长。修改可以配置定时器的周期值(period time),在CSL_tmrHwSetup中的hwSetup. tmrTimerPeriodHitmrTimerPeriodLo的值。

 

 


存在问题:就是从板子开始工作定时器一直在运行,但是核0还没有开始跑。