11、DSP的含义?--2种第一讲内容回顾2、DSP芯片的特点?--高速、实时3、DSP芯片的应用领域?信号处理、数字控制4、如何选择DSP芯片?TI的三个系列5、TMS320F28×芯片的特点?数字(电机)控制22.1时钟及系统控制2.2通用I/O2.3外设扩展中断模块2.4定时器中断举例DSP原理与应用技术第二讲系统控制与中断32.1时钟与系统控制TMS320F281×片上有基于PLL的时钟模块,为处理器和外设提供时钟信号。时钟源(OSCCLK)有两种配置模式:a)内部振荡器:在X1/XCLKIN和X2间接一个石英晶体;b)外部时钟源:将时钟信号直接接到X1/XCLKIN引脚,X2悬空,此时不使用片内振荡器。4系统时钟选择系统时钟(CLKIN)的选择:1)系统复位时,如果XPLLDIS=0时,CPU直接采用外部时钟或片内振荡器输出作为系统时钟;2)系统复位时,如果XPLLDIS=1时,外部时钟经过PLL分频或倍频后为CPU提供时钟。晶体振荡器及锁相环模块(1)(2)(3)5系统时钟选择提示:通常需要使能PLL模式,OSCCLK=30MHz,时钟5倍频。模式功能概述CLKIN禁止PLL复位时如果引脚/XPLLDIS是低电平,则屏蔽PLL模块。直接使用引脚X1/XCLKIN输入的时钟信号作为CPU时钟。XCLKIN旁路PLL上电时的默认值。如果PLL没有被禁止,则PLL将配置为旁路模式,此时引脚X1/XCLKIN输入的时钟信号经过2分频后作为CPU时钟。XCLKIN/2使能PLL通过向PLLCCR寄存器写入一个非零值n可以使能PLL。/2模块将PLL的输出二分频后送至CPU时钟。(OSCCLK·n)/2锁相环控制寄存器(PLLCR--0x00007021)30MHz15MHz15-150MHz6设置系统时钟-CLKIN//ThisfunctioninitializesthePLLCRregister.voidInitPll(unsignedintval){volatileunsignedinti;EALLOW;SysCtrlRegs.PLLCR.bit.DIV=val;EDIS;DisableDog();//WaitPLLlockcycles.for(i=0;i((131072/2)/12);i++){;}}}注意:例程中的循环次数是针对0等待状态的内部RAM情形。如果程序是从FLASH或外部扩展存储器中读取,则循环次数可以相应减少。循环前需要屏蔽看门狗模块可选:等待PLL时钟输出锁定.Val=0~10寄存器PLLCR是写保护的。7时钟频率与功耗的关系提示:DSP时钟频率不是越高越好,满足系统要求即可。1.8V3.3Vsum8外设时钟控制寄存器外设时钟控制寄存器(PCLKCR)使能或禁止相关外设的时钟(含CAN总线)。高速外设时钟寄存器(HISPCP)高速外设(并口):EVA,EVB,ADCHSPCLK=SYSCLK/(1~14)复位后的缺省值为:SYSCLK/2低速外设时钟寄存器(LOSPCP)低速外设(串口):SCIA,SCIB,SPI,McBSpLSPCLK=SYSCLK/(1~14)复位后的缺省值为:SYSCLK/475MHz37.5MHz9外设模块时钟的初始化voidInitPeripheralClocks(void){EALLOW;//HISPCP/LOSPCPwillbesettodefaultvaluesSysCtrlRegs.HISPCP.all=0x0001;//HSPCLK=SYSCLK/2SysCtrlRegs.LOSPCP.all=0x0002;//LSPCLK=SYSCLK/4//Peripheralclockenablessetfortheselectedperipherals.SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;SysCtrlRegs.PCLKCR.bit.EVBENCLK=1;SysCtrlRegs.PCLKCR.bit.SCIAENCLK=1;SysCtrlRegs.PCLKCR.bit.SCIBENCLK=1;SysCtrlRegs.PCLKCR.bit.MCBSPENCLK=1;SysCtrlRegs.PCLKCR.bit.SPIENCLK=1;SysCtrlRegs.PCLKCR.bit.ECANENCLK=1;SysCtrlRegs.PCLKCR.bit.ADCENCLK=1;EDIS;}1、为了降低功耗,建议关闭不使用的外设时钟。2、如果外设时钟未使能,则无法读写相应的外设寄存器。//Thisfunctioninitializestheclockstotheperipheralmodules.102、看门狗及其应用8位的看门狗计数器(WDCNTR),当计数到最大值时看门狗模块产生一个输出脉冲(512个OSCCLK时钟宽度),并可以中断或复位DSP。如果不希望产生脉冲信号,用户可以屏蔽看门狗模块,或者通过软件周期性的向看门狗复位寄存器(WDKEY)写“0x55+0xAA”,使得WDCNTR清零。应用说明:使能看门狗或屏蔽看门狗模块?看门狗时钟倍率?WDCR希望看门狗中断(从低功耗模式唤醒)还是复位(程序失控)?SCSR程序运行过程周期性的复位WDCNTR。向WDKEY写“0x55+0xAA”如果程序失控,则复位或中断DSP;否则看门狗不影响程序执行。提示:看门狗作为提高系统抗干扰能力的措施之一,是一种补救措施。11看门狗模块框图看门狗模块12看门狗控制寄存器WDCR写1到WDDIS,屏蔽看门狗模块;写0使能看门狗模块。WDCHK(2~0)必须写101,其它值会引起DSP复位。WDPS(2~0)配置看门狗计数时钟:WDCLK=OSCCLK/512/(1~64)。看门狗中断状态标志位WDFLAG:读:1--看门狗复位(WDRST);0--器件复位写:1--将WDFLAG清零;0--WDFLAG状态不变13使能/屏蔽看门狗模块//Thisfunctiondisablesthewatchdogtimer.voidDisableDog(void){EALLOW;SysCtrlRegs.WDCR=0x0068;//WDDIS=1,WDCHK=101,EDIS;//WDPS=000(WDCLK=OSCCLK/512)}//Thisfunctionenablesthewatchdogtimer.voidEnableDog(void){EALLOW;SysCtrlRegs.WDCR=0x0028;//WDDIS=0,WDCHK=101,EDIS;//WDPS=000(WDCLK=OSCCLK/512)}14系统控制和状态寄存器SCSRWDENINT:1--看门狗复位信号(WDRST)被屏蔽,看门狗中断信号使能(WDINT)0--看门狗复位信号(WDRST)被使能,看门狗中断信号屏蔽(WDINT)WDINTS:看门狗中断状态位,反映WDINT的状态。WDOVERRIDE:1--允许改变WDCR中的看门狗屏蔽位WDDIS;0--不能改变WDDIS清零后只有系统复位才允许改变该位的状态,用户可读取该位状态。15看门狗复位寄存器WDKEY依次写0x55+0xAA到WDKEY将使WDCNTR清零;写其它任何值都会使看门狗复位;读该寄存器将返回WDCR寄存器的值。//Thisfunctionresetsthewatchdogtimer.voidKickDog(void){EALLOW;SysCtrlRegs.WDKEY=0x0055;SysCtrlRegs.WDKEY=0x00AA;EDIS;}如果系统使能看门狗模块,需要在用户程序中定时执行KickDog函数,且定时器周期要小于看门狗计数器溢出周期。16看门狗计数寄存器WDCNTRWDCNTR包含看门狗计数器的当前计数值(0-0xFF);如果计数器溢出,看门狗产生中断或复位DSP;如果向WDKEY写有效的组合(0x55+0xAA),将使计数器清零。看门狗定时器的周期最大值:OSCCLK/512/(1-64)/256。17初始化系统控制//-ThisfunctioninitializestheSystemControlregisterstoaknownstate.程序功能:1、屏蔽看门狗模块2、配置PLLCR寄存器,设定SYSCLKOUT的频率3、配置高速/低速外设时钟的预定标因子4、使能相应外设时钟voidInitSysCtrl(void){//DisablethewatchdogDisableDog();//InitializethePLLCRto0xAInitPll(0xA);//InitializetheperipheralclocksInitPeripheralClocks();}实验时,注意使能所使用的外设模块时钟,否则无法读写相应的外设寄存器。PLLCR通常设为10,即CPU的时钟频率为30MHz×5。183、通用定时器F281×器件上有3个32位CPU定时器(TIMER0/1/2)TIMER0可以在用户程序中使用,TIMER1/2预留给DSPBIOS或其它RTOS使用(如果不用DSPBIOS,可以供用户使用)。每个定时器有4个寄存器:1)计数寄存器(TIMH:TIM):32位2)周期寄存器(PRDH:PRD):32位3)预定标寄存器(TPR):32位(预定标计数器PSC+分频寄存器TDDR)4)控制寄存器(TCR):16位TIF-TimerInterruptFlagTIE-TimerInterruptEnableTRB-TimerReloadBitTSS-TimerStopStatusBit19通用定时器定时器的工作过程:1)用32位计数寄存器(TIMH:TIM)装载周期寄存器(PRDH:PRD)中的计时常数;2)计数寄存器根据SYSCLKOUT时钟递减计数(16+32位);3)当计数寄存器等于0时,定时器的计数器寄存器重载周期寄存器值,并输出一个中断脉冲(TINT0)。20voidConfigCpuTimer(structCPUTIMER_VARS*Timer,floatFreq,floatPeriod){unsignedlongtemp;Timer-CPUFreqInMHz=Freq;//InitializetimerperiodTimer-PeriodInUSec=Period;temp=(long)(Freq*Period);//150MHz×100us=15000Timer-RegsAddr-PRD.all=temp;Timer-RegsAddr-TPR.all=0;//Setpre-scalecountertodivideby1Timer-RegsAddr-TPRH.all=0;//Initializetimercontrolregister:Timer-RegsAddr-TCR.bit.TSS=1/0;//1=Stoptimer,0=StartTimerTimer-RegsAddr-TCR.bit.TRB=1;//1=reloadtimerTimer-RegsAddr-TCR.bit.SOFT=1;Timer-RegsAddr-TCR.bit.FREE=1;//TimerFreeRunTimer-RegsAddr-TCR.bit.TIE=1;//1=EnableTimerInterrupt}配置CPU定时器下面的函数中周期寄存器由给定的DSP时钟频率Freq(MHz)和定时器周期Period(µs)两个参数确定。初始化后定时器处于停止状态。212.2通用I/OF281×器件上有56个多功能复用引脚,通过GPxMUX寄存器可配置为外设信号或数字I/O引脚;如果配置为数字I/O引脚,可以通过方向寄存器(GPxDIR)控制引脚为输入或输出;通过量化寄存器(GPxQUAL)设定量化采样周期(QU