飞思卡尔智能汽车竞赛2009年4月Ver:1.0XS128主要模块实验指导书于喆编写第一章端口整合模块端口A,B和K为通用I/O接口端口E整合了IRQ,XIRQ中断输入端口T整合了1个定时模块端口S整合了2个SCI模块和1个SPI模块端口M整合了1个MSCAN端口P整合了PWM模块,同时可用作外部中断源输入端口H和J为通用I/O接口,同时可用作外部中断源输入端口AD整合了1个16位通道ATD模块大部分I/O引脚可由相应的寄存器位来配置选择数据方向、驱动能力,使能上拉或下拉式装置。当用作通用IO口时,所有的端口都有数据寄存器和数据方向寄存器。对于端口T,S,M,P,H,和J有基于每个针脚的上拉和下拉控制寄存器。对于端口AD有基于每个针脚的上拉寄存器。对于端口A、B、E和K,有一个基于端口的上拉控制寄存器。对于端口T,S,M,P,H,J,和AD,有基于每个针脚的降额输出驱动控制寄存器。对于端口A,B,E,和K,有一个基于端口的降额输出驱动控制寄存器。对于端口S、M,有漏极开路(线或)控制寄存器。对于端口P、H和J,有基于每个针脚的中断标志寄存器。纯通用IO端口共计有41个,分别是:PA[7:0]PB[7:0]PE[6:5]PE[3:2]PK[7,5:0]PM[7:6]PH[7:0](带中断输入)PJ[7:6](带中断输入)PJ[1:0](带中断输入)第二章脉冲宽度调制模块XS128具有8位8通道的PWM,相邻的两个通道可以级联组成16位的通道。PWME:PWM通道使能寄存器。PWMEx=1将立即使能该通道PWM波形输出。若两个通道级联组成一个16位通道,则低位通道(通道数大的)的使能寄存器成为该级联通道的使能寄存器,高位通道(通道数小的)的使能寄存器和高位的波形输出是无效的。PWMPOL:PWM极性寄存器。PPOLx=1,则该通道的周期初始输出为高电平,达到占空比后变为低电平;相反,若PPOLx=0,则初始输出为低电平,达到占空比后变为高电平。PWMCLK:PWM时钟源选择寄存器。0、1、4、5通道,PCLKx=0使用ClockA,PCLKx=1使用ClockSA;2、3、6、7通道,PCLKx=0使用ClockB,PCLKx=1使用ClockSB。ClockA、ClockB由下面的PWMPRCLK设置。PWMPRCLK:PWM预分频时钟源选择寄存器。控制ClockA、ClockB的值。PWMCAE:PWM中心对齐使能寄存器。CAEx=1,该通道为中心对齐;CAEx=0,该通道为左对齐。PWMCTL:PWM控制寄存器。CONxx=1,则相应的两个通道级联使用,否则单独使用。级联后,整个级联通道由低位通道(通道数大的)的各个寄存器控制,高位通道(通道数小的)不起作用。级联模式下,向高位通道或低位通道计数器寄存器写值,等同于向16位级联计数器寄存器写值,也即重置为0。PWMSCLA:PWM标度A寄存器。用于控制ClockSA的值,ClockSA=ClockA/(2*PWMSCLA),当PWMSCLA=0x00时,相当于PWMSCLA=256。PWMSCLB:PWM标度B寄存器。用于控制ClockSB的值,ClockSB=ClockA/(2*PWMSCLB),当PWMSCLB=0x00时,相当于PWMSCLB=256。PWMCNTx:PWM通道计数寄存器。每个通道都有一个独立的8位计数器,其计数速率由所选择的时钟源决定。计数器的值可以随时读取而不影响计数器运行,也不影响PWM波形输出。在左对齐模式时,计数器从0计数至周期寄存器的值减1;在中心对齐模式,计数器从0计数至周期寄存器的值,然后再倒计数至0。向计数器写入任何值都将导致计数器复位至0、计数方向重置为向上。在有效周期末,计数器同样会被清零。只有当通道使能时计数器才进行计数。改变计数器的值应该在该通道禁止时进行。若某个通道正在执行PWM功能,使用PWMEx=0禁止该通道,则该通道的计数器将“冻结”,下次使能该通道时,计数器将接着上次停止的地方继续计数,而不是重新从0开始。若要开始一个新的PWM脉冲波形,则应在使能前写一次计数器。PWMPERx:PWM通道周期寄存器。每个通道都有一个独立的8位周期寄存器,它的值将间接决定该通道的PWM波形周期。该寄存器采用双缓冲器设计,即写入的新值不立即生效,直到本次有效周期结束或者计数器寄存器清零或者该通道被禁止。读该寄存器将返回最近一次写入的值(不一定是当前生效的值)。复位将重置值为0xFF。下面给出了如何由周期寄存器的值计算最终PWM输出波形的周期与频率:左对齐输出:(CAEx=0)PWMxPeriod=Clock(A,B,SA,orSB)*PWMPERxPWMxFrequency=Clock(A,B,SA,orSB)/PWMPERx中心对齐输出:(CAEx=1)PWMxPeriod=Clock(A,B,SA,orSB)*(2*PWMPERx)PWMxFrequency=Clock(A,B,SA,orSB)/(2*PWMPERx)PWMDTYx:PWM占空寄存器。每个通道都有一个独立的8位占空寄存器,它的值将间接决定该通道的PWM波形占空比。该寄存器采用双缓冲器设计,即写入的新值不立即生效,直到本次有效周期结束或者计数器寄存器清零或者该通道被禁止。读该寄存器将返回最近一次写入的值(不一定是当前生效的值)。复位将重置值为0xFF。下面给出了如何由占空寄存器的值计算最终PWM输出波形的占空比:Polarity=0(PPOLx=0)DutyCycle=[(PWMPERx-PWMDTYx)/PWMPERx]*100%Polarity=1(PPOLx=1)DutyCycle=[PWMDTYx/PWMPERx]*100%PWMSDN:PWM紧急关断寄存器。参考程序:#includehidef.h/*commondefinesandmacros*/#includederivative.h/*derivative-specificdefinitions*/voidPWMinitial(){PWMPOL=0X01;//通道0输出波形开始极性为1outputwaveformwhichhighfirstthenlowwhenthedutycounterisreachedPWMCAE=0x00;//左对齐输出模式outputleftalignwaveformPWMCLK=0X01;//PWM时钟源为SAClockSAistheclocksourceforPWMchannel0PWMPRCLK=0X03;//时钟A8分频ClockAis8MHz/8=1MHzPWMSCLA=0X80;//时钟SA为1MHz/128/2ClockSAis1MHz/128/2=4KHzPWMPER0=255;//设定输出周期=通道时钟周期*256PWMDTY0=150;//占空比初始为0Dutyis50%,andPWMwaveform'sfrequentis16PWME=0X01;//通道0使能enablepwmchannel0}voidmain(void){PWMinitial();EnableInterrupts;for(;;){_FEED_COP();/*feedsthedog*/}}第三章定时器模块基本的定时器模块由1个增强的可编程预分频器驱动的可编程计数器、8个输入捕捉/输出比较通道和1个脉冲累加器组成。定时器模块一共有8个引脚,其中脉冲累加器与第7号通道的引脚是共用的。TIOS:定时器输入捕捉/输出比较选择寄存器。复位值为0x00。IOSx=0,相应通道行使输入捕捉,输入捕捉用来获取当外部事件发生时定时器计数器(TCNT)的值,当预期的触发事件输入到该通道上,定时器将把定时器计数器中的当前值传送到该通道的TCx寄存器中,然后置位TFLG1中的CxF标志位,若TIE中的CxI=1,则将触发该通道输入捕捉中断请求;而当IOSx=1,相应通道行使输出比较,输出比较用来在相应引脚上产生可定制周期、频率和极性的脉冲,当定时器计数器中的值步进至与该通道TCx中的预设值相等时,若OCPDx=0,定时器将置位、清零或者触发该通道的引脚,然后置位TFLG1中的CxF标志位,若TIE中的CxI=1,则将触发钙通道输出比较中断请求。CFORC:定时器比较强制寄存器。复位值为0x00。FOCx=1将强制该位对应通道产生输出比较成功动作,但CxF中断标志位不置位。任何通道的强制比较成功动作若与普通比较成功动作同时发生,则强制比较成功动作优先发生,且CxF标志位不会置位。被置位后瞬间将自动清除该位,所以任何时候对该寄存器的读动作都将返回0x00。OC7M:输出比较通道7屏蔽寄存器。复位值为0x00。SettingtheOC7Mx(xrangesfrom0to6)willsetthecorrespondingporttobeanoutputportwhenthecorrespondingTIOSx(xrangesfrom0to6)bitissettobeanoutputcompareandthecorrespondingOCPDx(xrangesfrom0to6)bitissettozerotoenablethetimerport.Asuccessfulchannel7outputcompareoverridesanychannel6:0compares.ForeachOC7Mbitthatisset,theoutputcompareactionreflectsthecorrespondingOC7Dbit.OC7D:输出比较7数据寄存器。复位值为0x00。Achannel7outputcomparecancausebitsintheoutputcompare7dataregistertotransfertothetimerportdataregisterdependingontheoutputcompare7maskregister.TCNT:定时器计数寄存器。复位值为0x0000。这是一个16位的寄存器,注意要使用字访问,不要单独访问高位或低位。该计数器向上计数至0xFFFF时将溢出至0x0000并触发定时器计数器溢出中断。向该寄存器写入值是无意义或无效的。TSCR1:定时器系统控制寄存器1。复位值为0x00。TEN为定时器使能位,置位将启动主定时器模块,清零将关闭。清零后不影响脉冲累加计数器模块在事件计数器模式单独工作。TFFCA为定时器所有标志位快速清零位,置位时将在访问某些寄存器时才清零TFLG1、TFLG2、PAFLG中的相应标志位;清零时将正常执行清零动作。该位默认是清零的。PRNT确定定时器预分频器分频比从何选择。PRNT=0,则预分频比由TSCR2中的PR0、PR1、PR2决定;若PRNT=1,则由PTPSR寄存器决定。该寄存器在每次复位后只能写入一次。TTOV:定时器溢出时触发寄存器。该寄存器功能仅在相应通道行使输出比较功能时有效。当相应位置位并且定时器计数器溢出时,将优先于CFORC寄存器(除通道7以外)触发相应引脚。TCTL1/TCTL2:定时器控制寄存器1/2。这两个寄存器中,每两位确定一个输出比较通道在成功发生一次比较后采取何种输出动作,这两位分别是OMx、OLx。他们的组合有四种,对应四种动作方式。TCTL1控制4~7通道,TCTL2控制0~3通道。Tooperatethe16-bitpulseaccumulatorindependentlyofinputcaptureoroutputcompare7and0respectivelytheusermustsetthecorrespondingbitsIOSx=1,OMx=0andOLx=0.OC7M7intheOC7Mregistermustalsobecleared.TCTL3/TCTL4:定时器控制寄存器3/4。这两个寄存器中,每两位确定一个输入捕捉通道的触发边缘类型,这两位分别是EDGxB、EDGxA。他