1 / 96

第六讲 MC9S12 单片机 I/O 接口和功能模块

第六讲 MC9S12 单片机 I/O 接口和功能模块. 本讲内容简介. 1 、通用 I/O 接口模块 2 、模数转换 A/D 模块 3 、脉冲宽度调制 PWM 模块 4 、增强型定时器 ECT 模块 5 、同步外设接口 SPI 模块 6 、串行通信接口 SCI 模块. 每个模块对应的技术文档. I/O 口模块 S12MEBIV3.PDF S12DTB128PIMV2.PDF 串行通信模块 S12SCIV2.PDF S12SPIV4.PDF S12IICV2.PDF ECT 模块 S12ECT16B8CV1.PDF A/D 模块

ashton
Download Presentation

第六讲 MC9S12 单片机 I/O 接口和功能模块

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第六讲 MC9S12单片机I/O接口和功能模块

  2. 本讲内容简介 • 1、通用I/O接口模块 • 2、模数转换A/D模块 • 3、脉冲宽度调制PWM模块 • 4、增强型定时器ECT模块 • 5、同步外设接口SPI模块 • 6、串行通信接口SCI模块

  3. 每个模块对应的技术文档 • I/O口模块 S12MEBIV3.PDF S12DTB128PIMV2.PDF • 串行通信模块 S12SCIV2.PDF S12SPIV4.PDF S12IICV2.PDF • ECT 模块 S12ECT16B8CV1.PDF • A/D模块 S12ATD10B8CV2.PDF • PWM模块 S12PWM8B8CV1.PDF • MSCAN模块 S12MSCANV2.PDF

  4. 1、通用I/O接口 • MC9S12DG128B单片机I/O口 • PORTA 连接按键 • PORTB 连接发光二极管 • PORTE 特殊功能 • PORTJ 中断输入,没有PJ0-PJ5 • PORTP 中断输入,没有PP6 • PORTM 没有PM6-PM7 • PORTT • PORTS 没有PS4-PS7 • PORTAD 只能输入

  5. 1、通用I/O接口 • I/O口作为输入使用 • 设置方向寄存器(DDRx)为输入(0X00) • 随时读取I/O口的数据寄存器(PORTx) • I/O口作为输出使用 • 设置方向寄存器(DDRx)为输出(0XFF) • 设置驱动能力寄存器(非必须) • 拉电阻选择(非必须) • 随时写入I/O口数据寄存器(PORTx)

  6. 1、通用I/O接口 • I/O口作为外部中断接收使用 • 开系统中断(CLI) • 设置方向寄存器为输入 • 设置中断有效边沿(上升沿、下降沿) • 使能中断 • 编写相关的中断服务程序 • 有效边沿到来时,会自动进入中断服务程序

  7. 1、通用I/O接口 • 例一 • 设计一个C语言程序,使教学板上发光二极管 • 显示花等效果 • 显示循环流水灯效果 • 见exp12

  8. 1、通用I/O接口 • 例二 • 使用PORTJ中断口功能的例子,本例的原理是:设置A口为输出口,PTA的第6脚跟PTJ的第6脚硬件相连,PTB输出,用来控制8个LED灯,PTJ开中断,并且设置为上升沿触发。首先PTA初始化为0,PTB为0xFF,此时等灭。在大循环冲设置PTA第6位为高电平,产生中断,灯低4个亮,高4个不亮。使用单步运行查看效果。 • 见exp13。

  9. 2、模数转换ATD模块 • A/D转换的基本概念 • 模数转换定义: 将时间连续、幅值也连续的模拟信号转换为间离散、幅值也离散的数字信号 • 模数转换精度 模数转换精度是指二进制的位数。9S12的AD模块有两种精度可选,分别为8位精度(0—255)和10位精度(0—1023)。 • 逐次逼近型A/D转换器的原理 逐次逼近型A/D 由一个比较器和D/A 转换器通过逐次比较逻辑构成,从MSB 开始,顺序地对每一位将输入电压与内置D/A 转换器输出进行比较,经n 次比较而输出数字值。其电路规模属于中等。

  10. 9S12的A/D模块主要特性 • 8位/10位可选择的转换精度; • 速度快,每进行一次10位的转换,仅仅需要7nS; • 采样时间可编程; • 左对齐/右对齐的数据格式,有符号/无符号的转换结果; • 转换完毕可产生中断; • 使用PAD7外部触发控制。

  11. 9S12的A/D模块外部引脚 • VRH(60)、VRL(61):A/D 转换模块的参考高电压和参考低电压。实验板上,VRH和VRL分别接VCC和GND。 • VDDA(59)、VSSA(62):A/D 模块提供电源。实验板上,VDDA接到VCC,VSSA接到GND。 • AN7/ETRIG/PAD7(58):模拟量输入通道7,通用数字输入端口。它也可以被配置为A/D 转换的外部触发引脚。 • AN6/PAD6 - AN0/PAD0(51-57):模拟量输入通道6-0,通用数字输入端口。不可以被用作外部触发引脚。PAD0通过50K滑动变阻器接到VCC,调可变电阻可以调试A/D转换。

  12. 控制寄存器2—ATDCTL2 • ADPU:A/D模块的电源管理。1=正常模式,0=低功耗模式。 • AFFC:标志位快速清零。1=对转换结果寄存器访问会自动清除标志位,0=正常模式,访问结果寄存器前读状态寄存器1可以清楚转换完成标志CCF。 • AWAI:等待时进入低功耗模式。1=进入,0=正常工作。 • ETRIGLE、ETRIGP:外部触发的边沿/极性控制。 • ETRIGE:上两位的使能位。允许在PAD7输入外部触发信号。1=允许,0=禁止。 • ASCIE:A/D队列转换完成中断允许。1=允许,并使标志位ASCIF=1;0=禁止。 • ASCIF:A/D 队列转换完成中断标志。

  13. 控制寄存器3—ATDCTL3 • S8C、S4C、S2C、S1C:定义转换队列的长度。默认长度为4。 • FIFO:结果寄存器先进先出模式。1=FIFO模式,转换结果是连续存放的;0=非FIFO模式,转换结果放在对应的寄存器中。 • FRZ1、FRZ0:背景调试冻结模式允许。这两个控制位就决定了,当遇到断点时,A/D 模块怎样反应。

  14. 控制寄存器4—ATDCTL4 • SRES8:转换精度选择。1=8位精度,0=10位精度。 • SMP1、SMP0:采样时间选择。可选择2、4、8、16个A/D时钟周期。 • PRS4、PRS3、PRS2、PRS1、PRS0:A/D 时钟分频因子的选择。 • A/D时钟的计算公式如右图。 • 注意,A/D模块的时钟频率要在500KHz和2MHz之间,所以在选择分频因子时一定要注意。

  15. 控制寄存器5—ATDCTL5 • DJM:16位结果寄存器数据的对齐方式。1=右对齐,0=左对齐。 • DSGN:结果寄存器中数据有无符号。1=有符号,0=无符号。 • SRES8、DJM 和DSGN 三位配合起来使用,决定了结果寄存器中数据的格式,一共有8种情况。 • SCAN:连续转换队列的模式。此位定义了A/D 转换是连续进行还是只进行一次。1=连续队列转换;0=单次队列转换。 • MULT:当这位为0 时,ATD 的队列控制器只从指定的输入通道进行采样,可以使用ATDCTL5寄存器中的CC、CB 和CA 三位来指定需要采样的模拟量输入通道。当这位为1 时,则对多个的通道进行采样,每次采样的通道数量由S8C、S4C、S2C 和S1C 控制位来指定,第一个采样通道由CC、CB 和CA 控制位来指定,其它采样通道由通道选择码CC、CB 和CA 的增加来决定。 • CC、CB、CA:模拟输入通道选择码。和MULT配合使用。

  16. 状态寄存器0—ATDSTAT0 • SCF:队列完成标志。置位条件:当一个队列转换完毕后;如果处在SCAN模式,则每次都置位。清零条件:对此位写一;写ATDCTL5,开始一个新的对列;AFFC=1(标志快速清除)且读结果寄存器。 • ETORF:外部触发溢出标志。置位条件:处于边沿触发模式时,如果第一个边沿触发的队列转换正在进行,而这时却检测到了第二个有效的边沿。清零条件:对此位写一;写控制寄存器2、3或4,终止当前队列;写控制寄存器5,开始一个新队列。 • FIFOR:FIFO 溢出标志。如果转换完成标志(CCF)在没有被清零时结果寄存器被写入新值(覆盖),则置位。清零条件:对此位写一;写控制寄存器5,开始一个新队列。1=有FIFO溢出,0=无FIFO溢出。 • CC2、CC1、CC0:转换计数器。代表了哪个结果寄存器将要接收当前转换的结果。非FIFO 模式(FIFO=0),这3 位的初始值为0,计数完成后又会回到初始值。FIFO 模式(FIFO=1),转换计数器处于循环计数状态。

  17. 状态寄存器1—ATDSTAT1 • CCFx: x通道的转换完成标志。1=完成队列中的第x 个转换,结果存储在ATDDRx 寄存器中;0=转换未完成。 • 清零条件:写控制寄存器5,开始一个新队列;AFFC=1,对结果寄存器访问;AFFC=0,首先读状态寄存器1,然后访问结果寄存器。

  18. 输入允许寄存器--ATDDIEN • IENx:通道x 输入数字允许。这8个控制位控制了从模拟量输入端口到数据寄存器的数字输入缓冲区。1=缓冲区有效;0=无效。 当端口作为模拟量输入端口时,也可以打开数字缓冲区,但是会增加功耗。

  19. 数字输入寄存器PORTAD • PTADx:A/D 模块的第x 个通道(ANx)的数字输入。当对应通道的数字输入允许时,此位返回了相应引脚上的电平逻辑值。 • 注意,引脚上的电平必须和VRH或VRL匹配,否则将返回一个不确定的值。 • 如果响应通道的输入缓冲区无效(IENx=0),读取操作只返回1。 • 复位后,寄存器值等于$FF。 • 注意,PORTAD端口模拟量和数字量是可以复用的。当输入模拟量时,会把模拟信号直接送到A/D 转换器;当输入数字量时,会把外部数字信号送到PORTAD 寄存器以供读取。

  20. A/D转换结果寄存器—ATDDRx • ATDDR0—ATDDR7:0—7通道的结果寄存器。A/D转换的结果需要从这几个寄存器中读取。每个16位寄存器可以分成2个8位的寄存器来读取,分别为ATDDRxH和ATDDRxL。 • 注意转换结果在这8个16位寄存器中的存储格式。以10位左、右对齐为例: • 左对齐10位数据 • 右对齐10位数据 • 另外还要注意有符号数据和无符号数据的区别。

  21. A/D转换综合举例 • 使用教学板上电位器调试并观察A/D转换结果。 • 请见exp14。

  22. 3、脉冲宽度调制PWM模块 • PWM的基本概念 • PWM(Pulse Width Modulate)即脉宽调制,脉宽调制波是一种可用程序来控制波形占空比、周期、相位的波形。它在电动机驱动、D/A 变换等场合有着广泛的应用。 • 周期,占空比,相位。 周期指上图中的τ,占空比为t/ τ,相位指高低电平。

  23. 9S12 PWM模块特性 • 7个周期、占空比可编程的PWM通道 • 专用的PWM计数器 • PWM功能的软件使能和禁止 • 软件选择脉冲极性 • PWM波形输出对齐方式分为左对齐和居中对齐 • 可以两个通道级联以获得更高的精度 • 可选择4个时钟源,4个时钟源均为独立的分频设置 • 紧急关断功能

  24. 9S12 PWM模块外部引脚 • 共7个外部引脚 • PWM0—5(4、3、2、1、80、79) • PWM7(78)

  25. 9S12 PWM模块的时钟 • 四个时钟源CLOCKA、CLOCKB、CLOCKSA、CLOCKSB。 • 其中CLOCKA(B)可以把总线时钟进行1、2、4、8、16、32、64、128分频。Clock A 的预分频因子通过PWMPRCLK寄存器中的PCKA2、PCKA1 和PCKA0 来选择,Clock B 的预分频因子通过PWMPRCLK 寄存器中的PCKB2、PCKB1 和PCKB0 来选择。 总线时钟 分频 CLOCKA 分频 CLOCKSA 分频 分频 CLOCKSB CLOCKB

  26. 9S12 PWM模块的时钟 • ,CLOCKSA(SB)从CLOCKA(B)进行分频的比例因子可以为1、2、4、8、16、32、64、128、256,最大可以进行512分频。计算公式为: • CLOCKSA(SB)=CLOCKA(B)/2*PRESCALER • 通道0、1、4、5可选CLOCKA或CLOCKSA; • 通道2、3、6、7可选CLOCKB或CLOCKSB。

  27. 9S12 PWM模块的计数器 • 每个通道的计时器都有一个8 位计数器、一个8位周期寄存器和一个8 位占空比寄存器。输出波形的周期受周期寄存器的控制,当计数器的计数值等于周期寄存器的值时,PWM波周期结束。PWM的波形还跟占空比寄存器、输出极性和对齐方式有关。 • PWMCNTx 计数寄存器在PWM 通道工作时也可以被写入,但是暂时产生无效的波形。

  28. 9S12 PWM模块的允许控制 • PWM的允许位相当于“开关”,可以允许和禁止相应通道的PWM输出。 • 每个PWM 通道都对应一个允许(PWMEx),只有PWMEx=1 时,对应的通道才输出波形。 • 计数器计数结束的那一刻,只要PWMEx 为高电平,则会自动开始下一个波形的输出。

  29. 9S12 PWM模块的极性控制 • 每个PWM 通道都对应一个极性设置位,决定了PWM 波的输出首先是高电平还是低电平。 • 当PPOLx 被置位时,对应的通道首先输出高电平,直到计数器计数到占空比寄存器的值后变为低电平;反之则首先输出低电平,直到计数器计数到占空比寄存器的值后变为高电平。

  30. 左对齐的输出波型 • PWMCAE 寄存器中的CAEx 位是输出格式的控制位。CAEx=0,则对应通道的输出格式是左对齐的。 • 当使用左对齐格式输出时,8 位的计数器只使用加法计数。当计数器加法计数到占空比寄存器中的值时,PWM 通道输出波形的电平就发生变化;当计数器加法计数到周期寄存器中的值时,计数器复位,输出波形电平发生变化,然后再次读取占空比和周期寄存器中的值作为下次计数参考使用。 • 注意,计数器是从0开始计数的,直到周期寄存器中的值-1。

  31. 左对齐的输出波型 PWM波形频率和占空比的计算: PWMx 频率= Clock(A, B, SA, or SB) / PWMPERx 若Polarity = 0 (PPOLx=0) Duty Cycle = [(PWMPERx-PWMDTYx)/PWMPERx] × 100% 若Polarity = 1 (PPOLx=1) Duty Cycle = [PWMDTYx / PWMPERx] × 100%

  32. 左对齐的输出波型 下面举一个左对齐输出的例子: 假设时钟源频率=10MHz(周期=100ns),PPOLx=0,PWMPERx=4,PWMDTYx=1。 所以,PWMx 的频率 = 10MHz/4 = 2.5MHz,PWMx 的周期=400ns,PWMx 的占空比=3/4×100% = 75%。

  33. 居中对齐的输出波型 • CAEx=1,则对应通道的输出格式是居中对齐的。 • 在这个模式下,计数器既进行加法计数也进行减法计数。当计数器加法计数到占空比寄存器中的值时,PWM 通道输出波形的电平就发生变化;当加法计数到周期寄存器中的值时,计数器会从加法计数改变为减法计数;当计数器再次减法计数到占空比寄存器中的值时,PWM 通道输出波形的电平再次发生变化;当计数器继续减法计数到$00 时,计数器重新变为加法计数器,然后再次读取占空比和周期寄存器中的值作为下次计数参考使用。

  34. 居中对齐的输出波型 用时钟源的频率除以周期寄存器中值的2 倍,得到的结果就是当前PWM输出波形的频率。 PWMx Frequency = Clock(A, B, SA, or SB) / (2×PWMPERx) 若Polarity = 0 (PPOLx=0) Duty Cycle = [(PWMPERx-PWMDTYx)/PWMPERx] × 100% 若Polarity = 1 (PPOLx=1) Duty Cycle = [PWMDTYx / PWMPERx] × 100%

  35. 居中对齐的输出波型 下面举一个居中对齐输出的例子: 假设时钟源频率=10MHz(周期=10ns),PPOLx=0,PWMPERx=4,PWMDTYx=1。 所以,PWMx 的频率 = 10MHz/4 = 2.5MHz,PWMx 的周期=400ns,PWMx 的占空比=3/4×100% = 75%。

  36. 9S12 PWM模块的通道级联 • 如果需要PWM 输出波形的精度更高,则可以把2 个8 位PWM 通道级联起来组成1 个16 位通道。 PWMCTL 寄存器中有4 个控制位,可以完成这个级联的功能。CON67、CON45、CON23 和CON01 可以把相应的两个通道级联起来。 • 注意级联后高8位和低8位的区别,控制寄存器的区别。

  37. 允许控制寄存器--PWME 当PWMEx 被置位后,PWM 输出就会立即开始。但是直到PWM 模块时钟的下一个周期到来之时,才可以输出正确的波形,而在这之前的波形可能会是无效的。 当处于级联模式时,8 个8 位PWM 通道组成4 个16 位的PWM 通道,PWME1、PWME3、PWME5 和PWME7 对这4 个通道进行控制,而其它控制位处于无效状态。 PWMEx:通道有效选择位。1=允许PWM输出,0=禁止。

  38. 极性寄存器--PWMPOL PWMPOL 寄存器随时都可以进行设置。如果某PWM 通道在输出波形的过程中,波形的极性发生了改变,那么在两组波形的连接处可能会出现缩短或者拉伸了的不正常波形。 PPOLx:通道x的输出极性。1=先高后低,0=先低后高。

  39. 时钟选择寄存器--PWMCLK PCLK7:PWM 通道7 时钟源选择。1=Clock SB ;0=Clock B。 PCLK6:PWM 通道6 时钟源选择。1=Clock SB ;0=Clock B。 PCLK5:PWM 通道5 时钟源选择。1=Clock SA ;0=Clock A。 PCLK4:PWM 通道4 时钟源选择。1=Clock SA ;0=Clock A。 PCLK3:PWM 通道3 时钟源选择。1=Clock SB ;0=Clock B。 PCLK2:PWM 通道2 时钟源选择。1=Clock SB ;0=Clock B。 PCLK1:PWM 通道1 时钟源选择。1=Clock SA ;0=Clock A。 PCLK0:PWM 通道0 时钟源选择。1=Clock SA ;0=Clock A。

  40. 预分频时钟选择寄存器 此寄存器用来选择Clock A 和B 的预分频因子。 PWMPRCLK 寄存器随时都可以进行设置。如果某PWM 通道在输出波形的过程中,此通道的所使用时钟的频率发生了改变,那么在两组波形的连接处可能会出现缩短或者拉伸了的不正常波形。 PCKB2、PCKB1、PCKB0:Clock B 预分频因子的选择 PCKA2、PCKA1、PCKA0:Clock A 预分频因子的选择

  41. 居中对齐允许寄存器--PWMCAE 此寄存器控制每个PWM 通道输出波形的对齐方式,可以是左对齐或者居中对齐。如果CAEx=1,则对应通道的输出波形为居中对齐方式;如果CAEx=0,则为左对齐方式。注意只有当对应通道被禁止输出时,才可以设置此寄存器。 CAEx: 1=对应x通道为居中对齐模式 0=对应x通道为左对齐模式

  42. 控制寄存器--PWMCTL 此寄存器可以实现把8 个8 位PWM 通道级联为4 个16 位PWM 通道。 CONxy:x通道和y通道级联,以获得更高的输出精度。 x通道作为高8位,y通道作为低8位。这时只有通道y的时钟选择位、极性控制位、输出允许位和对齐方式选择位才有效;通道x 的相应寄存器均无效。 1=级联模式 0=非级联模式 PFRZ:冻结模式PWM 计数器停止。1=停止,0=继续运行。

  43. 比例因子寄存器A--PWMSCLA 此寄存器用来提供产生时钟Clock SA 的比例因子,Clock SA 是由Clock A 经过一系列运算得来的,公式: Clock SA = Clock A / (2×PWMSCLA) 当PWMSCLA=0 时,默认比例因子为256,此时Clock SA 的频率等于Clock A 的频率除以512。

  44. 比例因子寄存器B--PWMSCLB 此寄存器用来提供产生时钟Clock SB 的比例因子,Clock SB 是由Clock B 经过一系列运算得来的,公式如下: Clock SB = Clock B / (2×PWMSCLB) 当PWMSCLB=0 时,默认比例因子为256,此时Clock SB 的频率等于Clock B 的频率除以512。

  45. x通道计数寄存器--PWMCNTx 每个PWM 通道都有一个独立的加法/减法计数器,计数器的频率跟时钟源的频率有关。可以在任意时刻来读取计数器里的值,而计数器的工作不会受到影响。 ★注意我们刚才讲过的左/居中对齐方式时,计数器的计数方式。 对计数寄存器进行写操作将使它复位,计数器会立即开始加法计数,从周期寄存器和占空比寄存器的缓冲区里得到周期和占空比值,然后根据设置的极性来输出。当相应的PWM通道被禁止输出(PWMEx=0)时,计数器不工作;当PWM 通道允许时,计数器会以计数寄存器中的值为起点开始计数。

  46. 周期寄存器--PWMPERx 每个PWM 通道都有一个独立的周期寄存器,周期寄存器中的值对应PWM 通道输出波形的周期。 此寄存器具有双重缓存功能,新输入的值被送到缓冲区,而不是立即生效,到下一个有效周期开始时才会有效,所以PWM 输出波形的周期在改变时不会产生无效波形。

  47. 占空比寄存器--PWMDTYx 每个PWM 通道都有一个独立的占空比寄存器,周期寄存器中的值对应PWM 通道输出波形的周期。 此寄存器同样是双重缓存的。 注意:读取寄存器会得到最新一次写入的值,而不会返回当前的周期值。

  48. 关断寄存器--PWMSDN PWM7ENA:PWM 紧急关断允许 当此位为1 时,通道7 会被强制配置为输入端口,并且允许紧急关断。只有当此位为1时,寄存器中的其它位才有意义。 PWM7INL: 紧急关断通道7的有效电平。1=高电平,0=低电平。 PWM7IN: PWM 通道7 的输入电平状态。 PWMLVL: PWM 紧急关断后的输出电平。1=高,0=低。 PWMRSTRT: PWM 重新启动。只有在当PWM 通道7 处于无效状态(非紧急关闭)时,才可以重新启动PWM 模块。把PWMRSTRT 置一,当计数器返回0 时,PWM 通道才开始运行。 PWMIE: PWM 中断允许。1=允许,0=禁止。 PWMIF: PWM 中断标志。当PWM7ENA 被置位时,PWM 通道7 上电平的任意变化将产生中断并使PWMIF 置位。 1=PWM7IN输入有变化。0=PWM7IN 输入无变化。

  49. PWM 的综合举例 • 利用PWM5 通道来做DA 转换输出变化的电压控制小灯的亮度。 void PWMInit(void) { PWMPOL=0x20; //脉冲先高后低 PWMCLK=0x20; //使用sa 时钟源 PWMPRCLK=0x07; //时钟a 为总线8 分频 PWMCAE=0x00; //通道5 为左对齐输出模式 PWMCTL=0x00; //单独使用通道5,非级联 PWMSCLA=0x05; //Clock SA=Clock A/(2*PWMSCLA),SA 为3kHz PWMPER5=0x64; //设定周期 }

  50. PWM 的综合举例 void main(void) { unsigned char i; unsigned long j=10000; SET_PLL(); //设置锁相环 EnableInterrupts; PWMInit(); //初始化PWM for(i=0;i<0x64;i++) { while(j--); j=10000; while(j--); j=10000; PWMDTY5=i; //设定占空比 PWME=0x20; //使能PWM } }

More Related