1 / 29

第六章 MC9S12 单片机 串行通信模块

第六章 MC9S12 单片机 串行通信模块. 山东大学控制科学与工程学院 2008.8. 串行通信是指 MCU 与外设之间使用一根数据信号线一位一位的传输数据。 通信线少,可以在远距离通信时极大的降低成本,适合于远距离传输。. 5 、同步外设接口 SPI 模块. 常见串行通信: 异步串行通信 SCI (通用异步收发 UART ) 同步串行外设接口 SPI IIC ( Inter-Integrated Circuit )总线 控制局域网 CAN 总线 USB ( FLASH 存储器,在线视频) PS/2 (键盘、鼠标)

raheem
Download Presentation

第六章 MC9S12 单片机 串行通信模块

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单片机串行通信模块 山东大学控制科学与工程学院 2008.8

  2. 串行通信是指MCU与外设之间使用一根数据信号线一位一位的传输数据。串行通信是指MCU与外设之间使用一根数据信号线一位一位的传输数据。 • 通信线少,可以在远距离通信时极大的降低成本,适合于远距离传输。

  3. 5、同步外设接口SPI模块 • 常见串行通信: • 异步串行通信SCI(通用异步收发UART) • 同步串行外设接口SPI • IIC(Inter-Integrated Circuit)总线 • 控制局域网CAN总线 • USB(FLASH存储器,在线视频) • PS/2(键盘、鼠标) • MC9S12单片机片内集成了SPI、SCI、IIC

  4. 串行通信的数据传输方式

  5. 9S12系列单片机SPI的定义 • SPI(Serial Peripheral Interface,串行外设接口)是一种高速高效的同步串行接口技术,这种接口技术主要用于MCU 与外部的接口芯片交换数据,已逐渐成为一种工业接口标准。 • 一个主机+多个从机 • ADI的AD转换芯片、电源管理芯片等支持SPI

  6. SPI引脚定义 • SPI引脚(4根线): • SCK 同步时钟,由主机产生并传送给从机 • MOSI(Master Output/Slave Input) • 主机发送,从机接收 • MISO (Master Input /Slave Output) • 主机接收,从机发送 • SS 从机选择线 • 主从机选择信号是低电平有效。1-主机,0=从机。系统中只能有一个主机。

  7. MC9S12DG128有两个SPI 接口,分别占用PP 口(0-3 位)和PM 口(2-5 位),引脚号分别为1-4和70-73。 • 注意: • 主机的MOSI、MISO分别和从机的MOSI,MISO连接。

  8. SPI工作模式 • 主机模式: • 当SPICR1中的MSTR位置1时,工作在主机模式。 • 主机产生时钟信号,用来同步主从双方的移位寄存器。当向SPI数据寄存器中写入数据后,数据开始传送。 • 从机模式: • 当SPICR1中的MSTR清0时,工作在从机模式。 • 从机不产生时钟,从机SCK引脚变为输入口,接收主机时钟 • SS必须有效。 • 双工模式(三线同步传输): • 无论是主机模式还是从机模式都只用一个引脚传输数据。

  9. SPI模块的寄存器 • SPI控制寄存器1 SPICR1 • SPI控制寄存器2 SPICR2 • SPI状态寄存器 SPISR • SPI波特率寄存器 SPIBR • SPI数据寄存器 SPIDR

  10. SPI控制寄存器一 SPIE—SPI中断使能位。1=中断允许,0=中断禁止。 SPE—SPI系统使能位。1=使用SPI,0=不使用SPI。 SPTIE—发送中断使能。1=允许,0=禁止。 MSTR—主从模式选择位。1=主机,0=从机。 CPOL—时钟极性位。1=有效时钟为低,空闲为高,0=有效时钟为高,空闲为低。主从机必须匹配。

  11. SPI控制寄存器1—SPICR1 SS非下降沿启动 CPHA—SPI时钟相位控制。1=主机在SPSCK的第一个跳变开始驱动MOSI,从机应用它来启动数据发送。在连结几次SPI传送期间,从机的SS脚可保持为低电平;0=SS下跳用于启动从机数据发送,而第一个SPSCK跳变捕捉最高位。在一次SPI传送完毕,从机的SS脚必须返回高电平。 SSOE—从机选择输出使能。跟MODF配合使用。 时钟信号启动 LSBFE—最低位先发使能。1=先发最低位,0=先发最高位。

  12. SPI控制寄存器二 MODFEN—模式错误使能位。主机模式MODFEN=0,则SS不作用于SPI。如8页表。从机模式下,无论MODFEN为何值,SS只作为输入。1-SS引脚使用,0-SS引脚不作用于SPI。 BIDIROE--在双工模式下(SPC0=1)输出使能。1-输出缓冲使能,0-输出缓冲禁止。 SPISWAI--SPI 在等待模式下停止位。1-等待模式停止,0-等待模式正常工作。 SPC0--串行引脚控制位0。控制正常和双工模式。

  13. SPI 波特率寄存器 波特率--每秒钟数据传输的二进制位数bps。 SPPR2-SPPR0--SPI 波特率预分频位 SPR2-SPR0--SPI 波特率选择位 组合使用

  14. SPI 状态寄存器 SPISR寄存器指示SPI的状态,并且只读。 SPIF--SPIF 中断标志。1-中断发生,有数据存储到SPI数据寄存器-SPIDR;0-传输未完成。注意对此位清零的方法:当SPIF=1时,首先读SPISR的值,然后访问数据寄存器SPIDR。 SPTEF--SPI 发送空中断标志。1-SPI数据寄存器空(数据已发送);0-SPI数据寄存器非空。注意对此位清零的方法:当SPTEF=1时,首先读SPISR的值,然后写数据寄存器SPIDR。 MODF--模式错误标志。1-发生错误,0-无错误。当SPI 配置成主机模式并且模式错误检测使能(SPICR2 的MODFEN 位置位)时,如果SS 输入变低,该位置位。注意对此位清零的方法:当MODF=1时,首先读SPISR的值,然后写SPI控制寄存器1。

  15. SPI 数据寄存器 SPI 数据寄存器是SPI 数据的输入和输出寄存器。写该寄存器会允许一个字节进入队列并发送。如果SPI 被配置成主机,当前面的数据发送完成,排在队列的数据会立即被发送。SPISR 寄存器中的发送空标志SPTEF 表明SPI 数据寄存器准备接收新的数据。当SPIF=1 时SPIDR 中接收的数据是有效的,这时才可以读到有效数据。 注意,SPIEF=0时表示当前数据并未发送完成,不可写SPIDR寄存器,当SPIEF=1时,才可以写SPIDR寄存器以发送新数据。

  16. SPI综合举例 单片机MC9S12DG128 的SPI1 接口和74HC164 连接,74HC164 是串入并出的8 位移位寄存器,用其来扩展并行输出口,74HC164 的输出作为数码管显示电路的段码,采用动态扫描显示。PT5 做74HC164 的片选信号。微控制器工作于主模式,向SPIDR 写入数据启动SPI 发送模块后,MCU 发送的数据进入74HC164 的移位寄存器中。请见第6章 SPI.doc。 SPI1的MOSI,时钟,片选,接到74HC164 74HC164,串入并出。 74HC244八同相三态线驱动器 接8段LED的驱动电路,低电平使某段发光。

  17. SCI(串行通信接口)总线接口 MC9S12DG128单片机有两个SCI 模块。SCI 模块仅仅复用了PS 口的4 个I/O 引脚(0-3 位)作为RXD0、TXD0、RXD1、TXD1。当SCI 接收器/发送器被允许时,SCI 将控制TxD 和RxD 进入相应的操作,否则它们只能用作普通的I/O 口。注意SCI是异步串行通信口。 SCI的发送器与接收器都是双缓冲的。各自有工作使能和中断控制。可工作于全双工模式。 SCI的主要特性: 1、异步 2、全双工 3、不归零格式(NRZ) 4、13个波特率控制位,选择更广 5、收、发双缓冲 6、具有8个中断标志位的中断驱动操作 SCI的其他特性可以在寄存器的讲解时体会。

  18. SCI的寄存器波特率寄存器SCIBDH和SCIBDL 波特率计算公式: BR=两寄存器组合值,1-8191 注意此寄存器的赋值方法:如果只对SCIBDH赋值是无效的,必须先对SCIBDH赋值,再对SCIBDL赋值才可以产生有效的BR。如果不使用SCIBDH,则可以直接给SCIBDL赋值,因为SCIBDH复位后默认为0,相当于赋0值。 下面举个设置波特率为9600的例子。

  19. 波特率寄存器SCIBDH和SCIBDL 设置波特率实质上是计算公式中BR的值,再把BR的值赋给波特率寄存器。BR的值计算是有技巧的,可以用一个公式完成。 BR值 = ((PLL频率/ 2) / 目标波特率 / 16 ) 注意PLL频率/2即总线频率。使用PLL,总线频率=PLL频率/2,不使用,则总线频率=晶振频率/2。 所以,如果需要设置SCI0波特率为9600,并假设PLL时钟频率=40M的话,赋值程序为: SCI0BDL = (unsigned char)((40000000UL / 2) / 9600 / 16 ); SCI0BDH不使用。

  20. SCI控制寄存器1-SCICR1 LOOPS-SCI回送模式。即“自发自收”。1=回送模式,0=正常模式。 SCISWAI-等待模式停止控制。1=等待模式SCI工作,0=不工作。 RSRC-接收器来源。1=来源于外部,0=来源于内部。和LOOPS配合。 M-数据字符长度。1=数据位9位,0=数据位8位。 WAKE-唤醒条件位。1=地址位唤醒(接收数据的最大显著位为1),0=空闲线唤醒(RXD脚满足空闲条件)。 ILT-空闲线类型。这位决定SCI什么时候开始计数“空闲字符”的位数。计数可从“起始位”或从“停止位”开始。从“起始位”开始计数,则“停止位”前的一串“1”可能产生错误的空闲线条件。从“停止位”开始计数,可避免错误的空闲线识别,但需要适当地同步发送操作。 PE-奇偶校验使能。1=允许,0=禁止。

  21. SCI控制寄存器1-SCICR1 PT-奇偶校验类型。1=奇校验,0=偶校验。 一般此寄存器可以按默认值设置。

  22. SCI控制寄存器2-SCICR2 TIE-传送寄存器空中断使能。1=中断允许,0=中断禁止。参考状态寄存器的TDRE位。由TDRE产生中断请求。 TCIE-发送完毕中断使能。1=中断允许,0=中断禁止。参考TC位。 RIE-接收数据寄存器满中断使能。1=中断允许,0=中断禁止。参考RDRF和OR位。 ILIE-线路空闲中断使能。1=中断允许,0=中断禁止。参考IDLE位。 TE-发送器使能。1=发送使能,0=发送禁止。 RE-接收器使能。1=接收使能,0=接收禁止。 RWU-接收器唤醒位。1=唤醒允许并且关闭接收中断。通常,硬件通过自动清除RWU来唤醒接收器。0=正常模式。 SBK-传输终止位。1=发送终止符,0=不发送。

  23. SCI状态寄存器1-SCISR1 这个寄存器的TDRE,TC,RDRF,IDLE和OR位跟控制寄存器2有关,控制寄存器2中的对应位为中断使能位,状态寄存器1中的位为中断状态位。 TDRE-发送数据寄存器空标志。当数据由SCI数据寄存器移动到SCI移位寄存器中时,TDRE=1。然后数据寄存器为空,可以接收新数据。通过读SCISR1 然后写SCIDRL 来清TDRE。 TC-发送完成标志。当TC=1 时,读SCISR1 然后写SCIDRL 清除该位。当数据、报头或中止符进入队列并准备发送时,TC 自动被清除。1=发送完毕,0=正在发送。 RDRF-接收数据寄存器满标志。1=数据寄存器接收到有效数据,可读;0=数据寄存器中数据暂不可用。 IDLE-线路空闲标志。当10 个连续的逻辑1(M=0)或11 个连续的逻辑1(M=1)出现在接收器输入端,IDLE置位。。如果IDLE 被清除,在一个空闲条件置位IDLE 前一个有效的帧必须再次置位RDRF位。通过读SCISR1 然后读SCIDRL 来清除IDLE。1=接收空闲;0=上次空闲状态后,接收器还没有处于有效状态。

  24. SCI状态寄存器1-SCISR1 OR-溢出标志。置位条件:在接收下一个数据前软件未读取数据寄存器,在接收到下一帧的停止位后,OR立即置位。移位寄存器中的数据丢失,但不会影响SCIDR中的数据。可以通过读SCISR1 然后读SCIDRL 来清除。1=有溢出,0=无溢出。 NF-噪声标志。1=有噪声,0=无噪声。通过读SCISR1 然后读SCIDRL 来清除NF 标志。 FE-接收器帧错误标志。当接收到的停止位是0 时,FE=1。通过SCISR1 然后读SCIDRL 来清除FE。FE 禁止进一步的数据接收直到FE 清除。 1=检测到帧错误。 0=未检测到帧错误。 PF-奇偶错误标志。当奇偶使能位PE=1 且接收数据的校验位和校验类型不符时,PF=1。读SCISR1 然后读SCIDRL 清除PF。1=检测到奇偶错误。0=未检测到奇偶错误。

  25. SCI状态寄存器2-SCISR2 SCISR2包含2个读写位,1个只读位。 BK13-终止符长度。该位决定了发送的中止符长度是10 或11 位还是13 或14 位。帧错误的检测不影响该位。1=中止符长度是13 或14 位。0=中止符长度是10 或11 位。 TXDIR:单线模式下的发送器引脚数据检测。该位决定了TXD 引脚在单线模式下是用来做输入还是输出。该位仅和单线模式有关。1=单线模式下TXD 引脚作为输入。0=单线模式下TXD 引脚作为输出。 RAF:接收器有效标志。当接收器在起始位的RT1 时刻检测到逻辑0 时,RAF=1。当接收器检测到空闲字符时RAF 被清除。0=没有接收操作。1=正在接收。

  26. SCI数据寄存器-SCIDRH(L) 任意可读,读操作的是SCI 接收寄存器;任意可写,写的是SCI 发送数据寄存器,写R8 位无效。 R8-接收位 当SCI 配置成9 位数据格式(M=1)时,R8 是接收数据的第九位。 T8-发送位 当SCI 配置成9 位数据格式(M=1)时,T8 是发送数据的第九位。

  27. SCI数据寄存器-SCIDRH(L) R[7:0]:接收位 接收的数据位。 T[7:0]:发送位 发送的数据位。 注意,读写时跟C语言的读写操作是一样的。需要定义字节型变量。 注:如果T8 的值和前面发送的一样,T8 就不必重新写入。直到重新写入不同的值,T8才被更新。在8 位数据模式中,只有SCIDRL 需要访问。在9 位数据模式中,用8 位写指令操作时,要先写SCIDRH,后写SCIDRL。 SCI示例见课本相关章节

  28. 同步和异步串行通信的区别 同步串行通信(SPI) -使用时钟信号。 以数据块(帧)为传输单位; 双方使用同一时钟(主控方提供时钟,被控方接收时钟);数据格式:每个数据块前加1~2个同步字符(同步头)进行帧同步,一般采用CRC循环冗余校验码;同步通信的数据传输效率和传输速率较高,但硬件电路比较复杂; 异步串行通信-不使用时钟信号(SCI)。串行通信时的数据、控制和状态信息都使用同一根信号线传送;收发双方必须遵守共同的通信协议(通信规程);串行异步通信以字符为单位进行传输。

More Related