340 likes | 603 Views
基于 HCS12 的嵌入式系统设计. 合肥工业大学 吴 晔,张 阳,滕 勤 Email : wuye@ialab.hfut.edu.cn , yzhang0615@163.com , tengqin7348@126.com TEL : 13505612773 , 13966717615. 第 10 章 S12 串行通信接口模块及其应用实例. SCI 模块概述 SCI 模块结构组成和特点 SCI模块寄存器及设置 SCI模块基础应用实例 智能车系统中 SCI 模块的应用 . 10.1 SCI 模块概述.
E N D
基于HCS12的嵌入式系统设计 合肥工业大学 吴 晔,张 阳,滕 勤 Email:wuye@ialab.hfut.edu.cn,yzhang0615@163.com,tengqin7348@126.com TEL:13505612773,13966717615 《基于HCS12的嵌入式系统设计》
第10章 S12串行通信接口模块及其应用实例 SCI模块概述 SCI 模块结构组成和特点 SCI模块寄存器及设置 SCI模块基础应用实例 智能车系统中SCI模块的应用 《基于HCS12的嵌入式系统设计》
10.1 SCI模块概述 串行通信是微控制器与外界进行信息交换的一种方式。MC9S12DG128微控制器内部有一个全双工串行通信接口,称为SCI。 串行通信是指数据一位一位地按顺序传送的通信方式,其突出优点是只需一根传输线,可大大降低硬件成本,特别适合远距离通信。其缺点是传输速度较低,每秒内能发送或接收的二进制位数称为波特率。若发送一位时间为t,则波特率为1/t。 MC9S12DG128单片机内置的SCI模块是全双工、波特率可编程设置、可编程选择8位数据或9位数据格式的串行通信接口(也叫做串口)。本章着重介绍SCI模块的特性、寄存器功能及设置,并通过一些基础应用实例和SCI模块在自主寻迹智能车上的应用,让读者掌握SCI模块的应用及编程方法。 《基于HCS12的嵌入式系统设计》
10.2 SCI模块结构组成和特点 MC9S12DG128单片机内置的SCI模块如图10.1所示。 《基于HCS12的嵌入式系统设计》
10.2 SCI模块结构组成和特点 SCI模块具有以下基本特征: • 全双工运行; • 标准不归零传号/空号(NRZ)数据格式; • 13位波特率选择; • 可编程的8位或9位数据格式; • 独立使能发送器和接收器; • 可编程的发送器奇偶校验; • 两种接收器唤醒模式: • 空闲线唤醒; • 地址标志唤醒; • 8个驱动中断的标志位: • 发送器空; • 传输完成; • 接收器满; • 空闲接收器输入; • 接收器复写错误; • 噪声错误; • 帧错误; • 奇偶校验错误; • 接收器帧错误检测; • 硬件奇偶校验; • 1/16位时间噪声检测。 《基于HCS12的嵌入式系统设计》
10.3 SCI模块寄存器 MC9S12DG128的SCI模块共有8个寄存器,详见表10.1。对于112引脚的MC9S12DG128,内部有两个SCI模块,分别是SCI0和SCI1,表10.1中分别列出了SCI0和SCI1两个模块中各寄存器地址。 《基于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。 《基于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寄存器。 《基于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表示普通操作模式使能。 《基于HCS12的嵌入式系统设计》
10.3 SCI模块寄存器 10.3.2 SCI控制寄存器1 接收器输入由RSRC位决定。 SCISWAI:等待模式下SCI停止位。 1表示SCI在等待模式下禁止; 0表示SCI在等待模式下使能。 RSRC:接收器来源位。当LOOPS=1时,RSRC位决定接收器移位寄存器输入的来源。 1表示接收器输入连接到外部发送器,单线模式如图10.5所示; 0表示接收器输入连接到内部发送器输出。 《基于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会导致一个空闲字符的错误识别。开始于停止位之后的计数避免了错误空闲字符的识别,但是需要适当的同步传输。 《基于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表示偶校验。 《基于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中断请求禁止。 《基于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表示发送器禁止。 《基于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表示没有中止符。 《基于HCS12的嵌入式系统设计》
10.3 SCI模块寄存器 10.3.4 SCI状态寄存器1 SCISR1和SCISR2寄存器为MCU提供产生SCI中断输入源的状态查询,如图10.7所示。清除这些标志位的过程需要读取状态寄存器,然后通过读或者写SCI数据寄存器才能实现。在这两步之间允许执行其他指令,只要不影响I/O操作,但是两步的操作顺序对于标志位清除是必需的。 《基于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数据寄存器中的数据不可用。 《基于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标志。 《基于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表示没有奇偶校验错误发生。 《基于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位。 《基于HCS12的嵌入式系统设计》
10.3 SCI模块寄存器 10.3.5 SCI状态寄存器2 TXDIR:单线模式下的发送器引脚数据方向,该位决定了在单线模式下,TXD引脚被用做输入还是输出,仅在单线模式下有效。 1表示单线模式下TXD引脚被用做输出; 0表示单线模式下TXD引脚被用做输入。 RAF:接收器有效标志位。当接收器在起始位的RT1时刻检测到逻辑0时,RAF置位。当接收器检测到空闲字符时,RAF被清除。 1表示没有接收正在进行; 0表示正在进行接收。 《基于HCS12的嵌入式系统设计》
10.3 SCI模块寄存器 10.3.6 SCI数据寄存器 SCI数据寄存器(SCI Data Registers,SCIDRH/L)如图10.9所示。 《基于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。 《基于HCS12的嵌入式系统设计》
10.4 SCI模块基础应用实例 实例一:本实例实现SCI模块的数据发送,利用SCI0模块连续发送0~99,共100个数据。 程序清单: 《基于HCS12的嵌入式系统设计》
10.4 SCI模块基础应用实例 《基于HCS12的嵌入式系统设计》
10.4 SCI模块基础应用实例 《基于HCS12的嵌入式系统设计》
10.4 SCI模块基础应用实例 实例二:本实例实现SCI模块的数据收/发,编程实现当DG128接收到数据0xAA时,发送0xBB;如果接收到的数据不是0xAA,则发送0xCC。 程序清单: 《基于HCS12的嵌入式系统设计》
10.4 SCI模块基础应用实例 《基于HCS12的嵌入式系统设计》
10.5 智能车系统中SCI模块的应用 在智能车系统设计调试过程中,需要一些辅助调试手段,以便了解当前智能车的运行车速、舵机转角、赛道信息等参数。常用的调试手段大多采用RS-232串口方式调试,在第三届全国大学生“飞思卡尔”杯智能汽车竞赛活动中,也有部分参赛队伍采用SD卡辅助调试方法。RS-232串口调试方法是最简便也是最常见的,利用MC9S12DG128的SCI模块实现的RS-232串口通信原理如图10.10所示。 《基于HCS12的嵌入式系统设计》
10.5 智能车系统中SCI模块的应用 利用图10.10所示的原理,容易实现MC9S12DG128与PC的串口通信。只需要合理配置MC9S12DG128中的SCI相关寄存器就可以实现RS-232串口通信。以下给出SCI初始化以及一些功能函数代码,更复杂的功能请读者结合具体应用要求、参照样例自行完成。 《基于HCS12的嵌入式系统设计》
10.5 智能车系统中SCI模块的应用 《基于HCS12的嵌入式系统设计》
10.5 智能车系统中SCI模块的应用 《基于HCS12的嵌入式系统设计》
10.5 智能车系统中SCI模块的应用 《基于HCS12的嵌入式系统设计》
The End 《基于HCS12的嵌入式系统设计》