飞思卡尔XS128_各模块整理资料

合集下载

MC9S12XS128 PIT模块

MC9S12XS128 PIT模块

言归正传,开始讲PIT,讲PIT,我准备先简单讲讲寄存器,之前不讲主要是基本上买的到的书都是DG128的,里面关于IO口的寄存器和PWM的寄存器都是完全可以照搬的,而这一章的东西照搬是要出问题的。

核心内容就在这张图上:相信大家都明白总线的概念,在图中可以看到6个定时器模块,Micro Timer 0、Micro Timer 1、Timer 0、Timer 1、Timer 2、Timer 3,其中前两个是8位的,后四个是16位的。

从图中可以看出PIT模块是以总线时钟(Bus Clock)为基准时钟的,总线时钟通过8位Micro Timer 0和Micro Timer 1倍频形成两个基时钟,即Micro Timer Base 0和Micro Timer Base 1,这两个基时钟通过16位Timer给PIT提供时钟(通过寄存器PITMUX设置)。

原理讲完了,其实相对于PIT模块是一个24位的定时器(51单片机最多也就16位),这个计数范围还是蛮大的。

下面是一些寄存器的解释,解释完还是看代码吧。

S12PIT24B4CV1是一个模数递减计数器。

首先给计数寄存器设定一个初值,每经过一个总线周期,计数器进行一次减一操作,当计数器自减溢出时,触发中断。

因为总线周期是已知的,即可以通过计数器自减实现定时。

在XS128PIT模块中,需要用到得是如下几个寄存器。

1)、PIT Contorl and force Lad Micro Timer Register(PITCFLMT)该寄存器用于PIT模块的使能设置和工作方式设置。

通常设置该寄存器中的PITE为即可,即PITCFLMT_PITE=1,使PIT使能。

2)、PIT Channel Enable Register(PITCE)该寄存器用于对PIT模块中的4个通道使能进行设置。

如果使用某个通道时,对对应位进行置一即可,即PITCE_PCEx=1,其中x代表通道序号,为0~3。

飞思卡尔MC9S12XS128单片机重点模块讲解

飞思卡尔MC9S12XS128单片机重点模块讲解

基于飞思卡尔 MC9S12XS128MCU 的模块讲解及测试
安徽工业大学 自动化系 刘昌元 delay(500); if(LED==0x80) LED=0x01; } } 综合以上的两段代码看在 52 单片机和 128 单片机上编程思路基本上没大的区别,唯一的区 别就是 128 单片机有数据方向寄存器来管理 I/O 口。 � 将部分端口做输入口使用,另外一部分端口做输出口使用时:例如我们将 PORTB 的端 口 B7 用来做输入口,B0-B5 口做输出指示,测试代码如下:

以端口 A 和端口 B 为例讲解,以上是我截取的技术手册上的,从上来看 A 口和 B 口各 有 8 个口,且 A0-A7;B0-B7 全部作为 GPIO (通用输入输出口 )使用。此处 A 口和 B 口 使用方法是一样的,我姑且就以端口 A 来讲解。 A 口和 B 口作为通用输入输出口使用时我们只需要掌握 4 个寄存器即可。 PORTA (A 口

这一点和 51 单片机的 I/O 口有区别,在典型的 51 单片中 P0 口内部没有上拉电阻,但作为 I/O 口使用时需要外接排阻。其他 P1-P3 口则可以直接作为双向口使用,51 单片在上电复位 后端口被默认的置 1.在 51 单片中端口的某一位置 0 时端口作为输出口使用,置 1 时作为输 入口使用。例如如果我们想把 P1 作为输出口使用时我们可以在程序开始时写 P1=0x00; 如果 我们想把 P1 口作为输入口使用时我们可以写 P1=0xff; 这一点正好和飞思卡尔的 128 单片机 相反,另外 128 单片有专门的数据方向寄存器 DDRA 或者 DDRB 等来管理各个端口的输入 输出选择,51 单片没有。如果我们想把端口 A 作为输入口使用,我们只需写 DDRA=0x00; 即所有位都置 0,如果我们想把端口 A 作为输出口使用,我们只需要写 DDRA=0xff; 即所有 位都置 1 ,而如 果我们想要 把端口 A 的高四 位做输入口 ,低 4 位做输 出口时我们 就 写 DDRA=0x0f; 当我们需要将该端口的某一位做输出或者输入口使用时只需要将该端口对应的 方向位置 1 或者置 0 即可。例如我们想把 A3 口作输入口, A4 口作输出口使用时我们只需 要写: DDRA_DDRA3=0; DDRA_DDRA4=1; 即可。 � � 对于数据方向寄存器的使用只要记住:置 1——输出 置 0——输入 PORTA 数据寄存器也是由 8 位组成,任何时候都可以对它进行读写操作。

飞思卡尔MC9S12G系列芯片之【GPIO】模块总结

飞思卡尔MC9S12G系列芯片之【GPIO】模块总结

位数 8 8 8 8 2
小注: a. 由上表可知,这五个寄存器通过同一个电阻控制寄存器 PUCR 的 0~4 位分别
对应控制端口 A~D;
b. 在学习板中(这是前提,以下模块与寄存器的连接仅限此开发板):
LED 灯是通过 PORTA 寄存器控制,LED1~LED8 分别对应 PORTA 的 P0~P7 位(注意
置 0:输入 置 1:输出 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:下降沿触发 置 1:上升沿触发 置 0:中断禁止 置 1:中断使能 置 0:无极性沿发生 置 1:有极性沿发生
位数 8
8
端口 P 和 J 都含有 7 个寄存器,其中与中断有关的寄存器有两个:
中断使能寄存器 PIEx 及中断标志寄存器 PIFx。
置 0:低电平 置 1:高电平 用于检测过载或输出 引脚短路条件 置 0:输入 置 1:输出 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:下降沿触发 置 1:上升沿触发
WOMN 寄存器为 PORTS 和 PORTM 特有的寄存器,不常用。
位数 8
8
端口名称
寄存器种类 数据寄存器(PTT)
PORTT (PT)
GPIO 模块总结(以 MC9S12G128 为例)
一、常见功能
功能 设置输入/输出端口 设定 I/O 口的高低电平 选择内置上拉/下拉电阻 中断输入方式的选择 驱动能力的设置
需配置寄存器 DDRx(置 0 为输入,置 1 时为输出) PORTx(置 0 低电平、置 1 高电平) PERx PIEX XS128 芯片具有
EnableInterrupt;
// 定义主函数
// 禁止中断 // 设置 I/O 方向为输出 / *对 data 取反后为 0111 1111,因 LED 在低

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.

XS128 PWM

XS128 PWM

xs128-PWM设置pwm模块.用于舵机电机控制.1. 开启pwmpwme寄存器8位[ pwme7 pwme6 ..]pwme1 = 1 一号通道开启pwme2 = 0 二号关闭2.pwm极性选择初始波形1 or 0pwmpol寄存器8位[ ppol7 ppol6 ..]pwmpol1 = 1; 一号通道先高电平.3.pwm时钟选择pwmclk寄存器8位[ pclk7 pclk6 ..]0 1 4 5 可选A SA时钟2 3 6 7 可选B SB时钟pclk1 = 1 ;一通道选择SApclk1 = 0 ;一通道选择A4. A ,B时钟分频PWMPRCLK寄存器8位高[0 b2 b1 b0 0 a2 a1 a0] 低PCKB0~PCKB2 B分频PCKA0~PCKA2 A分频PCK*2 PCK*1 PCK*0 频率0 0 0 E0 0 1 E/20 1 0 E/40 1 1 E/81 0 0 E/161 0 1 E/321 1 0 E/641 1 1 E/1285.SA SB时钟分频PWMSCLA SA时钟分频8位PWMSCLB SB时钟分频8位分频公式SA = A/(2*PWMSCLA)SB = B/(3*PWMSCLB)6.输出选项左对齐or 居中对齐PWMCAE寄存器8位[ CAE7 CAE6 ..]CAEX = 1 居中对齐7.通道串联设置PWNCTL寄存器8 位[con67 con45 con23 con01 pswai pfrz 0 0]CON67 = 1 ;6 7 通道串联7通道控制有效8. PWNCNTx 计数寄存器PWMCNTx 8个PWMCNT0 PWMCNT1 ..9.PWMPERx 周期寄存器PWMPERx 8个PWMPER0 PWMPER1 ..左对齐PWMx周期= 时钟周期* PWMPERx居中对齐PWMx周期= 时钟周期* PWMPERx * 210.PWMDTYx 占空比寄存器PWMCTYx 8个PWMDTY0 PWMDTY1 ..ppol=0占空比=[(PWMPERx-PWMDTYx)/PWMPERx]*100%ppol=1占空比=(PWMDTYx/PWMPERx)*100%。

飞思卡尔MC9S12XS128功能模块驱动

飞思卡尔MC9S12XS128功能模块驱动

用了一年多飞思卡尔MC9S12XS128这款处理器,现在总结下各个功能模块的驱动.//锁相环时钟的初始化总线频率为40MHz(总线时钟为锁相环时钟的一半)//晶振为11.0592MHzvoid PLL_init(void) //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1) { //锁相环时钟= 2*11.0592*(39+1)/(10+1)=80MHz 总线时钟为40MHzREFDV=0x0A;SYNR=0x67; //0110_0111 低6位的值为19,高两位的值为推荐值while(CRGFLG_LOCK != 1);CLKSEL_PLLSEL = 1; //选定锁相环时钟//FCLKDIV=0x0F; //Flash Clock Divide Factor 16M/16=1M}//周期中断定时器的初始化-// //周期中断通道1用于脉冲累加器的定时采样,定时周期为: 10ms= (199+1)*(1999+1)/(40M) (没有使用)//周期中断通道0用于控制激光管的轮流发射,定时周期为: 2000us= (399+1)*(199+1)/(40M)//2011/4/4 15:24 定时时间改为1msvoid PIT_init(void){PITCFLMT_PITE = 0; // 禁止使用PIT模块 PITCFLMT :PIT 控制强制加载微计数器寄存器。

PITCE_PCE0 = 1; // 使能定时器通道0//PITCE_PCE1 = 1; //使能定时器通道1PITMUX = 0; //通道0,和通道1均选择8位微计数器0//修改时间只需要改下面四行PITMTLD0 = 199; //向8位微计数器中加载的值PITLD0 = 199; //向16位计数器中加载的值//PITMTLD1 = 39; //向8位微计数器中加载的值 8位,最大值不要超过255//PITLD1 = 1999; //向16位计数器中加载的值PITINTE |= 0x01; //使能定时器通道0的中断PITCFLMT_PITE = 1;//使能PIT模块}//脉冲累加器的初始化, PT7口外接光电编码器//最新修改: 2011/3/25 16:53void PT7_PulAcc_Init(void){DDRT &= 0x77;//设置PT7,PT3口为输入(硬件上PT7,PT3通过跳线联到了一块)PERT |= 0x80; //使能通道7的上拉电阻PPST &= 0x7f; //电阻设为上拉电阻TCTL4 &= 0x3f; //禁止PT3的输入捕捉功能PACTL = 0x50; //启动脉冲累加计数器,上升沿触发,禁止触发中断和溢出中断,主定时器禁止}//通道1用于控制舵机1 PWM 高电平有效,//通道3用于控制电机1 PWM 低电平有效,这与前两代车高电平有效有区别!!!!!//通道7用于给上排激光管提供PWM信号 PWM高电平有效!!!!!//通道6用于给下排激光管提供PWM信号 PWM高电平有效!!!!!// 2011-03-17 7:56 增加了A端口的使用新增通道6//2011-6-9 23:03 //增加了通道4,5的联合使用,用于控制下排方向舵机 void PWM_init(void){PWME = 0x00;//PWM禁止PWMPRCLK = 0x03; // ClockA=40M/8=5M, Clock B = 40M/1=40M PWMSCLB = 10; // Clock SB= 40/2*10= 2MHz(供电机)PWMSCLA = 5; // SA = Clock A/2*5 = 5M/10 = 500K = SA 用于控制舵机PWMPOL = 0xe2; //1110_0010通道7,通道6与通道1、通道5先输出高电平然后输出低电平,POLx=1先输出高电平后输出低电平; PPOLx=0先输出低电平)PWMCAE = 0x00; // 左对齐输出(CAEx=0为左对齐,反之为中心对齐)//PWMCLK = 0010_1010 (0 1 4 5位控制SA_1;或A_0; 2 3 6 7位控制SB_1 或B_0)//为PWM通道1选择时钟 SA(500KHz),//为PWM通道5选择时钟 SA(500KHz),//为通道3选择时钟 SB(10MHz)//为通道7选择时钟B(40MHz)//为通道6选择时钟B(40MHz)PWMCLK = 0x2A; //0010_1010PWMCTL = 0x70; //0111_0000 CON45=1,把通道4,5联合使用。

飞思卡尔MC9S12XS128各模块初始化程序--超详细注释

飞思卡尔MC9S12XS128各模块初始化程序--超详细注释//**************************************************************************// 武狂狼2014.5.1 整理// 新手入门的助手////***************************************************************************注释不详细/*********************************************************/函数名称:void ATD0_init(void)函数功能:ATD初始化入口参数:出口参数:/***********************************************************/void ATD0_init(void){ATD0DIEN=0x00; //使用模拟输入功能|=1;数字输入功能// ATD0CTL0=0x07; //Bit[3:0]WRAP[3:0] 反转通道选择位ATD0CTL1=0x40; // 12位精度,采样前不放电 Bit[7]ETRIGSEL(外部触发源选择位。

=0选择A/D通道AN[15:0] |=1选择 ERTIG3~0)和Bit[3:0]ETRIGCH[3:0]选择外部触发通道// Bit[6:5]SRES[1:0]A/D分辨率选择位。

Bit[4]SMP_DIS =0采样前不放电|=1采样前内部电容放电,这会增加2个A/D时钟周期的采样时间,有助于采样前进行开路检测ATD0CTL2=0x40; // 快速清零,禁止中断,禁止外部触发ATD0CTL3=0x90; // 右对齐,转换序列长度为2,非FIFOATD0CTL4=0x03; // 采样时间4个周期,PRS=31,F(ATDCLK)=F(BUS)/(2(PRS+1))// ATD0CTL5=0x30; //启动AD转换序列//:对每项数据采集时,用到哪个通道采样可在相应子函数内设置某一通道(见Sample_AD.c)while(!ATD0STAT2L_CCF0);/*********************************************************/函数名称:void PIT_init(void)函数功能:初始化PIT 设置精确定时时间(1s)入口参数:无出口参数:无说明:无/***********************************************************/void PIT_init(void){PITCFLMT=0x00; //禁止PIT模块Bit[7] PITE:PIT模块使能位,0禁用|1使能// Bit[6] PITSWAI:等待模式下PIT停止位,0等待模式下,PIT模块正常运行| 1等待模式下,PIT模块停止产生时钟信号,冻结PIT模块// Bit[5] PITFRZ: 冻结模式下PIT计数器冻结位。

飞思卡尔16位单片机9S12XS128使用和程序

飞思卡尔16位单片机9S12XS128使用收藏最近做一个关于飞思卡尔16位单片机9S12XS128MAA的项目,以前未做过单片机,故做此项目颇有些感触。

现记录下这个艰辛历程。

以前一直是做软件方面的工作,很少接触硬件,感觉搞硬件的人很高深,现在接触了点硬件发现,与其说使用java,C#等语言写程序是搭积木,不如说搞硬件芯片搭接的更像是在搭积木(因为芯片是实实在在拿在手里的东西,而代码不是滴。

还有搞芯片内部电路的不在此列,这个我暂时还不熟悉)。

目前我们在做的这个模块,就是使用现有的很多芯片,然后根据其引脚定义,搭接出我们需要的功能PCB板,然后为其写程序。

废话不多说,进入正题。

单片机简介:9S12XS128MAA单片机是16位的单片机80个引脚,CPU是CPU12X,内部RAM 8KB,EEPROM:2KB,FLASH:128KB,外部晶振16M,通过内部PLL可得40M总线时钟。

9S12XS128MAA单片机拥有:CAN:1个,SCI:2个,SPI:1个,TIM:8个,PIT:4个,A/D:8个,PWM:8个下面介绍下我们项目用到的几个模块给出初始化代码1、时钟模块初始化单片机利用外部16M晶振,通过锁相环电路产生40M的总线时钟(9S12XS128系列标准为40M),初始化代码如下:view plaincopy to clipboardprint?/******************系统时钟初始化****************/void Init_System_Clock(){asm { // 这里采用汇编代码来产生40M的总线LDAB #3STAB REFDVLDAB #4STAB SYNRBRCLR CRGFLG,#$08,*//本句话含义为等待频率稳定然后执行下一条汇编语句,选择此频率作为总线频率BSET CLKSEL,#$80}}/******************系统时钟初始化****************/void Init_System_Clock(){asm { // 这里采用汇编代码来产生40M的总线LDAB #3STAB REFDVLDAB #4STAB SYNRBRCLR CRGFLG,#$08,*//本句话含义为等待频率稳定然后执行下一条汇编语句,选择此频率作为总线频率BSET CLKSEL,#$80}}上面的代码是汇编写的,这个因为汇编代码量比较少,所以用它写了,具体含义注释已经给出,主函数中调用此函数即可完成时钟初始化,总线时钟为40M.2、SCI模块初始化单片机电路做好了当然少不了和PC之间的通信,通信通过单片机串口SCI链接到PC 端的COM口上去。

XS128各模块整理资料

来源:电子设计吧整理:大学生电子设计联盟smile_keyang/index.php欢迎访问!!!手把手教你写S12XS128程序--PWM模块介绍该教程以MC9S12XS128单片机为核心进行讲解,全面阐释该16位单片机资源。

本文为第一讲,开始介绍该MCU的PWM模块。

PWM 调制波有8个输出通道,每一个输出通道都可以独立的进行输出。

每一个输出通道都有一个精确的计数器(计算脉冲的个数),一个周期控制寄存器和两个可供选择的时钟源。

每一个P WM 输出通道都能调制出占空比从0—100% 变化的波形。

PWM 的主要特点有:1、它有8个独立的输出通道,并且通过编程可控制其输出波形的周期。

2、每一个输出通道都有一个精确的计数器。

3、每一个通道的P WM 输出使能都可以由编程来控制。

4、PWM 输出波形的翻转控制可以通过编程来实现。

5、周期和脉宽可以被双缓冲。

当通道关闭或PWM 计数器为0 时,改变周期和脉宽才起作用。

6、8 字节或16 字节的通道协议。

,他们提供了一个宽范围的时7、有4个时钟源可供选择(A、SA、B、SB)钟频率。

8、通过编程可以实现希望的时钟周期。

9、具有遇到紧急情况关闭程序的功能。

10、每一个通道都可以通过编程实现左对齐输出还是居中对齐输出。

1、PWM启动寄存器PWMEPWME 寄存器每一位如图1所示:复位默认值:0000 0000B图1 PWME 寄存器每一个PWM 的输出通道都有一个使能位P WMEx 。

它相当于一个开关,用来启动和关闭相应通道的PWM 波形输出。

当任意的P WMEx 位置1,则相关的P WM 输出通道就立刻可用。

用法:PWME7=1 --- 通道7 可对外输出波形PWME7=0 --- 通道7 不能对外输出波形注意:在通道使能后所输出的第一个波形可能是不规则的。

当输出通道工作在串联模式时(PWMCTL 寄存器中的CONxx置1),那么)使能相应的16位PWM 输出通道是由PWMEx 的高位控制的,例如:设置PWMCTL_CON01 = 1,通道0、1级联,形成一个16位PWM 通道,由通道 1 的使能位控制PWM 的输出。

飞思卡尔2014mc9s12xs128学习及智能车制作笔记

S128学习笔记(一)GPIO 模块S128 IO操作主要有三个寄存器数据寄存器(PORTX)数据方向寄存器(DDRX) 上拉上拉电阻控制寄存器PUCR)一. GPIO概述通用I/O:GPIO(General Purpose I/O),是I/O的最基本形式,它是一组输入或输出引脚,有时也称为并行I/O(parallel I/O)。

作为普通输入引脚,MCU内部程序可以读取该引脚,知道该引脚是“1”(高电平)或“0”(低电平),即开关量输入。

作为普通输出引脚,MCU内部程序由该引脚输出“1”(高电平)或“0”(低电平),即开关量输出。

大多数通用I/O引脚可以通过编程来设定工作方式为输入或输出,称之为双向通用I/O。

2. I/O口的使用方法MC9S12DG128 MCU有10个普通I/O口,分别是A口、B口、E口、H口、J口、K口、M 口、P口、S口、T口。

这些引脚中的大部分具有双重功能,其中A、B、E、K口只用做GPIO 功能,这里仅讨论它们编程方法。

使用这些I/O口主要设置如下寄存器:1)数据方向寄存器(Data Direction Register x,DDRx)DDRx的第7~0位分别记为DDRx7~DDRx0,这些位分别控制着x口引脚PORTx7~PORTx0是输入还是输出,若DDRxn=0,则引脚PORTAxn为输入,若DDRxn=1,则引脚PORTxn为输出。

复位时DDRx为$00。

(注:x代表A、B、E、K口中的某一个,n表示某一位)2)数据寄存器(Port x I/O Register,PORTx)PORTx的第7~0位分别记为PORTx7~PORTx0。

若A口的某一引脚PORTxn被定义。

成输出,程序使x口I/O寄存器PORTx的相应位PORTxn=0,则引脚PORTxn输出“低电平”;程序使PORTxn=1,则引脚PORTxn输出“高电平”。

若x口的某一引脚PORTxn被定义成输入,程序通过读取x口I/O寄存器PORTx,获得输入情况,0表示输入为“低电平”,1表示输入为“高电平”。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图 11 冻结模式 只有当相应的通道关闭后,才能改变 这些控制字。 用法: PWMCTL_CON67=1 --- 通道6、7 级联成一个 16 位的 PWM 通道。此 时只有7 通道的控制字起作用,原通道 7 的使能位、PWM 输出极性选择位、时 钟选择控制位以及对齐方式选择位用来设置级联后的 PWM 输出特性 PWMCTL_CON67=0 --- 通道6,7 通道不级联 CON45、CON23、CON01 的用法同 CON67 相似。设置此控制字的意 义在于扩大了PWM 对外输出脉冲的频率范围。 PSWAI=1 --- MCU 一旦处于等待状态,就会停止时钟的输入。这样就不 会因时钟在空操作而费电;当它置为0,则MCU 就是处于等待状态,也允许 时钟的输入。 PFRZ=1 --- MCU 一旦处于冻结状态,就会停止计数器工作。 S12 微控制器 PWM 模块是由独立运行的 8 位脉冲计数器 PWMCNT、两个比较寄存 器 PWMPER 和 PWMDTY 组成。 1、左对齐方式 在该方式下,脉冲计数器为循环递增计数,计数初值为 0 。 当 PWM 使能后,计数器 PWMCNT 从 0 开始对时钟信号递增计数,开始一个输 出周期。当计数值与占空比常数寄存器 PWMDTY 相等时,比较器 1 输出有效,将 触发器置位,而 PWMCNT 继续计数;当计数值与周期常数寄存器 PWMPER 相等时,
在该方式下,脉冲计数器为循环递增计数,计数初值为 0 。 当 PWM 使能后,计数器 PWMCNT 从 0 开始对时钟信号递增计数,开始一个输 出周期。当计数值与占空比常数寄存器 PWMDTY 相等时,比较器 1 输出有效,将 触发器置位,而 PWMCNT 继续计数;当计数值与周期常数寄存器 PWMPER 相等时, 比较器 2 输出有效,将触发器复位,同时 PWMCNT 也复位,结束一个输出周期。 原理参照图 14:
图 14 PWM 左对齐方式 2、中心对齐方式
在该方式下,脉冲计数器为双向计数,计数初值为 0 。 当 PWM 使能后,计数器 PWMCNT 从 0 开始对时钟信号递增计数,开始输出一 个周期。当计数器与占空比常数寄存器 PWMDTY 相等时,比较器 1 输出有效,触 发器翻转,而 PWMCNT 继续计数,当计数值与周期常数 PWMPER 相等时,比较器 2 输出有效,此时改变 PWMCNT 的计数方向,使其递解计数;当 PWMCNT 再次与 PWMDTY 相等时,比较器 1 再一次输出有效,使触发器再次翻转,而 PWMCNT 继续递减计 数,等待 PWMCNT 减回至 0,完成一个输出周期。原理参照图 15:
Clock SA 是通过对PWMSCLA 寄存器的设置来对 ClockA 进行分频而产生 的。其计算公式为:
Clock SA=Clock A /(2*PWMSCLA) PWMSCLB 寄 存 器 与 PWMSCLA 寄 存 器 相 似 , Clock SB 就 是 通 过 对 PWMSCLB 寄存器的设置来对ClockB 进行分频而产生的。其计算公式为: Clock SB=Clock B /(2*PWMSCLB) 1、PWM 极性选择寄存器 PWMPOL
手把手教你写 S12XS128 程序--PWM 模块介绍
该教程以 MC9S12XS128 单片机为核心进行讲解,全面阐释该 16 位单片 机资源。本文为第一讲,开始介绍该 MCU 的 PWM 模块。
PWM 调制波有8 个输出通道,每一个输出通道都可以独立的进行输出。 每一个输出通道都有一个精确的计数器(计算脉冲的个数),一个周期控制寄 存器和两个可供选择的时钟源。每一个PWM 输出通道都能调制出占空比从0— 100% 变化的波形。
PWM 的主要特点有: 1、它有8 个独立的输出通道,并且通过编程可控制其输出波形的周期。 2、每一个输出通道都有一个精确的计数器。 3、每一个通道的PWM 输出使能都可以由编程来控制。 4、PWM 输出波形的翻转控制可以通过编程来实现。 5、周期和脉宽可以被双缓冲。当通道关闭或 PWM 计数器为 0 时,改变 周期和脉宽才起作用。 6、8 字节或16 字节的通道协议。 7、有4 个时钟源可供选择(A、SA、B、SB),他们提供了一个宽范围的时 钟频率。 8、通过编程可以实现希望的时钟周期。 9、具有遇到紧急情况关闭程序的功能。 10、每一个通道都可以通过编程实现左对齐输出还是居中对齐输出。 1、PWM 启动寄存器 PWME PWME 寄存器每一位如图1 所示:
比较器 2 输出有效,将触发器复位,同时 PWMCNT 也复位,结束一个输出周期。 原理参照图 14:
图 14 PWM 左对齐方式 2、中心对齐方式
在该方式下,脉冲计数器为双向计数,计数初值为 0 。 当 PWM 使能后,计数器 PWMCNT 从 0 开始对时钟信号递增计数,开始输出一 个周期。当计数器与占空比常数寄存器 PWMDTY 相等时,比较器 1 输出有效,触 发器翻转,而 PWMCNT 继续计数,当计数值与周期常数 PWMPER 相等时,比较器 2 输出有效,此时改变 PWMCNT 的计数方向,使其递解计数;当 PWMCNT 再次与 PWMDTY 相等时,比较器 1 再一次输出有效,使触发器再次翻转,而 PWMCNT 继续递减计 数,等待 PWMCNT 减回至 0,完成一个输出周期。原理参照图 15:
PCLK2 = 0 --- 通道 2(PTP2)的时钟源设为 ClockB 1、PWM 预分频寄存器 PWMPRCLK
PWMPRCLK 寄存器每一位如图 3 所示:
复位默认值:0000 0000B
图3 PWMPRCLK 寄存器 PWMPRCLK 寄存器包括 ClockA 预分频和 ClockB 预分频的控制位。ClockA、 ClockB 的值为总线时钟的 1/2n (0≤n≤7),具体设置参照图 4 和图 5
PWMPOL 寄存器每一位如图 7 所示:
该寄存器是 0~7 通道 PWM 输出起始极性控制位,用来设置 PWM 输出 的起始电平。
用法:PWMPOL_PPOL0=1--- 通道 0 在周期开始时输出为高电平,当 计数器等于占空比寄存器的值时,输出为低电平。对外输出波形先是高电平 然后再变为低电平。
注意:在通道使能后所输出的第一个波形可能是不规则的。当输出通道 工作在串联模式时(PWMCTL 寄存器中的 CONxx 置 1),那么使)能相应 的 16 位 PWM 输 出 通 道 是 由 PWMEx 的 高 位 控 制 的,例如 :设置 PWMCTL_CON01 = 1,通道 0、1 级联,形成一个16 位 PWM 通道,由通道 1 的使 能位控制 PWM 的输出。 2、PWM 时钟选择寄存器 PWMCLK
复位默认值:0000 0000B
图1 PWME 寄存器 每一个 PWM 的输出通道都有一个使能位PWMEx 。它相当于一个开 关,用来启动和关闭相应通道的 PWM 波形输出。当任意的PWMEx 位 置1,则相关的PWM 输出通道就立刻可用。 用法: PWME7=1 --- 通道 7 可对外输出波形
PWME7=0 --- 通道 7 不能对外输出波形
图 15
中心对齐方式
3、周期计算方法
左对齐方式:
输出周期 = 通道周期 × PWM= 通道周期 × PWMPERx × 2
4、脉宽计算方法
左对齐方式:
占空比 = [ (PWMPERx - PWMDTYx) / PWMPERx ] × 100%
中心对齐方式:
占空比 = [ PWMDTYx / PWMPERx ] × 100%
注意:只有输出通道被关闭后才能对其进行设置,即通道被激活后不能对其进行 设置。
1、PWM 控制寄存器 PWMCTL PWMCTL 寄存器每一位如图9 所示:
图9 PWMCTL 寄存器
该控制寄存器设定通道的级联和两种工作模式:等待模式和冻结模式。这 两种模式如图 10 和图 11 所示。
图 10 等待模式
PWMCLK 寄存器每一位如图 3 所示: 复位默认值:0000 0000B
图 2 PWMCLK 寄存器 S12 的 PWM 共有四个时钟源,每一个PWM 输出通道都有两个时钟可供选 择(ClockA、ClockSA 或 Clock B、ClockSB))。其中 0、1、4、5 通道可选用 ClockA 和 ClockSA,2、3、6、7 通道可选用 ClockB、ClockSB 通道。该寄存 器用来实现几个通道时钟源的选择。 用法: PCLK0 = 1 --- 通道 0(PTP0)的时钟源设为 ClockSA
2、PWM 通道周期寄存器 PWMPERx PWMPERx 寄存器共有8 个,每一个通道都有一个这样的周期寄存器。这 个 寄存器的值就决定了相关PWM 通道的周期。每一个通道的周期寄存器都 是双缓 冲的,因此如果当通道使能后,改变他们的值,将不会发生任何作用, 除非当下列情况之一发生: *有效的周期结束。 *对计数器进行写操作(计数器复位) *通道不可用(PWMEx = 0) 这样就会使PWM 输出波形要么是新波形要么是旧波形,并不会在两者之 间 进行交替变换。如果通道不可用,那么对周期寄存器进行写操作,将会直接 导致 周期寄存器同缓冲器一起闭锁。图13 所示的是PWMPER0 寄存器:
*有效的周期结束。 *对计数器进行写操作(计数器复位) *通道不可用(PWMEx = 0) 这样就会使PWM 输出波形要么是新波形要么是旧波形,并不会在两者之 间 进行交替变换。如果通道没有被激活,那么对占空比常数寄存器进行写操 作,将会直接导致周期寄存器同缓冲器一起闭锁。
当计数值与占空比常数 PWMDTY 相等时,则比较输出器有效,这时就会将触发 器置位,然后PWMCNT 继续计数,当计数值与周期常数PWMPER 相等时,比较 器输出有效,将触发器复位,同时也使PWMCNT 复位,结束一个输出周期。 S12 微控制器 PWM 模块是由独立运行的 8 位脉冲计数器 PWMCNT、两个比较寄存 器 PWMPER 和 PWMDTY 组成。 1、左对齐方式
相关文档
最新文档