您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 串行通信接口SCI.
第5章串行通信接口SCI主要内容5.1异步串行通信的通用基础知识5.2AW60的SCI模块的编程结构5.3AW60的SCI构件设计与测试5.4AW60的中断源与第一个带有中断的编程实例5.1异步串行通信的通用基础知识5.1.1串行通信的基本概念异步串行通信的格式SCI(standardnon-return-zeromark/spacedataformat)“标准不归零传号/空号数据格式”通常采用NRZ数据格式.“不归零”的最初含义是:用正、负电平表示二进制值,不使用零电平。“mark/space”即“传号/空号”分别是表示两种状态的物理名称,逻辑名称记为“1/0”。下图给出了8位数据、无校验情况的传送格式串行通信数据格式串行通信的波特率波特率单位是位/秒,记为bps。通常情况下,波特率的单位可以省略。通常使用的波特率有300、600、900、1200、1800、2400、4800、9600、19200、38400、57600、115200、128000等奇偶校验字符奇偶校验检查(characterparitychecking)称为垂直冗余检查(verticalredundancychecking,VRC),它是每个字符增加一个额外位使字符中“1”的个数为奇数或偶数。奇校验:如果字符数据位中“1”的数目是偶数,校验位应为“1”,如果“1”的数目是奇数,校验位应为“0”。偶校验:如果字符数据位中“1”的数目是偶数,则校验位应为“0”,如果是奇数则为“1”串行通信的传输方式单工(Simplex):数据传送是单向的,一端为发送端,另一端为接收端。这种传输方式中,除了地线之外,只要一根数据线就可以了。有线广播就是单工的全双工(Full-duplex):数据传送是双向的,且可以同时接收与发送数据。这种传输方式中,除了地线之外,需要两根数据线,站在任何一端的角度看,一根为发送线,另一根为接收线。一般情况下,MCU的异步串行通信接口均是全双工的半双工(Half-duplex):数据传送也是双向的,但是在这种传输方式中,除了地线之外,一般只有一根数据线。任何一个时刻,只能由一方发送数据,另一方接收数据,不能同时收发。在freescale的HCS08系列MCU中,监控模式的通信就采用这种方式5.1.2RS-232总线标准MCU引脚一般输入/输出使用TTL电平,而TTL电平的“1”和“0”的特征电压分别为2.4V和0.4V,适用于板内数据传输。为了使信号传输得更远,美国电子工业协会EIA(ElectronicIndustryAssociation)制订了串行物理接口标准RS-232C。RS-232C采用负逻辑,-3V~-15V为逻辑“1”,+3V~+15V为逻辑“0”。RS-232C最大的传输距离是30m,通信速率一般低于20Kbps。RS-232接口,简称“串口”,它主要用于连接具有同样接口的室内设备。目前几乎所有计算机上的串行口都是9芯接口。下面给出了9芯串行接口的排列位置,相应引脚含义见下表。上图为9芯串行接口排列引脚号功能引脚号功能1接收线信号检测(载波检测DCD)6数据通信设备准备就绪(DSR)2接收数据线(RXD)7请求发送(RTS)3发送数据线(TXD)8允许发送(CTS)4数据终端准备就绪(DTR)9振铃指示5信号地(SG)9芯串行接口引脚含义表5.1.3TTL电平到RS-232电平转换电路具有SCI接口的MCU,一般具有发送引脚(TxD)与接收引脚(RxD),不同公司或不同系列的MCU,使用的引脚缩写名可能不一致,但含义相同。SCI的外围硬件电路,主要目的是将MCU的发送引脚TxD与接收引脚RxD的TTL电平,通过RS-232电平转换芯片转换为RS-232电平。下图给出一个基本SCI电平转换电路及芯片MAX232引脚图MAX232引脚串行通信接口电平转换电路MAX232芯片进行电平转换基本原理是:发送过程:MCU的TXD(TTL电平)经过MAX232的11脚(T1IN)送到MAX232内部,在内部TTL电平被“提升”为232电平,通过14脚(T1OUT)发送出去接收过程:外部232电平经过MAX232的13脚(R1IN)进入到MAX232的内部,在内部232电平被“降低”为TTL电平,经过12脚(R1OUT)送到MCU的RXD,进入MCU内组别TTL电平引脚方向典型接口232电平引脚方向典型接口111(T1IN)12(R1OUT)输入输出接MCU的TXD接MCU的RXD1314输入输出接到9芯接口的2脚RXD接到9芯接口的3脚TXD210(T2IN)9(R2OUT)输入输出接MCU的TXD接MCU的RXD87输入输出接到9芯接口的2脚RXD接到9芯接口的3脚TXDMAX232芯片输入输出引脚分类与基本接法5.1.4串行通信编程模型从基本原理角度看,串行通信接口SCI的主要功能是:接收时,把外部的单线输入的数据变成一个字节的并行数据送入MCU内部;发送时,把需要发送的一个字节的并行数据转换为单线输出接受引脚RxD发送引脚TxD发送移位寄存器接受移位寄存器SCI数据寄存器MCU内部总线SCI控制寄存器SCI状态寄存器SCI波特率寄存器5.2AW60的SCI模块的编程结构从程序员角度看,涉及SCI的有8个8位寄存器,其中2个波特率寄存器,1个数据寄存器,3个控制寄存器,2个状态寄存器,只要理解和掌握这8个寄存器的用法,就可以进行SCI编程寄存器名称缩写地址访问权限基本功能波特率寄存器SCI1BDH(SCI2BDH)0x0038(0x0040)读/写设置波特率SCI1BDL(SCI2BDL)0x0039(0x0041)数据寄存器SCI1D(SCI2D)0x003F(0x0047)收发数据控制寄存器SCI1C1(SCI2C1)0x003A(0x0042)读/写设置传输格式,中断使能SCI1C2(SCI2C2)0x003B(0x0043)SCI1C3(SCI2C3)0x003E(0x0046)读/写状态寄存器SCI1S1(SCI2S1)0x003C(0x0044)只读中断标志,发送与接收状态SCI1S2(SCI2S2)0x003D(0x0045)AW60的SCI模块寄存器简况SCI波特率计算公式与SCI波特率寄存器SCI波特率=fBUSCLK/(16×BR),其中fBUSCLK为内部总线频率SCI数据寄存器SCI控制寄存器SCI控制寄存器1(SCIxC1)SCI控制寄存器2(SCIxC2)SCI控制寄存器3(SCIxC3)SCI状态寄存器SCI状态寄存器1(SCIxS1)SCI状态寄存器2(SCIxS2)5.3AW60的SCI构件设计与测试5.3.1SCI构件设计概述以SCI的初始化、接收和发送三种基本操作为例,来说明实现构件化的全过程实现构件化编程的SCI软件模块应当具有以下几个特点:SCI模块是最底层的构件,它主要向上提供三种服务,分别是SCI模块的初始化、接收单个字节和发送单个字节,向下则直接访问模块寄存器,实现对硬件的直接操作。另外,从现实使用角度出发,它还需要封装接收N个字节和发送N个字节的子功能函数SCI模块在软件上对应1个SCI.c程序源代码文件和1个SCI.h头文件,当需要对它进行移植时,大多数情况下只需简单拷贝这两个文件即可,无需对源代码文件和头文件进行修改,只有当实施不同芯片之间的移植时,才需要修改头文件中与硬件相关的宏定义上层构件或软件在使用该构件时,严格禁止通过全局变量来传递参数,所有的数据传递都直接通过函数的形式参数来接收SCI初始化:voidSCIInit(uint8SCINo,uint8sysclk,uint16baud)通过其中一个串口发送一个字节:voidSCISend1(uint8SCINo,uint8ch)通过其中一个串口接收单个字节:uint8SCIRe1(uint8SCINo,uint8*p)通过其中一个串口发送N个字节:voidSCISendN(uint8SCINo,uint8n,uint8ch[])通过其中一个串口接收N个字节:uint8SCIReN(uint8SCINo,uint8n,uint8ch[])5.3.2SCI构件的头文件SCI.h头文件SCI.h中的内容可分为两个主要的部分,它们分别是5个函数原型的声明和外设模块寄存器相关信息的定义。前者给出了本SCI构件对上层构件或软件所提供的接口函数,而后者则指明了本“元构件”与具体硬件相关的信息5.3.3SCI构件的C语言源程序文件SCI.cSCI构件的初始化功能函数:SCIInitSCI构件单字节发送功能函数:SCISend1SCI构件的单字节接收功能函数:SCIRe1SCI构件的多字节发送功能函数:SCISendNSCI构件的多字节接收功能函数:SCIReNSCI构件的字符串接收功能函数:SCISendString5.3.4SCI构件的测试工程SCI1模块首先向PC机发送字符串,然后等待接收PC机从串口发送来的数据,若成功接收到1个数据,则立即将该数据回发给PC机,随后继续等待接收1个数据并回发,如此循环串口调试工具软件界面串行通信收发测试软件界面5.4AW60的中断源与第一个带有中断的编程实例5.4.1中断处理的相关基本概念中断与异常的含义中断服务例程ISR中断源与中断向量表中断优先级可屏蔽中断与不可屏蔽中断中断处理的一般过程5.4.2S08CPU的中断实现过程堆栈的使用S08CPU的中断过程的详细说明中断的关闭与开启方法中断的处理过程一般为:关中断、保护现场、执行中断服务程序、恢复现场、开中断等中断过程CPU中寄存器进出栈情况5.4.3AW60的中断源与中断向量表AW60有26个中断源,按优先级从高到低的顺序分别是:复位中断(1个)、SWI指令中断(1个)、引脚中断(1个)、低电压检测中断(1个)、ICG中断(1个)、定时器中断(10个)、SPI中断(1个)、SCI中断(6个)、键盘输入中断(1个)、ADC转换完成中断(1个)、I2C中断(1个)和实时中断(1个)。26个中断源只有18个中断向量,有的是几个中断源使用同一个中断向量5.4.4AW60的中断编程方法CW环境下使用AW60芯片中断的步骤是:在main.c中,依照“关总中断→开模块中断→开总中断”的顺序打开模块中断;在isr.c文件中,编写中断服务程序,修改中断向量表为了方便代码移植,在Includes.h文件中做了如下定义:#defineEnableInterrupts()asm(CLI)//开放总中断#defineDisableInterrupts()asm(SEI)//禁止总中断AW60的中断编程的可概括为下述3个步骤:新建(或者复制)一个isr.c文件,并加入工程中定义中断向量表(复制isr.c的应修改中断向量表)定义ISR并在中断向量表中填入相应ISR的名称5.4.5AW60的中断编程示例以SCI1接收中断为例,实现以下功能:主程序每隔1秒让SCI1模块向PC机发送用于握手的字符串“Hello!World!”;同时,串口等待接收从PC机发来的数据,一旦接到数据,马上将该数据回发给PC机。串口接收程序使用中断来实现,中断处理程序执行完毕后,又回到主程序,继续每隔1秒钟向PC机发送一遍“Hello!World!”第5章习题1.简要阐述异步串行通信涉及的主要基本概念。2.表征串行通信速度的物理量是什么?串行通信的传输速度有限制吗?3.MCU与PC之间进行串行通信,为什么要进行电平转换?如何进行电平转换?4.给出SCI编程的通用模型。5.简述中断的作用与处理过程。6.S08系列MCU都有哪些中断源?7.S08系列MCU的中断执行过程分为哪几个步骤?8.给出AW60中断编程框架与基本步骤。9.用一种高级语言实现PC方串行数据收发的通用程序(要求:从PC方发送数据A到MCU,MCU收到后,判断是否是A,若是,回发给PC机,在PC机显示“串行口正
本文标题:串行通信接口SCI.
链接地址:https://www.777doc.com/doc-2726660 .html