您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第8讲--定时器中断应用举例
盐城工学院电气工程学院DSP应用技术1第8章中断系统及其应用盐城工学院电气工程学院DSP应用技术2F281x处理器中断源及其连接关系盐城工学院电气工程学院DSP应用技术38.5定时器中断应用举例8.5.1定时器基本操作F2810和F2812器件上有3个32位的CPU定时器:TIMER0;TIMER1;TIMER2。定时器1定时器2CPU定时器0用户可以使用。用于实时操作系统(RTOS)盐城工学院电气工程学院DSP应用技术4注:CPU定时器与事件管理模块(EVA,EVB)中的通用(GP)定时器是不同的。或或与或图8.12CPU定时器功能框图盐城工学院电气工程学院DSP应用技术5一旦定时器被使能(TCR-Bit4=0),定时器时钟经过预定标计数器(PSCH:PSC)递减计数,预定标计数器产生下溢后向定时器的32位计数器(TIMH:TIM)借位。最后定时器计数器产生溢出使定时器向CPU发送中断。若处理器采用30MHz的外部时钟,经过锁相环10/2倍频后,系统的时钟工作在150MHz。图8.12中的定时器选择SYSCLKOUT作为定时器时钟,工作频率也是150MHz。每次预定标计数器产生溢出后使用分频寄存器(TDDRH:TDDR)中的值重新装载。同样,32位周期寄存器(PRDH_PRD)为32位计数器提供重新装载值。盐城工学院电气工程学院DSP应用技术6图8.13定时器中断结构盐城工学院电气工程学院DSP应用技术7寄存器地址长度(×16位)描述TIMER0TIM0x0C001CPU定时器0,计数寄存器TIMER0TIMH0x0C011CPU定时器0,计数寄存器高位字TIMER0PRD0x0C021CPU定时器0,周期寄存器TIMER0PRDH0x0C031CPU定时器0,周期寄存器高位字TIMER0TCR0x0C041CPU定时器0,控制寄存器保留0x0C051TIMER0TPR0x0C061CPU定时器0,前定标寄存器TIMER0TPRH0x0C071CPU定时器0,前定标寄存器高位字TIMER1TIM0x0C081CPU定时器1,计数寄存器TIMER1TIMH0x0C091CPU定时器1,计数寄存器高位字TIMER1PRD0x0C0A1CPU定时器1,周期寄存器8.5.2定时器寄存器定时器配置和控制寄存器盐城工学院电气工程学院DSP应用技术8寄存器地址长度(×16位)描述TIMER1PRDH0x0C0B1CPU定时器1,周期寄存器高位字TIMER1TCR0x0C0C1CPU定时器1,控制寄存器保留0x0C0D1TIMER1TPR0x0C0E1CPU定时器1,前定标寄存器TIMER1TPRH0x0C0F1CPU定时器1,前定标寄存器高位字TIMER2TIM0x0C101CPU定时器2,计数寄存器TIMER2TIMH0x0C111CPU定时器2,计数寄存器高位字TIMER2PRD0x0C121CPU定时器2,周期寄存器TIMER2PRDH0x0C131CPU定时器2,周期寄存器高位字TIMER2TCR0x0C141CPU定时器2,控制寄存器保留0x0C151TIMER2TPR0x0C161CPU定时器2,前定标寄存器TIMER2TPRH0x0C171CPU定时器2,前定标寄存器高位字保留0x0C18~0x0C3F40盐城工学院电气工程学院DSP应用技术9TIMERxTCR寄存器(x=0,1,2)15141312111098TIFTIEReservedFREESOFTReservedR/W-0R/W-0R-0R/W-0R/W-0R-0765430ReservedTRBTSSReservedR-0R/W-0R/W-0R-0位13~12Reserved保留位位9~6Reserved保留位位3~0Reserved保留位盐城工学院电气工程学院DSP应用技术10位15TIFCPU定时器中断标志位。当定时器减到0时,置位该标志。该位可以通过程序写入1清零,但是它只能由定时器计数到0时置位。向该位写入0无效。位14TIECPU定时器中断使能位。如果定时器减到0,并且该位置1,则定时器将产生中断请求。盐城工学院电气工程学院DSP应用技术11如果FREE位为1,则在软件断点时,定时器继续运行(也就是自由运行)。在此情况下,不管SOFT的状态。如果FREE为0,则SOFT将起作用。如果SOFT=0,则定时器停止下一次TIMH:TIM减计数。如果SOFT=1,则当TIMH:TIM减计数到0时,定时器停止。位11FREE位10SOFT这两位是专门的仿真位,决定了在高级语言仿真中遇到断点时定时器的状态。CPU定时器仿真模式位。盐城工学院电气工程学院DSP应用技术12FREESOFT定时器仿真模式00在TIMH:TIM的下一次减计数后停止(硬件停止)01在TIMH:TIM减计数到0后停止(软件停止)10自由运行11自由运行注:在前面的软件停止模式中,定时器在关闭之前会产生一个中断(因为到达0满足中断的产生条件)。盐城工学院电气工程学院DSP应用技术13位5TRBCPU定时器重装载位。向TRB位写入1时,TIMH:TIM将重新装载PRDH:PRD中的值,前定标分频计数器(PSCH:PSC)重新装载定时器分频值寄存器(TDDRH:TDDR)中的值。读TRB位时,值为0。位4TSSCPU定时器停止状态位。TSS为停止或起动定时器的一个标志位。向TSS写入1,将会停止定时器;写入0将会起动或重新开始定时器。复位时,TSS清零,定时器立即起动。盐城工学院电气工程学院DSP应用技术14定时器预定标寄存器TIMERxTPR(x=0,1,2)15870PSCTDDRR-0R/W-0盐城工学院电气工程学院DSP应用技术15位15~8PSCCPU定时器前定标分频计数器。保存定时器的当前前分频计数值。对于每一个定时器时钟源周期,PSCH:PSC值大于0,PSCH:PSC减1计数。在PSCH:PSC到0之后的一个定时器时钟周期(定时器预分频器的输出),PSCH:PSC重新装载TDDRH:TDDR的值,而定时器计数器(TIMH:TIM)减1。当软件置定时器重装载位(TRB)为1时,也会重装载PSCH:PSC。PSCH:PSC可以通过读该寄存器来检查,但是它不能直接被设置。它必须从定时器分频值寄存器(TDDRH:TDDR)中取值。复位时,PSCH:PSC为0。盐城工学院电气工程学院DSP应用技术16位7~0TDDRCPU定时器分频位域。每(TDDRH:TDDR+1)个定时器时钟源周期,定时器计数寄存器(TIMH:TIM)减1。复位时,TDDRH:TDDR位为0。为了以整数因子增加所有计数器计数,写该因子减1的数到TDDRH:TDDR位。当前分频计数器(PSCH:PSC)值为0时,一个定时器时钟周期后,TDDRH:TDDR重新装载PSCH:PSC的值,TIMH:TIM减1。当软件置定时器重装载位(TRB)为1时,TDDRH:TDDR也重新装载到PSCH:PSC。盐城工学院电气工程学院DSP应用技术1715870PSCHTDDRHR-0R/W-0定时器预定标寄存器TIMERxTPRH(x=0,1,2)盐城工学院电气工程学院DSP应用技术18TIMERxTIM寄存器(x=0,1,2)150TIMR/W-0位15~0TIMCPU定时器计数寄存器(TIMH:TIM)。盐城工学院电气工程学院DSP应用技术19TIM寄存器:保存定时器的当前32位计数值的低16位。TIMH寄存器保存定时器的当前32位计数值的高16位。TIMH:TIM每(TDDRH:TDDR+1)个时钟减1。TDDRH:TDDR为定时器前定标分频值。当TIMH:TIM减到0时,TIMH:TIM寄存器重新装载PRDH:PRD寄存器保存的周期值,并产生定时器中断信号()。盐城工学院电气工程学院DSP应用技术20150TIMHR/W-0位15~0TIMHTIMERxTIMH寄存器(x=0,1,2)盐城工学院电气工程学院DSP应用技术21150PRDR/W-0位15~0PRD定时器周期寄存器(PRDH:PRD)。TIMERxPRD寄存器(x=0,1,2)盐城工学院电气工程学院DSP应用技术22PRD寄存器:保存32位周期值的低16位。PRDH寄存器保持32位周期值的高16位。当TIMH:TIM减到0时,在下一个定时器输入时钟(预分频器的输出)开始时,TIMH:TIM寄存器重新装载PRDH:PRD寄存器中的周期值。当定时器控制寄存器(TCR)中的定时器重装载位(TRB)置位时,PRDH:PRD的值也将装载到TIMH:TIM。盐城工学院电气工程学院DSP应用技术23150PRDHR/W-0位15~0PRDHTIMERxPRDH寄存器(x=0,1,2)盐城工学院电气工程学院DSP应用技术248.6定时器中断应用举例定时器中断的例程文件结构如图8.18所示。盐城工学院电气工程学院DSP应用技术25========//文件名称:Example_281xCpuTimer.c//功能描述:采用CPUTimer0定时,在定时器中断服务程序中//记录中断的次数//观察的变量:CpuTimer0.InterruptCount#includeDSP281xDevice.h//DSP281xHeaderfileIncludeFile#includeDSP281x_Examples.h//DSP281xExamplesIncludeFile//函数声明interruptvoidcpu_timer0_isr(void);盐城工学院电气工程学院DSP应用技术26voidmain(void){//Step1、初始化系统控制寄存器、PLL、看门狗、时钟位默认状态//该函数在后面的DSP28_SysCtrl.c文件中查找InitSysCtrl();//Step2,GPIO初始化(本例中不使用)//InitGpio();//Step3、清除所有中断并初始化PIE中断向量表,禁止所有CPU中断DINT;盐城工学院电气工程学院DSP应用技术27//初始化PIE控制寄存器为其默认状态(所有PIE中断被禁止并且标志被清除)InitPieCtrl();//禁止所有CPU中断并清除所有中断标志IER=0x0000;IFR=0x0000;//初始化PIE控制寄存器,参考DSP28_PieCtrl.c文件InitPieVectTable();//将本例程所使用的中断向量重新映射,使其指向中断服务相应的程序EALLOW;PieVectTable.TINT0=&cpu_timer0_isr;EDIS;盐城工学院电气工程学院DSP应用技术28//Step4、初始化所有外设(本例中不需要)//InitPeripherals();InitCpuTimers();//在本例程中仅初始化Cpu定时器//配置CPU–Timer0每间隔1s产生1次中断//150MHzCPU频率,周期为1s(采用us的形式描述)ConfigCpuTimer(&CpuTimer0,100,1500000);StartCpuTimer0();盐城工学院电气工程学院DSP应用技术29//Step5、用户特定代码,使能中断//使能连接到CPU–Timer0的CPUINT1IER|=M_INT1;//使能位于PIE中的组1的第7个中断TINT0PieCtrlRegs.PIEIER1.bit.INTx7=1;//使能全局中断,并配置为real-timedebug模式EINT;//使能全局中断INTMERTM;//使能全局实时中断DBGM盐城工学院电气工程学院DSP应用技术30//Step6、IDLEloop等待产生中断for(;;);}interruptvoidcpu_timer0_isr(void){CpuTimer0.InterruptCount++;//响应中断并准备接收更多的中断PieCtrlRegs.PIEACK.a11=PIEACKGROUP1;}盐城工学院电气工程学院DSP应用技术31========//文件名称:D
本文标题:第8讲--定时器中断应用举例
链接地址:https://www.777doc.com/doc-3269485 .html