当前位置:
文档之家› MC9S12XS128中文资料
MC9S12XS128中文资料
PWM标度B寄存器。用于控制Clock SB的值,Clock SB = Clock A / (2 * PWMSCLB),当PWMSCLB=0x00时,相当于PWMSCLB=256。
PWMCNTx:
PWM通道计数寄存器。
每个通道都有一个独立的8位计数器,其计数速率由所选择的时钟源决定。计数器的值可以随时读取而不影响计数器运行,也不影响PWM波形输出。在左对齐模式时,计数器从0计数至周期寄存器的值减1;在中心对齐模式,计数器从0计数至周期寄存器的值,然后再倒计数至0。
CFORC:
定时器比较强制寄存器。复位值为0x00。
FOCx=1将强制该位对应通道产生输出比较成功动作,但CxF中断标志位不置位。任何通道的强制比较成功动作若与普通比较成功动作同时发生,则强制比较成功动作优先发生,且CxF标志位不会置位。
被置位后瞬间将自动清除该位,所以任何时候对该寄存器的读动作都将返回0x00。
OC7M:
输出比较通道7屏蔽寄存器。复位值为0x00。
Setting the OC7Mx (x ranges from 0 to 6) will set the corresponding port to be an output port when the corresponding TIOSx (x ranges from 0 to 6) bit is set to be an output compare and the corresponding OCPDx (x ranges from 0 to 6) bit is set to zero to enable the timer port.A successful channel 7 output compare overrides any channel 6:0 compares. For each OC7M bit that is set, the output compare action reflects the corresponding OC7D bit.
Clock A、Clock B由下面的PWMPRCLK设置。
PWMPRCLK:
PWM预分频时钟源选择寄存器。
控制Clock A、Clock B的值。
PWMCAE:
PWM中心对齐使能寄存器。CAEx=1,该通道为中心对齐;CAEx=0,该通道为左对齐。
PWMCTL:
PWM控制寄存器。CONxx=1,则相应的两个通道级联使用,否则单独使用。级联后,整个级联通道由低位通道(通道数大的)的各个寄存器控制,高位通道(通道数小的)不起作用。
{
PWMPOL=0X01;//通道0输出波形开始极性为1 output waveform which high first then low when the duty counter is reached
PWMCAE=0x00; //左对齐输出模式output left align waveform
级联模式下,向高位通道或低位通道计数器寄存器写值,等同于向16位级联计数器寄存器写值,也即重置为0。
PWMSCLA:
PWM标度A寄存器。用于控制Clock SA的值,Clock SA = Clock A / (2 * PWMSCLA),当PWMSCLA=0x00时,相当于PWMSCLA=256。
PWMSCLB:
TCNT:
定时器计数寄存器。复位值为0x0000。
这是一个16位的寄存器,注意要使用字访问,不要单独访问高位或低位。该计数器向上计数至0xFFFF时将溢出至0x0000并触发定时器计数器溢出中断。向该寄存器写入值是无意义或无效的。
TSCR1:
定时器系统控制寄存器1。复位值为0x00。
TEN为定时器使能位,置位将启动主定时器模块,清零将关闭。清零后不影响脉冲累加计数器模块在事件计数器模式单独工作。
TTOV:
定时器溢出时触发寄存器。
该寄存器功能仅在相应通道行使输出比较功能时有效。当相应位置位并且定时器计数器溢出时,将优先于CFORC寄存器(除通道7以外)触发相应引脚。
TCTL1/TCTL2:
定时器控制寄存器1/2。
这两个寄存器中,每两位确定一个输出比较通道在成功发生一次比较后采取何种输出动作,这两位分别是OMx、OLx。他们的组合有四种,对应四种动作方式。
PWMPERx:
PWM通道周期寄存器。
每个通道都有一个独立的8位周期寄存器,它的值将间接决定该通道的PWM波形周期。该寄存器采用双缓冲器设计,即写入的新值不立即生效,直到本次有效周期结束或者计数器寄存器清零或者该通道被禁止。读该寄存器将返回最近一次写入的值(不一定是当前生效的值)。复位将重置值为0xFF。
PWMCLK=0X01; //PWM时钟源为SAClock SA is the clock source for PWM channel 0
PWMPRCLK=0X03; //时钟A8分频Clock A is 8MHz/8=1MHz
PWMSCLA=0X80; //时钟SA为1MHz/128/2 Clock SA is 1MHz/128/2=4KHz
对于端口T, S, M, P, H, J,和AD,有基于每个针脚的降额输出驱动控制寄存器。
对于端口A, B, E,和K,有一个基于端口的降额输出驱动控制寄存器。
对于端口S、M,有漏极开路(线或)控制寄存器。
对于端口P、H和J,有基于每个针脚的中断标志寄存器。
纯通用IO端口共计有41个,分别是:
PA[7:0]
PWMPER0=255; //设定输出周期=通道时钟周期*256
PWMDTY0=150;//占空比初始为0 Duty is 50%,and PWM waveform's frequent is 16
PWME=0X01;//通道0使能enable pwm channel 0
}
void main(void)
PWMPOL:
PWM极性寄存器。PPOLx=1,则该通道的周期初始输出为高电平,达到占空比后变为低电平;相反,若PPOLx=0,则初始输出为低电平,达到占空比后变为高电平。
PWMCLK:
PWM时钟源选择寄存器。0、1、4、5通道,PCLKx=0使用Clock A,PCLKx=1使用Clock SA;2、3、6、7通道,PCLKx=0使用Clock B,PCLKx=1使用Clock SB。
下面给出了如何由占空寄存器的值计算最终PWM输出波形的占空比:
Polarity = 0 (PPOLx = 0)
Duty Cycle = [(PWMPERx - PWMDTYx) / PWMPERx] * 100%
Polarity = 1 (PPOLx = 1)
Duty Cycle = [PWMDTYx / PWMPERx] * 100%
OC7D:
输出比较7数据寄存器。复位值为0x00。
A channel 7 output compare can cause bits in the output compare 7 data register to transfer to the timer port data register depending on the output compare 7 mask register.
向计数器写入任何值都将导致计数器复位至0、计数方向重置为向上。在有效周期末,计数器同样会被清零。只有当通道使能时计数器才进行计数。改变计数器的值应该在该通道禁止时进行。
若某个通道正在执行PWM功能,使用PWMEx=0禁止该通道,则该通道的计数器将“冻结”,下次使能该通道时,计数器将接着上次停止的地方继续计数,而不是重新从0开始。若要开始一个新的PWM脉冲波形,则应在使能前写一次计数器。
PWMx Period = Clock (A, B, SA, or SB) * (2 * PWMPERx)
PWMx Frequency = Clock (A, B, SA, or SB) / (2 * PWMPERx)
PWMDTYx:
PWM占空寄存器。每个通道都有一个独立的8位占空寄存器,它的值将间接决定该通道的PWM波形占空比。该寄存器采用双缓冲器设计,即写入的新值不立即生效,直到本次有效周期结束或者计数器寄存器清零或者该通道被禁止。读该寄存器将返回最近一次写入的值(不一定是当前生效的值)。复位将重置值为0xFF。
TIOS:
定时器输入捕捉/输出比较选择寄存器。复位值为0x00。
IOSx=0,相应通道行使输入捕捉,输入捕捉用来获取当外部事件发生时定时器计数器(TCNT)的值,当预期的触发事件输入到该通道上,定时器将把定时器计数器中的当前值传送到该通道的TCx寄存器中,然后置位TFLG1中的CxF标志位,若TIE中的CxI=1,则将触发该通道输入捕捉中断请求;而当IOSx=1,相应通道行使输出比较,输出比较用来在相应引脚上产生可定制周期、频率和极性的脉冲,当定时器计数器中的值步进至与该通道TCx中的预设值相等时,若OCPDx=0,定时器将置位、清零或者触发该通道的引脚,然后置位TFLG1中的CxF标志位,若TIE中的CxI=1,则将触发钙通道输出比较中断请求。
TFFCA为定时器所有标志位快速清零位,置位时将在访问某些寄存器时才清零TFLG1、TFLG2、PAFLG中的相应标志位;清零时将正常执行清零动作。该位默认是清零的。
PRNT确定定时器预分频器分频比从何选择。PRNT=0,则预分频比由TSCR2中的PR0、PR1、PR2决定;若PRNT=1,则由PTPSR寄存器决定。该寄存器在每次复位后只能写入一次。
PWMSDN:
PWM紧急关断寄存器。
参考程序:
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */