教材:《32位数字信号控制器原理及应用》《DSP原理及应用》Lecture2PIE&CLOCK黄灿水2015.3Lecture2PIE&CLOCKLecture2.1PIELecture2PIE&CLOCK一、中断的概念中断:是通过某些特定的事件向CPU请求服务,CPU收到请求后,暂时中止正在执行的程序,转去处理对应的服务子程序,处理完后返回继续执行原来程序的过程。中断源:产生中断请求的特定事件,例如定时器周期到达、AD转换完成、捕捉引脚信号跳变等等。一、中断的概念中断优先级:多个中断源同时向CPU申请中断,为了能够有序地处理多个中断申请所以要有中断优先级的规定。对于CPU来说中断源的优先级是默认规定好的。中断向量:中断服务程序的入口地址(首地址)。中断向量表:系统中RAM或ROM的一个区域,用于存储各种中断向量的首地址,其大小取决于CPU支持的中断类型和数量。Lecture2PIECPU级外设级PIE级二、三级中断管理外设级PIE级CPU级二、三级中断管理外设级:产生中断请求,未屏蔽则传到PIE级。PIE级:分组与仲裁,向CPU提出申请。可屏蔽中断:检查IER和INTM决定是否响应;非屏蔽中断:立即响应。CPU级:响应完成当前指令,清流水线,自动保存现场;取中断向量送PC;执行ISR。二、三级中断管理可屏蔽中断:INT1~INT12、INT13、INT14、XINT1、XINT2、XINT3不可屏蔽中断:XRS、NMI、INTR指令TRAP指令三、中断简化流程三、中断简化流程中断请求中断响应PIEIFRx=1PIEIERx=1?PIE仲裁PIEACKx=0?中断源PIEACKx=1IFRy=1IERy=1?INTM=1?响应中断IFRy=0、IERy=0INTM=1、跳转执行ISR子程序返回YYYYNNNN三、中断简化流程PIE外设中断分组表INTx.8INTx.7INTx.6INTx.5INTx.4INTx.3INTx.2INTx.1INT1WAKEINTTINT0ADCINT9XINT2XINT1ADCINT2ADCINT1INT2EPWM4_TZINTEPWM3_TZINTEPWM2_TZINTEPWM1_TZINTINT3EPWM4_INTEPWM3_INTEPWM2_INTEPWM1_INTINT4ECAP1_INTINT5INT6SPITXINTASPIRXINTAINT7INT8I2CINT2AI2CINT1AINT9SCITXINTASCIRXINTAINT10ADCINT8ADCINT7ADCINT6ADCINT5ADCINT4ADCINT3ADCINT2ADCINT1INT11INT12XINT3三、中断简化流程四、中断寄存器1、中断标志寄存器-IFRBITx=1:有相应中断请求BITx=0:无相应中断请求当CPU响应中断后中断标志位自动清0四、中断寄存器2、中断使能寄存器-IERBITx=1:中断使能BITx=0:中断禁止当CPU响应中断后中断允许位自动清0四、中断寄存器3、调试中断使能寄存器-DEBIER设置同IER,用于实时仿真时可屏蔽中断设置。在ST1中还有DEBM屏蔽位。四、中断寄存器4、PIE中断控制寄存器-PIECTRLBIT0:ENPIE=1时使能BIT15-1:中断向量地址5、PIE中断应答寄存器-PIEACKBIT11-0:INT12-INT1中断应答位,CPU响应中断时置1,需要在ISR程序中写1清0四、中断寄存器6、PIE中断标志寄存器–PIEIFRx(x=1-12)7、PIE中断使能寄存器–PIEIERx(x=1-12)四、中断寄存器8、外部中断控制寄存器–XINTxCR(x=1-3)BIT0:1中断使能,0中断禁止BIT3-2:00下降沿,01上升沿10下降沿,11下降沿和上升沿四、中断寄存器四、中断寄存器四、中断寄存器五、中断编程实现#include“xxxxxx.h......interruptvoidISR(void);......main(){......//中断初始化}interruptvoidISR(void){......//ISR子程序......//清各种标志位return;}1.关闭PIE组开关,12组2.关闭总开关3.清除组中断标志4.启动PIE_VectorRAM区5.配置PIE中断6.注册PIE中断向量7.开启支路开关8.开启组开关,有使用的组9.开启总开关Lecture2.2CLOCK一、时钟源INTOSC1:片内,可为WatchDog、CPU、Timer2提供时钟INTOSC2:片内,可为WatchDog、CPU、Timer2提供时钟晶体振荡器:X1、X2引脚外部接晶振提供时基外部时钟源:通过XCLKIN引脚输入外部时钟源INTOSC1INTOSC2CLKINXTALOSC关闭没使用外设的时钟可降低功耗。名称地址描述XCLK0x0000-7010XCLKOUT/XCLKIN控制PLLSTS0x0000-7011PLL状态寄存器CLKCTL0x0000-7012时钟控制寄存器PLLLOCKPRD0x0000-7013PLL锁定周期寄存器INTOSC1TRIM0x0000-7014内部振荡器1调整寄存器INTOSC2TRIM0x0000-7016内部振荡器2调整寄存器LOSPCP0x0000-701B低速外设时钟预分频器寄存器PCLKCR00x0000-701C外设时钟控制寄存器0PCLKCR10x0000-701D外设时钟控制寄存器1二、CLOCK寄存器名称地址描述LPMCR00x0000-701E低功率模式控制寄存器0PCLKCR30x0000-7020外设时钟控制寄存器3PLLCR0x0000-7021PLL控制寄存器SCSR0x0000-7022系统控制&状态寄存器WDCNTR0x0000-7023看门狗计数器寄存器WDKEY0x0000-7025看门狗复位密钥寄存器WDCR0x0000-7029看门狗控制寄存器二、CLK寄存器二、CLOCK寄存器1、外设时钟控制寄存器0–PCLKCR015111098保留SCIAENCLK保留SPIAENCLKR-0R/W-0R-0R/W-07543210保留I2CAENCLKADCENCLKTBCLKSYNC保留HRPWMENCLKR-0R/W-0R/W-0R/W-0R-0R/W-0BITx=1:外设时钟使能BITx=0:外设时钟禁止BIT2:ePWM模块时基时钟(TBCLK)同步设置位二、CLOCK寄存器1598743210保留ECAP1ENCLK保留EPWM4ENCLKEPWM3ENCLKEPWM2ENCLKEPWM1ENCLKR-0R/W-0R-0R/W-0R/W-0R/W-0R/W-02、外设时钟控制寄存器1–PCLKCR1BITx=1:外设时钟使能BITx=0:外设时钟禁止二、CLOCK寄存器3、外设时钟控制寄存器3–PCLKCR3151413121110987210保留GPIOINENCLK保留CPUTIMER2ENCLKCPUTIMER1ENCLKCPUTIMER0ENCLK保留COMP2ENCLKCOMP1ENCLKR-0R/W-1R-0R/W-1R/W-1R/W-1R-0R/W-0R/W-0BITx=1:外设时钟使能BITx=0:外设时钟禁止二、CLOCK寄存器4、低速外设时钟预分频器寄存器-LOSPCP15320保留LSPCLKR-0R/W-010BIT2-0:000低速时钟=SYSCLKOUT/1001低速时钟=SYSCLKOUT/2010低速时钟=SYSCLKOUT/4(复位默认值)011低速时钟=SYSCLKOUT/6100低速时钟=SYSCLKOUT/8101低速时钟=SYSCLKOUT/10110低速时钟=SYSCLKOUT/12111低速时钟=SYSCLKOUT/14二、CLOCK寄存器5、内部振荡器n的调节寄存器–INTOSCnTRIM(n=1或2)15149870保留FINETRIM保留COARSETRIMR-0R/W-0R-0R/W-0BIT14-9:8位粗调值,带符号的值(-127~+127)。BIT7-0:6位细调值,带符号的值(-31~+31)。注:内部振荡器用保存在OTP中的参数进行软件调节。在引导过程中,BootROM将这个值复制到上面的寄存器。二、CLOCK寄存器6、时钟寄存器-XCLK15765210保留XCLKINSEL保留XCLKOUTDIVR-0R/W-1R-0R/W-0BIT6:0GPIO38是XCLKIN输入源(JTAG-TCK复用)1GPIO19是XCLKIN输入源。BIT1-0:00XCLKOUT=SYSCLKOUT/401XCLKOUT=SYSCLKOUT/210XCLKOUT=SYSCLKOUT11XCLKOUT=Off使用XCLKIN时:X1拉低X2悬空7、时钟控制寄存器-CLKCTL二、CLOCK寄存器15141312111098NMIRESETSELXTALOSCOFFXCLKINOFFWDHALTIINTOSC2HALTIINTOSC2OFFINTOSC1HALTIINTOSC1OFFR/W-0R/W-0R/W-0R/W-0R/W-0R/W-0R/W-0R/W-07543210TMR2CLKPRESCALETMR2CLKSRCSELWDCLKSRCSELOSCCLKSRC2SELOSCCLKSRCSELR/W-0R/W-0R/W-0R/W-0R/W-0CLKCTL寄存器用来选择时钟源也用来配置时钟故障期间器件的行为7、时钟控制寄存器-CLKCTL二、CLOCK寄存器位域值描述15NMIRESETSEL01NMI复位选择位,不管作何选择,都会产生信号。没有任何延迟地直接驱动MCLKRS(复位默认)。NMI看门狗复位(NMIRS)启动MCLKRS。14XTALOSCOFF01晶体振荡器开启(复位默认)。晶体振荡器关闭。13XCLKINOFF01XCLKIN振荡器输入启用(复位默认)。XCLKIN振荡器输入关闭。12WDHALTI01看门狗自动通过停机模式开启/关闭(复位默认)。看门狗忽略停机模式。11INTOSC2HALTI01内部振荡器2自动通过停机模式开启/关闭。使能器件更快地从停机模式中唤醒(复位默认)。内部振荡器2忽略停机模式。10INTOSC2OFF01内部振荡器2开启(复位默认)。内部振荡器2关闭。二、CLOCK寄存器7、时钟控制寄存器-CLKCTL位域值描述9INTOSC1HALTI01内部振荡器1自动通过停机模式开启/关闭。使能器件更快从停机模式中唤醒(复位默认)。内部振荡器1忽略停机模式。8INTOSC1OFF01内部振荡器1开启(复位默认)。内部振荡器1关闭。7-5TMR2CLKPRESCALE000001010011100101110111CPUTimer2时钟预分频值:/1(复位默认)/2/4/8/16保留保留保留(续)二、CLOCK寄存器7、时钟控制寄存器-CLKCTL位域值描述4-3TMR2CLKSRCSEL00011011CPUTimer2时钟源选择位:选择SYSCLKOUT(复位默认,绕过预分频器)。选择外部振荡器(XOR输出)。选择内部振荡器1。选择内部振荡器2。2WDCLKSRCSEL01看门狗时钟源选择位:选择内部振荡器1(复位默认)。选择外部振荡器或内部振荡器2。1OSCCLKSRC2SEL01选择内部振荡器1或外部振荡器(复位默认)。选择内部振荡器2。0OSCCLKSRCSEL01选择内部振荡器1(复位默认)。选择外部振荡器或内部振荡器2。(续)二、CLOCK寄存器7、时钟控制寄存器-CLKCTL从INTOSC1切换到INTOSC2(无外部时钟),需要两次写操作:第一次:CLKCTL.XTALOSCOFF=1和CLKCTL.XCLKINOFF=1第二次:CLKCTL.OSCCLKLSRCSEL=1和CLKCTL.OSCCLKSRC2SEL=1使用TI提供的D