第一次写博客,希望能够在两年内记录一下自己的学习历程。目前刚开始接触DSP,所以在学习DSP上会对多写点,如果有不对的地方 希望大家能够不吝赐教!
话不多说,接触的6678板子,所以先从6678的中断部分开始写起,之前写了一个GPIO的,但是楼主发现脑子短路了,因为没有外部中断GPIO口来触发,所以改成了定时器的中断触发,同时也增加了我对于ti的csl库函数的理解
一、定时器的工作模式选择
定时器一共有以下4中模式,在全局控制寄存器(global control register)TGCR中控制TIMMODE位可以选择以下工作模式,复位默认00
二、定时器使能标志
A. 定时器处于64bit(00)和(11)工作模式时,两个寄存器需要配置,TGCR中TIMLORS、TIMHIRS配置为1,TCR(timer control regisetr)中ENAMODE_LO需要置01b,10b或者11b。
B. 处于01模式(独立的2个定时器模块),可以分为2个部分TIMLO、TIMHI,TGCR中TIMLORS置1且TCR(timer control regisetr)中ENAMODE_LO需要置01b,10b或者11b,使能TIMLO。同样,TGCR中TIMHIRS置1且TCR(timer control regisetr)中ENAMODE_LO需要置01b,10b或者11b。
可以参见图中。
说明:定时器使能后,定时器count开始计数,使能一次就是计数达到设定值就停止,持续使能就是一直计数,当达到设定值后,计数器值count置0。
三、定时器时钟选择
定时器时钟是可以自己选择的,在TCR寄存器CLKSRC位、TIEN_LO位可以选择下图中的配置方式。
定时器的输出模式
共分为2中模式,脉冲和时钟模式,在TCR中控制CP_LO、CP_HI位
CP_LO、CP_HI = 0,脉冲模式可以自己控制脉冲宽度位来控制占空比。
CP_LO、CP_HI =1,时钟模式就是50%的标准时钟占空比。
四、定时器中断
如果我们需要定时性的中断产生,那么理所当然的我们需要配置定时器的工作模式处于持续模式。计数器达到配置值,就可以产生一个CPU中断。定时器初始化流程。
五、定时器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, |
|
|
|
pTmrParam, |
||
|
|
CSL_Status * |
pStatus |
|
|
) |
|
|
|
第二步:就是配置工作模式(一般csl中setup都是配置性参数)
下面函数功能就是将例化的参数配置到硬件寄存器中。
| ||||
CSL_Status CSL_tmrHwSetup |
( |
hTmr, |
||
|
|
hwSetup |
|
|
|
) |
|
|
|
CSL_TmrHwSetup 成员如图所示。 |
|
|
|
|
工作模式如下可以配置:
第三步:就是使能寄存器控制(一般在csl库函数中的control)
第二个形参控制字
六、结果分析
出现问题:之前自定义中断函数进不去。
检验办法:一、可以查看一些寄存器的值,比如查看控制寄存器中的IER中断号是否使能,NMEI是否使能,以及全局中断使能GIE寄存器是否使能。二、查看相应的定时器的上面使能寄存器位。
解决办法:发现使用64bit定时器工作模式时,对定时器的period time定时周期配置太大, 高32bit位1000,低32bit位1000,这样时间太长。修改可以配置定时器的周期值(period time),在CSL_tmrHwSetup中的hwSetup. tmrTimerPeriodHi和tmrTimerPeriodLo的值。
存在问题:就是从板子开始工作定时器一直在运行,但是核0还没有开始跑。