290 likes | 577 Views
第六章 MC9S12 单片机 串行通信模块. 山东大学控制科学与工程学院 2008.8. 串行通信是指 MCU 与外设之间使用一根数据信号线一位一位的传输数据。 通信线少,可以在远距离通信时极大的降低成本,适合于远距离传输。. 5 、同步外设接口 SPI 模块. 常见串行通信: 异步串行通信 SCI (通用异步收发 UART ) 同步串行外设接口 SPI IIC ( Inter-Integrated Circuit )总线 控制局域网 CAN 总线 USB ( FLASH 存储器,在线视频) PS/2 (键盘、鼠标)
E N D
第六章 MC9S12单片机串行通信模块 山东大学控制科学与工程学院 2008.8
串行通信是指MCU与外设之间使用一根数据信号线一位一位的传输数据。串行通信是指MCU与外设之间使用一根数据信号线一位一位的传输数据。 • 通信线少,可以在远距离通信时极大的降低成本,适合于远距离传输。
5、同步外设接口SPI模块 • 常见串行通信: • 异步串行通信SCI(通用异步收发UART) • 同步串行外设接口SPI • IIC(Inter-Integrated Circuit)总线 • 控制局域网CAN总线 • USB(FLASH存储器,在线视频) • PS/2(键盘、鼠标) • MC9S12单片机片内集成了SPI、SCI、IIC
9S12系列单片机SPI的定义 • SPI(Serial Peripheral Interface,串行外设接口)是一种高速高效的同步串行接口技术,这种接口技术主要用于MCU 与外部的接口芯片交换数据,已逐渐成为一种工业接口标准。 • 一个主机+多个从机 • ADI的AD转换芯片、电源管理芯片等支持SPI
SPI引脚定义 • SPI引脚(4根线): • SCK 同步时钟,由主机产生并传送给从机 • MOSI(Master Output/Slave Input) • 主机发送,从机接收 • MISO (Master Input /Slave Output) • 主机接收,从机发送 • SS 从机选择线 • 主从机选择信号是低电平有效。1-主机,0=从机。系统中只能有一个主机。
MC9S12DG128有两个SPI 接口,分别占用PP 口(0-3 位)和PM 口(2-5 位),引脚号分别为1-4和70-73。 • 注意: • 主机的MOSI、MISO分别和从机的MOSI,MISO连接。
SPI工作模式 • 主机模式: • 当SPICR1中的MSTR位置1时,工作在主机模式。 • 主机产生时钟信号,用来同步主从双方的移位寄存器。当向SPI数据寄存器中写入数据后,数据开始传送。 • 从机模式: • 当SPICR1中的MSTR清0时,工作在从机模式。 • 从机不产生时钟,从机SCK引脚变为输入口,接收主机时钟 • SS必须有效。 • 双工模式(三线同步传输): • 无论是主机模式还是从机模式都只用一个引脚传输数据。
SPI模块的寄存器 • SPI控制寄存器1 SPICR1 • SPI控制寄存器2 SPICR2 • SPI状态寄存器 SPISR • SPI波特率寄存器 SPIBR • SPI数据寄存器 SPIDR
SPI控制寄存器一 SPIE—SPI中断使能位。1=中断允许,0=中断禁止。 SPE—SPI系统使能位。1=使用SPI,0=不使用SPI。 SPTIE—发送中断使能。1=允许,0=禁止。 MSTR—主从模式选择位。1=主机,0=从机。 CPOL—时钟极性位。1=有效时钟为低,空闲为高,0=有效时钟为高,空闲为低。主从机必须匹配。
SPI控制寄存器1—SPICR1 SS非下降沿启动 CPHA—SPI时钟相位控制。1=主机在SPSCK的第一个跳变开始驱动MOSI,从机应用它来启动数据发送。在连结几次SPI传送期间,从机的SS脚可保持为低电平;0=SS下跳用于启动从机数据发送,而第一个SPSCK跳变捕捉最高位。在一次SPI传送完毕,从机的SS脚必须返回高电平。 SSOE—从机选择输出使能。跟MODF配合使用。 时钟信号启动 LSBFE—最低位先发使能。1=先发最低位,0=先发最高位。
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。控制正常和双工模式。
SPI 波特率寄存器 波特率--每秒钟数据传输的二进制位数bps。 SPPR2-SPPR0--SPI 波特率预分频位 SPR2-SPR0--SPI 波特率选择位 组合使用
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。
SPI 数据寄存器 SPI 数据寄存器是SPI 数据的输入和输出寄存器。写该寄存器会允许一个字节进入队列并发送。如果SPI 被配置成主机,当前面的数据发送完成,排在队列的数据会立即被发送。SPISR 寄存器中的发送空标志SPTEF 表明SPI 数据寄存器准备接收新的数据。当SPIF=1 时SPIDR 中接收的数据是有效的,这时才可以读到有效数据。 注意,SPIEF=0时表示当前数据并未发送完成,不可写SPIDR寄存器,当SPIEF=1时,才可以写SPIDR寄存器以发送新数据。
SPI综合举例 单片机MC9S12DG128 的SPI1 接口和74HC164 连接,74HC164 是串入并出的8 位移位寄存器,用其来扩展并行输出口,74HC164 的输出作为数码管显示电路的段码,采用动态扫描显示。PT5 做74HC164 的片选信号。微控制器工作于主模式,向SPIDR 写入数据启动SPI 发送模块后,MCU 发送的数据进入74HC164 的移位寄存器中。请见第6章 SPI.doc。 SPI1的MOSI,时钟,片选,接到74HC164 74HC164,串入并出。 74HC244八同相三态线驱动器 接8段LED的驱动电路,低电平使某段发光。
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的其他特性可以在寄存器的讲解时体会。
SCI的寄存器波特率寄存器SCIBDH和SCIBDL 波特率计算公式: BR=两寄存器组合值,1-8191 注意此寄存器的赋值方法:如果只对SCIBDH赋值是无效的,必须先对SCIBDH赋值,再对SCIBDL赋值才可以产生有效的BR。如果不使用SCIBDH,则可以直接给SCIBDL赋值,因为SCIBDH复位后默认为0,相当于赋0值。 下面举个设置波特率为9600的例子。
波特率寄存器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不使用。
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=禁止。
SCI控制寄存器1-SCICR1 PT-奇偶校验类型。1=奇校验,0=偶校验。 一般此寄存器可以按默认值设置。
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=不发送。
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=上次空闲状态后,接收器还没有处于有效状态。
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=未检测到奇偶错误。
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=正在接收。
SCI数据寄存器-SCIDRH(L) 任意可读,读操作的是SCI 接收寄存器;任意可写,写的是SCI 发送数据寄存器,写R8 位无效。 R8-接收位 当SCI 配置成9 位数据格式(M=1)时,R8 是接收数据的第九位。 T8-发送位 当SCI 配置成9 位数据格式(M=1)时,T8 是发送数据的第九位。
SCI数据寄存器-SCIDRH(L) R[7:0]:接收位 接收的数据位。 T[7:0]:发送位 发送的数据位。 注意,读写时跟C语言的读写操作是一样的。需要定义字节型变量。 注:如果T8 的值和前面发送的一样,T8 就不必重新写入。直到重新写入不同的值,T8才被更新。在8 位数据模式中,只有SCIDRL 需要访问。在9 位数据模式中,用8 位写指令操作时,要先写SCIDRH,后写SCIDRL。 SCI示例见课本相关章节
同步和异步串行通信的区别 同步串行通信(SPI) -使用时钟信号。 以数据块(帧)为传输单位; 双方使用同一时钟(主控方提供时钟,被控方接收时钟);数据格式:每个数据块前加1~2个同步字符(同步头)进行帧同步,一般采用CRC循环冗余校验码;同步通信的数据传输效率和传输速率较高,但硬件电路比较复杂; 异步串行通信-不使用时钟信号(SCI)。串行通信时的数据、控制和状态信息都使用同一根信号线传送;收发双方必须遵守共同的通信协议(通信规程);串行异步通信以字符为单位进行传输。