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

29
第第第 MC9S12 第第第 第第第第第第 第第第第第第第第第第第第第 2008.8

Upload: raheem

Post on 17-Mar-2016

156 views

Category:

Documents


14 download

DESCRIPTION

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

TRANSCRIPT

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

第六章 MC9S12 单片机串行通信模块山东大学控制科学与工程学院

2008.8

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

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

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

5 、同步外设接口 SPI 模块 常见串行通信:

异步串行通信 SCI (通用异步收发 UART ) 同步串行外设接口 SPI IIC ( Inter-Integrated Circuit )总线 控制局域网 CAN 总线 USB ( FLASH 存储器,在线视频) PS/2 (键盘、鼠标)

MC9S12 单片机片内集成了 SPI 、 SCI 、 IIC

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

串行通信的数据传输方式方式 图示 一句话总结单工 只发不收,

只收不发半双工 分时收发全双工 同时收发

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

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

PI

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

SPI 引脚( 4 根线): SCK 同步时钟,由主机产生并传送给从机 MOSI ( Master Output/Slave Input )

主机发送,从机接收 MISO ( Master Input /Slave Output )

主机接收,从机发送 SS 从机选择线

主从机选择信号是低电平有效。 1- 主机, 0= 从机。系统中只能有一个主机。

SPI 引脚定义

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

MC9S12DG128 有两个 SPI 接口,分别占用 PP 口( 0-3 位)和 PM 口( 2-5 位),引脚号分别为 1-4 和 70-73 。 注意:

主机的 MOSI 、 MISO 分别和从机的 MOSI ,MISO 连接。

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

SPI 工作模式 主机模式:

当 SPICR1 中的 MSTR 位置 1 时,工作在主机模式。 主机产生时钟信号,用来同步主从双方的移位寄存器。当向

SPI 数据寄存器中写入数据后,数据开始传送。 从机模式:

当 SPICR1 中的 MSTR 清 0 时,工作在从机模式。 从机不产生时钟,从机 SCK 引脚变为输入口,接收主机时钟 SS 必须有效。

双工模式(三线同步传输): 无论是主机模式还是从机模式都只用一个引脚传输数据。

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

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

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

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

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

SPI 控制寄存器 1—SPICR1CPHA—SPI 时钟相位控制。 1= 主机在 SPSCK 的第一个跳变开始驱动 MOSI ,从机应用它来启动数据发送。在连结几次 SPI 传送期间,从机的 SS 脚可保持为低电平; 0=SS 下跳用于启动从机数据发送,而第一个 SPSCK 跳变捕捉最高位。在一次 SPI 传送完毕,从机的 SS 脚必须返回高电平。

SSOE— 从机选择输出使能。跟 MODF 配合使用。

LSBFE— 最低位先发使能。 1= 先发最低位, 0= 先发最高位。

SS 非下降沿启动

时钟信号启动

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

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 。控制正常和双工模式。

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

SPI 波特率寄存器波特率 --每秒钟数据传输的二进制位数 bps。

SPPR2-SPPR0--SPI 波特率预分频位SPR2-SPR0--SPI 波特率选择位 组合使用

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

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 。

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

SPI 数据寄存器

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

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

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

SPI1 的MOSI ,时钟,片选,接到74HC16474HC164 ,串入并出。 74HC244 八同相三态线驱动器

接 8段 LED的驱动电路,低电平使某段发光。

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

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 的其他特性可以在寄存器的讲解时体会。

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

SCI 的寄存器波特率寄存器 SCIBDH 和 SCIBDL

波特率计算公式:BR= 两寄存器组合值, 1-8191

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

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

波特率寄存器 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 不使用。

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

SCI 控制寄存器 1-SCICR1LOOPS-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= 禁止。

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

SCI 控制寄存器 1-SCICR1PT-奇偶校验类型。 1=奇校验, 0=偶校验。

一般此寄存器可以按默认值设置。

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

SCI 控制寄存器 2-SCICR2TIE- 传送寄存器空中断使能。 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= 不发送。

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

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=上次空闲状态后,接收器还没有处于有效状态。

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

SCI 状态寄存器 1-SCISR1OR-溢出标志。置位条件:在接收下一个数据前软件未读取数据寄存器,在接收到下一帧的停止位后, 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=未检测到奇偶错误。

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

SCI 状态寄存器 2-SCISR2SCISR2 包含 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=正在接收。

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

SCI 数据寄存器 -SCIDRH ( L )

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

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

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

SCI 示例见课本相关章节

Page 28: 第六章  MC9S12 单片机 串行通信模块
Page 29: 第六章  MC9S12 单片机 串行通信模块

同步和异步串行通信的区别同步串行通信( SPI )

- 使用时钟信号。以数据块(帧)为传输单位;双方使用同一时钟(主控方提供时钟,被控方接收时钟);数据格式:每个数据块前加 1~2个同步字符(同步头)进行帧同步,一般采用 CRC循环冗余校验码;同步通信的数据传输效率和传输速率较高,但硬件电路比较复杂;

异步串行通信 - 不使用时钟信号( SCI )。串行通信时的数据、控制和状态信息都使用同一根信号线传送;收发双方必须遵守共同的通信协议(通信规程);串行异步通信以字符为单位进行传输。