DSP

C6678定时器中断学习180614

2019-07-13 16:46发布

第一次写博客,希望能够在两年内记录一下自己的学习历程。目前刚开始接触DSP,所以在学习DSP上会对多写点,如果有不对的地方 希望大家能够不吝赐教!话不多说,接触的6678板子,所以先从6678的中断部分开始写起,之前写了一个GPIO的,但是楼主发现脑子短路了,因为没有外部中断GPIO口来触发,所以改成了定时器的中断触发,同时也增加了我对于ti的csl库函数的理解

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

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

 二、定时器使能标志

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。可以参见图中。 说明:定时器使能后,定时器count开始计数,使能一次就是计数达到设定值就停止,持续使能就是一直计数,当达到设定值后,计数器值count0

 三、定时器时钟选择

定时器时钟是可以自己选择的,在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 caltmrObj          定时器看门狗结构体pTmrParam       模块特定参数(可以不用管)        CSL_TmrHandle CSL_tmrOpen( href="file:///D: ipdk_C6678_1_1_2_6packages icsldocsdoxygenhtmlstruct_c_s_l___tmr_obj.html" CSL_TmrObj *pTmrObj,  CSL_InstNumtmrNum,  CSL_TmrParam *pTmrParam,  CSL_Status *pStatus  )   第二步:就是配置工作模式(一般cslsetup都是配置性参数)下面函数功能就是将例化的参数配置到硬件寄存器中。 CSL_Status CSL_tmrHwSetup (CSL_TmrHandlehTmr,  CSL_TmrHwSetup *hwSetup   )   CSL_TmrHwSetup 成员如图所示。     工作模式如下可以配置:  第三步:就是使能寄存器控制(一般在csl库函数中的control  第二个形参控制字 

 结果分析

出现问题:之前自定义中断函数进不去。检验办法:一、可以查看一些寄存器的值,比如查看控制寄存器中的IER中断号是否使能,NMEI是否使能,以及全局中断使能GIE寄存器是否使能。二、查看相应的定时器的上面使能寄存器位。解决办法:发现使用64bit定时器工作模式时,对定时器的period time定时周期配置太大, 32bit1000,低32bit1000,这样时间太长。修改可以配置定时器的周期值(period time),在CSL_tmrHwSetup中的hwSetup. tmrTimerPeriodHitmrTimerPeriodLo的值。  
存在问题:就是从板子开始工作定时器一直在运行,但是核0还没有开始跑。