基于 hcs12 的嵌入式系统设计

34
基基 HCS12 基基基基基 基基 基基基基基基 基 基 基 基 Email [email protected] [email protected] [email protected] TEL 13505612773 13966717615

Upload: vance

Post on 12-Jan-2016

156 views

Category:

Documents


0 download

DESCRIPTION

基于 HCS12 的嵌入式系统设计. 合肥工业大学 吴 晔,张 阳,滕 勤 Email : [email protected][email protected][email protected] TEL : 13505612773 , 13966717615. 第 10 章 S12 串行通信接口模块及其应用实例. SCI 模块概述 SCI 模块结构组成和特点 SCI模块寄存器及设置 SCI模块基础应用实例 智能车系统中 SCI 模块的应用. 10.1 SCI 模块概述. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 基于 HCS12 的嵌入式系统设计

基于 HCS12 的嵌入式系统设计

合肥工业大学吴 晔,张 阳,滕 勤

Email : [email protected][email protected][email protected]

TEL : 13505612773 , 13966717615

Page 2: 基于 HCS12 的嵌入式系统设计

第 10 章 S12 串行通信接口模块及其应用实例

SCI 模块概述 SCI 模块结构组成和特点 SCI模块寄存器及设置 SCI模块基础应用实例 智能车系统中 SCI 模块的应用

Page 3: 基于 HCS12 的嵌入式系统设计

10.1 SCI 模块概述 串行通信是微控制器与外界进行信息交换的一

种方式。 MC9S12DG128 微控制器内部有一个全双工串行通信接口,称为 SCI 。

串行通信是指数据一位一位地按顺序传送的通信方式,其突出优点是只需一根传输线,可大大降低硬件成本,特别适合远距离通信。其缺点是传输速度较低,每秒内能发送或接收的二进制位数称为波特率。若发送一位时间为 t ,则波特率为 1/t 。

MC9S12DG128 单片机内置的 SCI 模块是全双工、波特率可编程设置、可编程选择 8 位数据或 9 位数据格式的串行通信接口(也叫做串口)。本章着重介绍 SCI 模块的特性、寄存器功能及设置,并通过一些基础应用实例和 SCI 模块在自主寻迹智能车上的应用,让读者掌握 SCI 模块的应用及编程方法。

Page 4: 基于 HCS12 的嵌入式系统设计

10.2 SCI 模块结构组成和特点 MC9S12DG128 单片机内置的 SCI 模块如图 10.1 所示。

Page 5: 基于 HCS12 的嵌入式系统设计

10.2 SCI 模块结构组成和特点SCI 模块具有以下基本特征:

全双工运行; 标准不归零传号 / 空号( NRZ )数据格式; 13 位波特率选择; 可编程的 8 位或 9 位数据格式; 独立使能发送器和接收器; 可编程的发送器奇偶校验; 两种接收器唤醒模式:

空闲线唤醒; 地址标志唤醒;

8 个驱动中断的标志位: 发送器空; 传输完成; 接收器满; 空闲接收器输入; 接收器复写错误; 噪声错误; 帧错误; 奇偶校验错误;

接收器帧错误检测; 硬件奇偶校验; 1/16 位时间噪声检测。

Page 6: 基于 HCS12 的嵌入式系统设计

10.3 SCI 模块寄存器 MC9S12DG128 的 SCI 模块共有 8 个寄存器,详见表 10.1 。对于 112 引脚的 MC9S12DG128 ,内部有两个 SCI 模块,分别是 SCI0和 SCI1 ,表 10.1 中分别列出了 SCI0 和 SCI1 两个模块中各寄存器地址。

Page 7: 基于 HCS12 的嵌入式系统设计

10.3 SCI 模块寄存器10.3.1 SCI 波特率寄存器

SCI波特率寄存器( SCI Baud Rate Registers)用来设置 SCI的波特率,如图 10.2所示,计算波特率公示为

SCI波特率 =SCI模块时钟 / (16×BR)

其中, BR是 SCI波特率寄存器 SBR12到 SBR0的内容。波特率寄存器的数值从 1~ 8191。

Page 8: 基于 HCS12 的嵌入式系统设计

10.3 SCI 模块寄存器10.3.1 SCI 波特率寄存器

读:任何时刻,如果只对 SCIBDH 寄存器作写入操作,紧接着读取该寄存器无法返回正确数据,直到对 SCIBDL 也赋值;写:任何时刻。SBR12 ~ SBR0 : SCI 波特率位。 SCI 的波特率由这 13 位确定。注意 1 :复位后,第一次只有 TE 或 RE 位置位,波特率发生器才正常工作。当 BR=0 时,波特率发生器禁止。注意 2 :如果只对 SCIBDH 寄存器赋值而不赋值 SCIBDL 寄存器,写操作是无效的,因为写入 SCIBDH 的数值只是放在一个临时寄存器中,直到写入 SCIBDL 寄存器时才将数值放入 SCIBDH 寄存器。

Page 9: 基于 HCS12 的嵌入式系统设计

10.3 SCI 模块寄存器10.3.2 SCI 控制寄存器 1

SCI控制寄存器 1( SCI Control Register 1, SCICR1)如图10.3所示。

读:任何时刻;写:任何时刻。LOOPS :环路选择位。在环路操作模式下, RXD 引脚和 SCI 断开,发送器输出在内部和接收器输入相连。必须发送器和接收器均被使能的情况下才能够使用环路功能。环路操作如图 10.4 所示。

1 表示环路操作模式使能; 0 表示普通操作模式使能。

Page 10: 基于 HCS12 的嵌入式系统设计

10.3 SCI 模块寄存器10.3.2 SCI 控制寄存器 1

接收器输入由 RSRC 位决定。

SCISWAI :等待模式下 SCI 停止位。 1 表示 SCI 在等待模式下禁止; 0 表示 SCI 在等待模式下使能。

RSRC :接收器来源位。当 LOOPS=1 时, RSRC 位决定接收器移位寄存器输入的来源。

1 表示接收器输入连接到外部发送器,单线模式如图 10.5 所示; 0 表示接收器输入连接到内部发送器输出。

Page 11: 基于 HCS12 的嵌入式系统设计

10.3 SCI 模块寄存器10.3.2 SCI 控制寄存器 1

LOOPS 位和 RSRC组合选择环路模式或单线模式参见表 10.2 。

M :数据格式选择位,该位决定数据字符长度是 8 位还是 9 位。 1 表示 1 位起始位, 9 位数据位, 1 位停止位; 0 表示 1 位起始位, 8 位数据位, 1 位停止位。

WAKE :唤醒条件位,该位决定了何种条件唤醒 SCI ,接收数据字符的最高位为 1 (地址屏蔽)或者 RXD 上的空闲条件。

1 表示地址屏蔽唤醒; 0 表示空闲线唤醒。

ILT :空闲线类型位,该位决定了何时接收器开始计数逻辑 1 作为空闲字符位。计数开始于起始位之后或者停止位之后。如果计数开始于起始位之后,停止位之前的一串逻辑 1会导致一个空闲字符的错误识别。开始于停止位之后的计数避免了错误空闲字符的识别,但是需要适当的同步传输。

Page 12: 基于 HCS12 的嵌入式系统设计

10.3 SCI 模块寄存器10.3.2 SCI 控制寄存器 1

ILT :空闲线类型位,该位决定了何时接收器开始计数逻辑 1 作为空闲字符位。计数开始于起始位之后或者停止位之后。如果计数开始于起始位之后,停止位之前的一串逻辑 1会导致一个空闲字符的错误识别。开始于停止位之后的计数避免了错误空闲字符的识别,但是需要适当的同步传输。

1 表示空闲字符开始于停止位之后; 0 表示空闲字符开始于起始位之后。

PE :奇偶校验使能位,该位使能奇偶校验功能。当奇偶校验功能使能时,会在传输字符的最高位插入一个奇偶校验位。

1 表示使能奇偶校验功能; 0 表示禁止奇偶校验功能。

PT :奇偶校验类型选择位,该位决定了使用奇校验还是偶校验。如果采用偶校验,当传输数据中 1 的个数为奇数时,奇偶校验位为 1 ;当传输数据中 1 的个数为偶数时,奇偶校验位为 0 。如果采用奇校验,当传输数据中 1 的个数为奇数时,奇偶校验位为 0 ;当传输数据中 1 的个数为偶数时,奇偶校验位为 1 。

1 表示奇校验; 0 表示偶校验。

Page 13: 基于 HCS12 的嵌入式系统设计

10.3 SCI 模块寄存器10.3.3 SCI 控制寄存器 2

SCI控制寄存器 2( SCI Control Register 2, SCICR2)如图10.6所示。

读:任何时刻;写:任何时刻。TIE :发送器中断使能标志,该位允许发送数据寄存器空标志 TDRE产生中断请求。

1 表示 TDRE 中断请求使能; 0 表示 TDRE 中断请求禁止。

TCIE :发送完成中断使能位,该位允许发送完成标志 TC产生中断请求。 1 表示 TC 中断请求使能; 0 表示 TC 中断请求禁止。

Page 14: 基于 HCS12 的嵌入式系统设计

10.3 SCI 模块寄存器10.3.3 SCI 控制寄存器 2

RIE :接收器满中断使能位,该位允许接收数据寄存器满标志 RDRF 或者溢出标志 OR产生中断请求。

1 表示 RDRF 或 OR 中断请求使能; 0 表示 RDRF 或 OR 中断请求禁止。

ILIE :空闲线中断使能位,该位允许空闲线标志 IDLE产生中断请求。 1 表示 IDLE 中断请求使能; 0 表示 IDLE 中断请求禁止。

TE :发送器使能位,该位使能 SCI 发送器并配置 TXD 引脚由 SCI 控制, TE 位能够用于发送空闲报头。

1 表示发送器使能; 0 表示发送器禁止。

Page 15: 基于 HCS12 的嵌入式系统设计

10.3 SCI 模块寄存器10.3.3 SCI 控制寄存器 2

RE :接收器使能位,该位使能 SCI 接收器。 1 表示接收器使能; 0 表示接收器禁止。

RWU :接收器唤醒位,该位使能 SCI 接收器。 1 表示 RWU 使能唤醒功能并禁止接收器中断请求,硬件通过自动清除 RWU

位来唤醒接收器; 0 表示普通操作。

SBK :发送中止符位,该位使能 SCI 发送器。 SBK 置位发送中止字符(当 BK13 置 0 ,则发送 10 个或 11 个逻辑 0 ;当 BK13 置位,则为 13 或 14 个逻辑 0 )。在完成发送中止符前自动清除 SBK 位。只要 SBK 置位,发送器连续发送完整中止符( 10 或 11 位; 13 或 14 位逻辑 0 )。

1 表示发送中止符; 0 表示没有中止符。

Page 16: 基于 HCS12 的嵌入式系统设计

10.3 SCI 模块寄存器10.3.4 SCI 状态寄存器 1

SCISR1 和 SCISR2 寄存器为 MCU提供产生 SCI 中断输入源的状态查询,如图 10.7 所示。清除这些标志位的过程需要读取状态寄存器,然后通过读或者写 SCI 数据寄存器才能实现。在这两步之间允许执行其他指令,只要不影响 I/O 操作,但是两步的操作顺序对于标志位清除是必需的。

Page 17: 基于 HCS12 的嵌入式系统设计

10.3 SCI 模块寄存器10.3.4 SCI 状态寄存器 1

读:任何时刻;写:无效。TDRE :发送数据寄存器空标志。当发送移位寄存器从 SCI 数据寄存器获得 1字节数据时该标志置位。当 TDRE=1 时,发送数据寄存器( SCIDRH/L )为空,此时能够接收一个字节的新数据。通过读取 SCISR1 寄存器然后写数据至 SCIDRL 寄存器可以清除 TDRE 位。

1 表示 1字节数据传输到发送移位寄存器,发送数据寄存器空; 0 表示没有数据传输到发送移位寄存器。

TC :发送完成标志。当有发送正在进行时,当报头或者中止符加载时, TC清零;当 TDRE 标志被置位且没有数据、报头、中止字符正在发送时, TC 置位。此时 TXD 输出信号变成空闲(逻辑 1 )。 TC 置位后,通过读取 SCISR1 寄存器,再写数据至 SCIDRL 寄存器清除 TC 位。当数据、报头、中止字符进入队列并准备发送时, TC 被自动清除。

1 表示没有发送正在进行; 0 表示发送正在进行。

RDRF :接收数据寄存器满标志。当接收移位寄存器中的数据传送到 SCI 数据寄存器时,RDRF 置位。 RDRF 置位后,通过读取 SCISR1 寄存器,再读取 SCIDRL 寄存器数据清除RDRF 位。

1 表示 SCI 数据寄存器中接收的数据可用; 0 表示 SCI 数据寄存器中的数据不可用。

Page 18: 基于 HCS12 的嵌入式系统设计

10.3 SCI 模块寄存器10.3.4 SCI 状态寄存器 1

IDLE :空闲线标志。当 10 个连续的逻辑 1 ( M=0 )或者 11 个连续的逻辑 1 ( M=1 )出现在接收器输入端时, IDLE 置位。一旦 IDLE 标志被清除,在空闲条件下能够置位 IDLE 标志之前,必须接收一个有效帧再次置位 RDRF 标志。 IDLE 置位后,通过读取 SCISR1 寄存器之后读取 SCIDRL 寄存器数据清除 IDLE 位。

1 表示接收器输入空闲; 0 表示 IDLE 标志上一次被清除后,接收器未接收到有效数据。

注意:当接收器唤醒位( RWU )置位时,线路空闲条件下不会置位 IDLE 标志。OR :溢出标志。当接收移位寄存器接收下一帧数据之前,如果软件读取 SCI 寄存器失败, OR 置位。对于第二帧而言,接收到停止位后立即置位 OR 。移位寄存器中的数据丢失,但是 SCI 数据寄存器中的已有数据不受影响。 OR 置位后,通过读取 SCISR1 寄存器之后读取 SCIDRL 寄存器数据清除 OR 位。

1 表示溢出发生; 0 表示没有溢出发生。

注意:当 RDRF 标志清除时,读取 OR 可能返回 1 。这可能会发生在以下事件中:① 接收第一帧数据后,读取状态寄存器 SCISR1 (返回 RDRF=1 和 OR=0 );② 没有读取数据寄存器中的第一帧就接收第二帧(第二帧数据没有收到, OR=1 );③ 读取数据寄存器 SCIDRL (返回第一帧并清除 RDRF 标志);④ 读取状态寄存器 SCISR1 (返回 RDRF=0 和 OR=1 )。事件③和事件②同时发生或者在事件②之后发生。当这种情况发生时,如果后来的帧要被接收,事件④后的一个虚拟 SCIDRL 读操作可以清除 OR 标志。

Page 19: 基于 HCS12 的嵌入式系统设计

10.3 SCI 模块寄存器10.3.4 SCI 状态寄存器 1

NF :噪声标志。当 SCI 检测到接收器输入有噪声时, NF 置位。 NF 置位和 RDFR 标志同时,但在溢出时 NF 不置位。 NF 置位后,通过读取 SCISR1 寄存器之后读取 SCIDRL寄存器数据清除 NF 位。

1 表示检测到噪声; 0 表示没有检测到噪声。

FE :帧错误标志。当接收到的停止位是 0 时, FE 置位。 FE 置位和 RDFR 标志同时,但在溢出时 FE 不置位。 FE 置位后,通过读取 SCISR1 寄存器之后读取 SCIDRL 寄存器数据清除 FE 位。

1 表示帧错误发生; 0 表示没有帧错误发生。

PF :奇偶校验错误标志。当奇偶校验使能位( PE )置位且接收到数据的奇偶校验位和定义的奇偶校验类型不符时, PF 置位。 PF 置位和 RDFR 标志同时,但在溢出时 PF 不置位。 PF 置位后,通过读取 SCISR1 寄存器之后读取 SCIDRL 寄存器数据清除 PF 位。

1 表示奇偶校验错误发生; 0 表示没有奇偶校验错误发生。

Page 20: 基于 HCS12 的嵌入式系统设计

10.3 SCI 模块寄存器10.3.5 SCI 状态寄存器 2

SCI状态寄存器 2( SCI Status Register 2, SCISR2)如图10.8所示。

读:任何时刻;写:任何时刻,写入 SCI状态寄存器 2 数据,除 BK13 和 TXDIR 位之外的其他位数据无效。BK13 :中止符长度,该位决定中止符的长度是 10 位或 11 位,还是 13 位或 14 位。 帧错误的检测不影响该位。

1 表示中止符的长度是 10 位或 11 位; 0 表示中止符的长度是 13 位或 14 位。

Page 21: 基于 HCS12 的嵌入式系统设计

10.3 SCI 模块寄存器10.3.5 SCI 状态寄存器 2

TXDIR :单线模式下的发送器引脚数据方向,该位决定了在单线模式下, TXD 引脚被用做输入还是输出,仅在单线模式下有效。

1 表示单线模式下 TXD 引脚被用做输出; 0 表示单线模式下 TXD 引脚被用做输入。

RAF :接收器有效标志位。当接收器在起始位的 RT1 时刻检测到逻辑 0 时, RAF 置位。当接收器检测到空闲字符时, RAF 被清除。

1 表示没有接收正在进行; 0 表示正在进行接收。

Page 22: 基于 HCS12 的嵌入式系统设计

10.3 SCI 模块寄存器10.3.6 SCI 数据寄存器

SCI数据寄存器( SCI Data Registers, SCIDRH/L)如图 10.9所示。

Page 23: 基于 HCS12 的嵌入式系统设计

10.3 SCI 模块寄存器10.3.6 SCI 数据寄存器

读:任何时刻,读取 SCI 接收数据寄存器数据;写:任何时刻,写入 SCI 发送数据寄存器数据,写入操作对 R8 位无效。R8 :接收第 9 位。当 SCI配置为 9 位数据格式时( M=1 ), R8 是接收到数据的第 9 位。T8 :发送第 9 位。当 SCI配置为 9 位数据格式时( M=1 ), T8 是发送数据的第 9 位。R7 ~ R0 :接收数据的低 8 位。T7 ~ T0 :发送数据的低 8 位。注意:如果 T8 的数值和之前发送的一样, T8就不必重新写入。同样的值被发送直到 T8 被重新写入不同的值。在 8 位数据格式中,只有 SCI 数据寄存器低字节( SCIDRL )需要被访问。在 9 位数据格式中,用 8 位写指令时,要先写 SCIDRH ,再写 SCIDRL 。

Page 24: 基于 HCS12 的嵌入式系统设计

10.4 SCI 模块基础应用实例 实例一:本实例实现 SCI 模块的数据发送,利用 SCI0 模块连续发送

0 ~ 99 ,共 100 个数据。程序清单:

Page 25: 基于 HCS12 的嵌入式系统设计

10.4 SCI 模块基础应用实例

Page 26: 基于 HCS12 的嵌入式系统设计

10.4 SCI 模块基础应用实例

Page 27: 基于 HCS12 的嵌入式系统设计

10.4 SCI 模块基础应用实例 实例二:本实例实现 SCI 模块的数据收 / 发,编程实现当 DG128 接收

到数据 0xAA 时,发送 0xBB ;如果接收到的数据不是 0xAA ,则发送 0xCC 。程序清单:

Page 28: 基于 HCS12 的嵌入式系统设计

10.4 SCI 模块基础应用实例

Page 29: 基于 HCS12 的嵌入式系统设计

10.5 智能车系统中 SCI 模块的应用 在智能车系统设计调试过程中,需要一些辅助调试手段,以便

了解当前智能车的运行车速、舵机转角、赛道信息等参数。常用的调试手段大多采用 RS-232 串口方式调试,在第三届全国大学生“飞思卡尔”杯智能汽车竞赛活动中,也有部分参赛队伍采用 SD卡辅助调试方法。 RS-232 串口调试方法是最简便也是最常见的,利用 MC9S12DG128 的 SCI 模块实现的 RS-232 串口通信原理如图 10.10 所示。

Page 30: 基于 HCS12 的嵌入式系统设计

10.5 智能车系统中 SCI 模块的应用 利用图 10.10 所示的原理,容易实现MC9S12DG128 与 PC 的

串口通信。只需要合理配置 MC9S12DG128 中的 SCI 相关寄存器就可以实现 RS-232 串口通信。以下给出 SCI初始化以及一些功能函数代码,更复杂的功能请读者结合具体应用要求、参照样例自行完成。

Page 31: 基于 HCS12 的嵌入式系统设计

10.5 智能车系统中 SCI 模块的应用

Page 32: 基于 HCS12 的嵌入式系统设计

10.5 智能车系统中 SCI 模块的应用

Page 33: 基于 HCS12 的嵌入式系统设计

10.5 智能车系统中 SCI 模块的应用

Page 34: 基于 HCS12 的嵌入式系统设计

The End