《串行通信》PPT课件.ppt_第1页
《串行通信》PPT课件.ppt_第2页
《串行通信》PPT课件.ppt_第3页
《串行通信》PPT课件.ppt_第4页
《串行通信》PPT课件.ppt_第5页
已阅读5页,还剩92页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章 串行通信,一、 通信概念介绍 二、 简单的单工串行通信举例 三、 UART异步串行接口应用 四、 SPI串行接口应用 五、 I2C串行总线应用 六、 附录 - RS-232标准和RS-485标准,一、通信的基本概念,微处理器与外设交换数据的过程中可选择以下两种方式: 并行通信 : 数据的各个数位同时传送; 传输速度快,信息率高; 占用的引脚资源多,需要的电缆多,成本高; 远距离通信时数据的可靠性和抗干扰性下降。 串行通信 : 数据按照位顺序一位一位传送 。 传输距离长,抗干扰性强; 占用的引脚资源少,成本低。,1.1 串行通信方式,通信双方只要约定好通信格式和通信速度即可通信。 串行通信方式可分为两类: 异步通信: 在异步串行通信中没有同步时钟信号。 同步通信: 在同步串行通信中数据传送受到同步时钟的控制。,1.2 异步通信,异步通信中,微处理器与外设之间必须有两项规定。 第一项规定:双方通信时采用怎样的数据格式。 例如UART串行通信双方规定:用ASCII编码,字符为7位,加一个偶校验位、一个起始位以及一个停止位,则一个字符总共由10位组成,形成的数据格式如图所示。,第二项规定:即双方通信过程中每发送一个数位需要多长的时间。在有些场合也称之为波特率,即每秒钟传送的二进制位数(bps)。 数据传送的速率为120字符/秒,每一个字符是10位,则波特率为1200bps。 PC串口:115200bps 921600bps Modem:19200bps 工业场合:4800bps UART和1-Wire通信标准就是常见的异步通信。在异步通信中发送器和接收器不必用同一个时钟,只要求各局部时钟同一标称频率(波特率)。,1.3 同步通信,在大量数据传送时,采用通信双方(发送器、接收器)在同一个时钟控制下传输数据的同步通信 。 同步通信是先将许多的字符聚集成一字符块,再将每块信息(常称为信息帧)之前加上12个同步字符,接着再加适当的错误检测数据到字符块,最后才传送出去。,注意:在同步通信时,数据上没有字符传输时,必须发送专用的空闲字符或是同步字符。,冗余:把传输的数据位当做被除数,发送器本身产生一个固定的除数, 前者除以后者得到的余数即为冗余字符。,1.4 串行通信制式,在单工制式下,数据只能从发送站向接收站传送。如图: 在半双工制式下,数据能双向传送,但是不能同时在两个方向上传送。如图: 全双工制式下,接收数据和发送数据占用不同的线路。全双工通信可以同时发送和接收。如图:,在串行通信中数据是在两个站之间进行传送的,按照数据传送方向,串行通信可分为单工、半双工和全双工3种制式。,1.5 串行通信分类,串行通信标准有许多,下面仅对部分常见的串行通信标准进行简单介绍 。,二、最简单的单工串行通信举例,与外设串行通信过程中,数据是一位一位依次顺序传送的;而在微处理器内部,数据是并行处理和传送的。 当微处理器发送数据到外设时,必须要先把并行的数据转换为串行数据再传送;当微处理器接收来自外设的数据时,必须要先把接收到的串行数据转换为并行数据才能处理。 这种并/串之间的转换既可用硬件实现也可用软件实现。 本小节以74LS164芯片为例,介绍如何用软件方法实现数据的串并转换。(ARM与74LS164之间的串行通信),1.1 实验目的与内容,实验目的:学会用软件方法模拟串行通信的时序,完成串行通信;深刻理解串行通信的原理,掌握时序分析的基本方法。 实验内容:完成ARM芯片与74LS164芯片之间的串行通信,利用LED灯显示传输的数据;在完成基本通信的实验基础上,实现流水灯效果。,1.2.1 实验原理分析,A、B:串行数据输入端。 Clock:时钟输入端。 Clear:清零端。低电平有效。 QAQH:数据输出引脚。,1.2.2 74LS164真值表,74LS164的时钟是由ARM处理器产生,每来1个上升沿74LS164就接收1位数据。 假设要使QAQH=10110011,则ARM要发送一串数据10110011给A、B输入端,并产生相应的时钟信号。如下图:,1.3 电路原理图,#define LS164_DATA (125) /LS164_DATA=0x0200 0000 #define LS164_CLK (129) /LS164_CLK=0x2000 0000 #define LS164_CLR (117) /LS164_CLR=0x0002 0000,74LS164通过ARM的3个I/O脚:P1.17、P3.29、P0.25,分别控制74LS164芯片的清零端口(CLR)、时钟端口(CLK)和数据端口(DATA),引脚定义如下:,1.4.1程序清单-初始化子程序,/* *名称: void LS164_Init(void) *功能: 初始化子程序。 *入口参数: 无 *出口参数: 无 */ void LS164_Init(void) PINSEL1 = PINSEL1 / 设置P1.17为输出 ,1.4.2 程序清单-发送数据子程序,void LS164_SendData (uint8 data) uint8 j; /定义一个8位无符号整型变量j IO1CLR = LS164_CLR; /74LS164输出清零 IO1SET = LS164_CLR; /-模拟时钟信号,循环8次完成数据传送- for(j=0; j=1; /data右移一位 IO3SET = LS164_CLK; /向74LS164发送一个高电平时钟信号 IO3CLR = LS164_CLK; ,1.4.3程序清单-主程序,uint8 const LS164_TAB32=0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F, 0xFF,0x7F,0x3F, 0x1F,0x0F,0x07,0x03,0x01,0x00,0x81,0x42,0x24, 0x18,0x3c,0x7e,0xff,0x00,0xff,0x00,0x55, 0xaa,0x55, 0xaa,0x00; /* * 名称:main() * 功能:通过64LS164控制LED灯,实现流水灯 */ int main (void) uint8 i; LS164_Init(); / 引脚初始化 while(1) /-发送数据- for(i=1;i32;i+) LS164_SendData(LS164_TABi); DelayMS(100); /大约延时100毫秒,详见第一章蜂鸣器控制程序 return(0); ,1.5 实验结果,观看实验板,每次由ARM处理器向74LS164芯片发送一个8位数据,LED的开关会发生相应的变化。当程序连续运行时,实验板上会出现各种灯闪烁的效果。,三、UART异步串行接口应用,UART通信标准就有专门的硬件UART,即异步接收发送器。 UART有2个对外连接的引脚:RxD、TxD: RxD是输入引脚,用于串行数据接收; TxD是输出引脚,用于串行数据发送。,1.1 硬件UART的结构框图,UART数据的接收过程示意图,UART数据的发送过程示意图,1.2 UART的功能,1传输转换功能 UART既能发送,把并行数据转换成串行数据输出;又能接收,把接收的串行数据转换成并行数据输入。,2奇偶校验功能 UART在发送时,检查每个要传送的字符中的“1” 的个数,自动在奇偶校验位上添“l” 或“0”,使之满足要求; UART在接收时,检查每个字符的各位及奇偶校验位, “1” 的个数是否满足要求。,3出错标识功能 常用的有以下三种: 奇偶错误 帧错误 溢出错误,1.3 UART通信协议,UART异步串行通信协议需要定义以下5个内容: 1起始位 2数据位 3奇偶校验位 4停止位 5波特率设置,范例如图:,1.4 UART的应用,UART一般可以应用到如下一些场合: 1.芯片间的近距离通信 2.与PC机之间的通信 3.模块之间的远距离通信,1、芯片间的近距离通信,同一块板卡上的芯片需要通信时,我们可以采用UART异步串行通信。 连接示意图 如下:,2、与PC机的通信,RS-232-C接口是PC机目前最常用的一种串行通讯接口。芯片利用UART可以与PC机进行通讯,由于接口不同从而电流不同,需要使用RS232转换器对通讯信号进行转换,芯片接RS232转换器与PC机通讯图,3、模块之间的远距离通信,RS-485接口的最大传输距离可达 3000米,最高传输速率10Mbps,且抗噪声干扰性好。 RS-485的电气特性:逻辑“1”以两线间的电压差为 +2V +6V表示;逻辑“0”以两线间的电压差为 -2V -6V表示。接口信号电平比RS-232-C降低了,该电平与TTL电平兼容,可方便与TTL 电路连接 。,RS-485通信电路示意图,RS-485接口具有多站能力,能够实现多机间远距离通信。下图是基于RS-485的多机通信系统:,1.5 LPC2220内部UART模块,UART0具有16字节发送FIFO和16字节接收FIFO。 UART0内置了波特率发生器。,UART0主要包括3个模块: UART0接收器模块(U0Rx) UART0发送器模块(U0Tx) UART0波特率发生器模块(U0RBG) UART0波特率发生器模块(U0RBG),产生UART0所使用的定时,U0BRG模块时钟源为VPB时钟(pclk),它保存了VPB时钟(pclk)的分频值。 时钟源(pclk)与除数锁存LSB寄存器(U0DLL)和除数锁存MSB寄存器(U0DLM)所定义的除数相除得到UART0模块所使用的时钟,该时钟必须为波特率的16倍。 波特率计算如下: 分频后的时钟 = pclk /(U0DLM * 256 + U0DLL) 波特率 = 分频后的时钟 / 16,问题:系统时钟(pclk)为64MHz,UART0串行通信所需要的波特率为115200bps,如何设置U0DLL和U0DLM?,除数=64MHz/(16*115200) U0DLM=除数/256=0 U0DLL=除数%256=36 注意:当U0DLM和UODLL中的值为0x0000时,系统默认为0x0001。,1.6 寄存器介绍,UART0包含10个8位寄存器。U0RBR、U0THR、U0SCR、U0DLL、U0DLM、U0IER、U0FCR、U0LCR、U0IIR、U0LSR。,除数锁存访问位DLAB=1时可以设置波特率,U0LCR线控制寄存器,U0LCR决定发送和接收数据字符的格式 。,U0LSR线状态寄存器,U0LSR为只读寄存器,它提供UART0的接收和发送模块的当前状态信息。,UART0的初始化设置程序,*名称:UART0_Init(unit32 UART_BPS) *功能:初始化串口0,设置波特率,数据位长度,停止位长度,奇偶校验类型 默认设置为8位数据位,1位停止位,无奇偶校验 *入口参数:UART_BPS *出口参数:无 * Void UART0_Init(uinit32 UART_BPS) unit16 Fdiv; PINSEL0=0x00000005; /设置P0.0(Txd)和P0.1(Rxd)连接到UART0 /*设置波特率*/ U0LCR=0x83; /DLAB=1,可设置波特率 Fdiv=(Fpclk/16)/UART_BPS; /计算分频值 U0DLM=Fdiv/256; U0DLL=Fdiv%256; /*设置数据格式/* U0LCR=0x03; /8位数据长度、1个停止位、禁止奇偶校验位,UART0初始化包括三项内容:1引脚连接功能的设置 2波特率的设置 3通信数据格式的设置,1.7 实验目的与内容,实验目的:掌握LPC2220的UART模块中各个控制寄存器的设置,并能使用UART 通信标准与PC机或其他板块进行通信。 实验内容1:使用UART0通过RS-232接口向PC机发送数据,并在PC机的超级终端上显示。 实验内容2:使用UART1通过RS485接口与另一个板块进行通信,通信数据通过8个LED灯显示。,实验1,PC机一般都会配有12个RS232串行通信接口(简称COM口),利用COM口PC机可以与外部设备实现通信连接。 本实验中,我们用ARM实验平台连接PC机。,/* * 名称:UART0_SendByte(uint8 data) * 功能:向串口发送一个字节数据,并等待发送完毕。 * 入口参数:data 要发送的字节数据 */ void UART0_SendByte(uint8 data) U0THR = data; / 发送数据 while( (U0LSR ,实验1 程序清单,实验1 程序清单,uint8 const UART0_SEND_TAB = “Oh,Succeed!n“; /* * 名称:main() * 功能:向串口UART0发送字符串“ Oh,Succeed!“ */ int main(void) uint8 *str,data; UART0_Init(115200); while(1) str = UART0_SEND_TAB; while(*str != 0) UART0_SendByte(*str+); / 向PC机发送数据 data = UART0_RcvByte(); / 等待PC发送数据 return(0); ,实验1结果,在AXD调试软件中全速运行程序,串口调试助手,将会显示一串字符“Oh,Succeed!”。,当PC台式机向实验板发送任何字符后,串口调试助手的接收窗口会再多一串字符“Oh,Succeed!”。,实验2,当设备间需要远距离通信时可以考虑采用RS485通信。,Max483是一款半双工的芯片,板卡1用于数据发送(客户端) 板卡2用于数据接收(服务器端),实验2 程序清单-服务端程序,#define DERE (110) /连接 P0.10 /* * 名称:UART1_Init(uint32 UART_BPS) * 功能:ARM处理器UART1相关引脚与功能模块的初始化 * 入口参数:UART_BPS 串口的波特率 */ void UART1_Init(uint32 UART_BPS) uint16 Fdiv; PINSEL0 = (PINSEL0 /8位字符长度、1个停止位、禁止奇偶效验 ,/* *名称: uint8 UART1_RcvByte(void) *功能: 通过RS-485接收一字节数据。 *出口参数: data 接收到的数据 */ uint8 UART1_RcvByte(void) uint8 rcv_data; IO0CLR = DERE ; /RE引脚置低,使其处于接收状态 while(U1LSR ,实验2 参考程序清单-客户端程序,void UART1_SendData(uint8 data) IO0SET = DERE ; /DE引脚置高,使Max483处于发送状态 U1THR = data ; /发送数据 while(U1LSR ,四、SPI串行接口应用,SPI是由Motorola公司提出的一种同步串行外围接口。它在速度要求不高、低功耗、需保存少量参数的智能化传感系统中得到了广泛应用。 SPI是一个全双工的同步串行接口。在数据传输过程中,总线上只能是一个主机和一个从机进行通信。,在数据传输中,主机总是向从机发送1字节的数据(MOSI),同时从机向主机发送1字节的数据(MISO)。,1.1 SPI接口的信号描述,1MISO(Master In Slave Out) 主机输入、从机输出信号。 2MOSI(Master Out Slave In) 主机输出、从机输入信号。 3SCK(Serial Clock) 串行时钟信号。 4SS(Slave Select) 从机选择信号。低电平有效。,注意: 1、主设备必须为微处理器,从设 备可以是微处理器也可以是其他带有SPI接口的芯片。 2、主设备的SS应接高电平。 3、先发送MSB,在发送LSB。 4、SCK由主设备产生。主设备和从设备必须在相同的时序下工作。,1.2 基于SPI接口的系统组成,SPI总线可在软件的控制下构成各种简单或复杂的系统。,SPI总线与多从机连接示意图,1.3 SPI接口的工作原理,SPI的基本结构相当于两个8位移位寄存器的首尾相接,构成16位的环形移位寄存器。从而实现了主机与从机的数据交换。,SPI接口的基本结构图,1.4 LPC2220内部SPI模块,LPC2220中具有两个完全独立的SPI控制器:SPI0和SPI1。其中SPI0模块有4个引脚:SCK0、SSEL0、MISO0、MOSI0,其功能如下:,一个SPI总线可以连接多个主机和多个从机,但是在同一时刻只允许有一个主机操作总线。可通过SSEL引脚设置LPC222为SPI主机或从机。,1.5 SPI数据传输,SPI接口可由CPOL和CPHA设定4种不同传输格式的时序。 CPOL决定时钟脉冲SCK的有效脉冲方式(正脉冲、负脉冲)。CPHA决定数据线MOSI什么时候输出数据或采集数据。 根据CPOL和CPHA的组合数目,一共有4种设置情况 。,4种时序下的数据传输,其中“第一位数据的输出”和“其他位数据的输出”栏是表示数据在什么时候更新输出。还需注意数据采样是上升沿还是下降沿有效。 数据与时钟的相位关系如图:,1.6 SPI寄存器,LPC的SPI内部结构框图如表所示。,SPI内部包括控制寄存器、数据寄存器、状态寄存器、时钟计数寄存器、中断标志寄存器 。具体描述见表 :,SPI控制寄存器(SPCR),SPI状态寄存器(SPSR),SPI数据寄存器(SPDR),SPI时钟寄存器(SPCCR),SPI中断标志寄存器(SPINT),1.7 SPI的使用,1主机操作 SSEL0引脚接高电平,数据传输步骤为: 设置S0PCCR寄存器,确定分频值。 设置S0PCR寄存器,控制SPI0为主机。 当有多个从机情况下,控制片选信号,选择要通信的从机。 将要发送的数据写入S0PDR寄存器,即启动SPI传输。 读取S0PSR寄存器,等待SPIF位置位。 从SPI数据寄存器中读出接收到的数据(可选)。 如果还有数据要传送,则重复第46步骤,否则取消对从机选择。第46步骤。,通过SSEL引脚的电平可以配置LPC2220为SPI主机或为SPI从机,LPC2220内部SPI支持主机操作和从机操作。下面以SPI0模块为例分别介绍。,1.7 SPI的使用,2从机操作 SSEL0引脚接低电平,数据传输步骤为: 设置S0PCR寄存器,控制SPI0为从机。不需要设置S0PCCR寄存器。 将要发送的数据写入S0PDR (可选)。 读取S0PSR寄存器,等待SPIF位置位。 从SPI数据寄存器中读出接收到的数据(可选)。 如果还有数据要传送,则跳到第2步。,74HC595芯片介绍,当SCLR为低电平时,输出端Q清零; 当SCLR=1,SCK出现上升沿时,内部寄存器移位并接收SER端发来的数据; 当RCK出现上升沿时,74HC595内部寄存器的数据输出到QAQH。 74HC595在SCK上升沿进行数据采样,因此CPOL=0,CPHA=0。,真值表,74HC595引脚图,1.8 电路原理图分析,74HC595的控制端口和SPI串行通信端口连接LPC2220的相关引脚。,并行输出端口QAQH连接到数码管上,数码管输出显示的内容完全取决于SPI0模块所传输的内容。,1.9 程序清单,/* * 名称:SPI0_SendData() * 功能:向SPI总线发送数据,并接收从机发回的数据。 * 入口参数:data 待发送的数据 * 出口参数:返回值为接收到的数据 */ uint8 SPI0_SendData(uint8 data) S0PDR = data; while( 0=(S0PSR ,/* *名称: void HC595_Init(void) *功能: 初始化引脚与SPI0模块。 *入口参数: 无 *出口参数: 无 */ void HC595_Init(void) /-引脚初始化- PINSEL0 = (PINSEL0 / 设置SPI接口模式,MSTR=1,主模式 /CPOL=0,CPHA=0,LSBF=1,LSB在前 ,#define smgA1 (122) / p2.22连接数码管的第一个位选端 uint8 const TAB10= 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x98; /- int main(void) uint8 i; HC595_Init (); /HC595初始化 /-打开数码管- IO2DIR = IO2DIR | smgA1; IO2CLR = smgA1; while(1) /-向74HC595发送数据- for(i=0;i10;i+) HC595_SendData(TABi); DelayMS(1); ,五、I2C串行总线应用,I2C BUS 是Philips公司推出的一种基于两线的芯片间串行传输总线。I2C总线采用了器件地址的硬件设置方法,通过软件寻址完全避免了器件的片选线寻址方法,从而使硬件系统具有最简单而灵活的扩展方法。 I2C总线在标准模式下,数据传输率可达100kbps,高速模式下可达400kbps。目前I2C总线被广泛应用于消费类电子产品、通信产品、仪器仪表及工业测控系统中。,1.1 基于I2C总线的系统组成,在I2C总线上只需要串行数据SDA线和串行时钟SCL线两条线。 每个器件都有一个唯一的地址以供识别,并工作在主模式或者从模式下,而且各器件都可以作为一个发送器或接收器。主模式用于初始化总线的数据传输并产生允许传输时钟信号SCL,从模式则被主器件寻址,并被动的接受和发送数据; 微控制器包含的I2C发送/接收器都可以选择作为主模式(Master)或从模式( Slave)工作。但任一时刻I2C总线上只允许一个微控制器工作在主模式下,作为主控器;而另一个微控制器必须工作在从模式下,作为被控器。,1.2 I2C总线的特点,1二线传输 2无中心主机 3软件寻址 4应答式数据传输过程 5节点可带电接入或撤出,1.3 I2C信号描述与数据传输,1起始信号和终止信号 I2C总线的时钟线SCL与数据线SDA均为双向传输线。 时钟线SCL高电平时, 数据线出现由高电平向低电平变化的启动信号,启动I2C总线; 时钟线SCL高电平时,数据线上出现由低到高的电平变化,此信号即为I2C总线的停止信号,结束I2C总线的数据传输。 起始信号和终止信号均有主机发出。,I2C总线的启动信号与停止信号,2数据信号 I2C总线在进行数据传输时,在时钟线为高电平期间,数据线上必须保持稳定的逻辑电平状态。只有在时钟线为低电平时,才允许数据线上的电平状态发生变化。,数据位的传输,3应答信号 数据发送方每发送一个字节数据后,需要得到数据接收方的一个应答信号。应答信号通过数据线(SDA)传输,与应答信号相对应的时钟(第9个时钟)由主控器产生。 如图所示,I2C总线的数据传输格式,传输的第一个8位数据为寻址字节,包括7位的被控器地址和1位方向位,接着被控器发出A(应答位),紧接着的是主控器与被控器之间数据传输和应答。在数据传输完成后,主控器要发出停止信号。 数据传输格式如图 :,读写位:1读 0写,1.4 LPC2220内部I2C模块,LPC2220内部具有I2C总线接口模块,可与连接外部标准I2C部件接口。LPC2220的I2C模块可配置为主机、从机或主/从机。LPC2220的I2C接口包含7个寄存器如表所列 :,I2C控制置位寄存器I2CONSET I2CONSET寄存器的某一位写入1,相应位将置1;对该寄存器写入0,相应位不会置0,必须向I2CONCLR寄存器写入1来实现某一位的清零操作。,I2C状态寄存器I2STAT 主发送模式下的状态寄存器 。,I2C状态寄存器I2STAT 主接收模式下的状态寄存器 。,I2C数据寄存器I2DAT,I2C从地址寄存器I2ADR,I2C的SCL时钟寄存器I2SCLH I2CSCLL,I2DAT中的数据移位总是从右至左进行:第一个发送的位是MSB,第一个接收的位也是MSB。,在主模式下,I2ADR无效。,位频率=Fpclk/(I2SCLH+I2SCLL),I2SCLH和I2SCLL的值必须大于4,在从模式下,I2SCLH和I2SCLL无效。,1.5 I2C模块的使用,LPC2220系列可配置为I2C主机和从机 具有2种模式:,主/从模式下的操作包括: 1、初始化操作 2、数据发送操作 3、数据接收操作,主模式下的初始化操作,先设置I/O口功能选择,然后设置总线的速率,再配置好I2CONSET寄存器和I2CONCLR寄存器。 配置I2CONSET寄存器和I2CONCLR寄存器主要完成以下一些任务: 1、选择主机模式(AA=0) 2、使能主I2C(I2EN=1) 3、清零某些位(SI=0,STA=0) 具体操作: 向I2CONSET寄存器写入Ox40会将I2EN置1,即使能I2C接口。 向I2CONCLR写入Ox2C 会将AA、STA和SI置0。,I2C主模式设置程序,/* *名称: I2C_Init(unit32 F_I2C) *功能: I2C模块初始化为主模式,未打开中断。 *入口参数: F_I2C初始化I2C总线速率,最大值为40K *出口参数:无 */ void I2C_Init(unit32 F_I2C) PINSELO = (PISELO & OxFFFFFOF)| Ox50; /设置I2C控制口有效 if(F_I2C 400000) F_I2C = 40000; I2SCLH = (Fpclk/ F_I2C + 1) / 2; /设置I2C时钟为F_I2C I2SCLL = (Fpclk/ F_I2C) / 2; I2CONCLR = Ox2C; I2CONSET = Ox40; /使能主I2C ,主模式下的数据发送,主模式I2C的数据发送格式见图所示,起始信号S和停止信号P用于指示串行传输的起始和结束。数据的发送每次为8位,即一字节,每发送完一个字节,主机都接收到一个应答位(是由从机回发的)。,操作步骤如下: 1、置位STA进入I2C主发送模式,I2C逻辑在总线空闲后,立即发送一个起始条件; 2、当发送起始条件后,等待SI置位(只有当SI=1时,I2DAT才能访问并保持稳定状态),此时I2STAT的状态为08H; 3、把从地址和读写操作位装入I2DAT,清零SI位,开始发送从地址和读写操作位; 4、当把从地址和读写操作位已发送并且接受到从机应答位后,SI位再次置位,现在的状态码可能为18H、20H、38H; 5、如果状态码为18H,表明主机已经接收到应答位,则可以将数据装入I2DAT寄存器,然后清零SI位,开始发送数据; 6、正确发送数据后,SI位再次置位,可能的状态码为28H,30H,此时可以根据状态码进行下一个操作。,主模式下的数据发送,/* *名称: I2C_Send() *功能: 主发送模式,与从器件进行数据交互。 *入口参数: SlaveAddr 从器件地址 pSendData 待发送的数据指针 Num 发送的数据长度 *出口参数: 1 代表发送成功; 0 代表发送失败 */ uint8 I2C_Send(unit8 SlaveAddr, uint8 *pSendData, uint32 Num) uint32 i; I2CONSET = 0x20; /发送起始位 while(I2CONSET /等待SI置位,if(I2STAT != 0x18) /未接收到应答,则发送停止位,数据传输中止。 I2CONSET = 0x10; return 0; /*发送Num个字节数据数据*/ for(i=0; iNum; i+) I2CONCLR = 0x08; /SI位清零 I2DAT = *(pSendData + i); while(I2CONSET ,主模式下的数据接收,主机所接收的数据字节来自从发送器(即从机) ,起始和停止条件用于指示串行传输的起始和结束。第一个发送的数据包含接收器件的从地址(7位)和读写操作位(1位)。,操作步骤如下: 1、置位STA进入I2C主接收模式,I2C逻辑在总线空闲后,立即发送一个起始条件; 2、当发送起始条件后,等待SI置位(只有当SI=1时,I2DAT才能访问并 保持稳定状态),此时I2STAT的状态为08H; 3、清零SI位,把从地址和读写操作位装入I2DAT,开始发送从地址和读写操作位; 4、当把从地址和读写操作位已发送并且接受到从机应答位后,SI位再次置位,现在的状态码可能为38H、40H、48H; 5、如果状态码为40H,表明主机已经接收到应答位,设置AA位,用来控制接收数据后产生应答位还是非应答位,然后清零SI位,开始接收数据; 6、正确发送数据后,SI位再次置位,可能的状态码为50H、58H,此时可以根据状态码进行下一个操作。,从模式下的初始化操作,LPC2220系列器件配置为I2C从机时,I2C主机可以对它进行读/写操作。要初始化从接收模式,并向I2CONSET写入0x44实现I2C使能和AA位置1,向I2CONCLR写入0x28清零起始位和中断标识,即可等待主机访问。 通常初始化程序中加入了中断的初始化。 I2C总线时钟信号是由主机产生,所以从机不用初始化I2SCLH和I2SCLL寄存器。,I2C从模式初始化设置,/* *名称: I2C_SlaveInit() *功能:从模式I2C初始化,包括初始化其中断为向量IRQ中断。 *入口参数: adr 本从机地址 *出口参数:无 */ void I2C_Slavlnit(uit8 adr) PINSELO = (PINSELO & OxFFFFFFOF) | Ox50; /设置I2C控制口有效 I2ADR = adr&OxFE; /设置从机地址 I2CONCLR = 0x28; I2CONSET = Ox44; /I2C配置为从机模式 /*设置I2C中断允许*/ VICIntselect = OxOOOOOOOO; /设置所有通道为IRQ中断 VICVectCntl0 = Ox29; /I2C通道分配到IRQ slot 0,即优先级最高 VICVectAddr0 = (int)IRQ_I2C; /设置I2C中断向量地址 VICIntEnale = Ox0200; /使能I2C中断 ,从模式下的数据发送,当主机访问从机时,若读写操作位为1(读操作),则从机进入从发送模式,向主机发送数据,并等待主机的应答信号。,从模式下的数据接收,当主机访问从机时,若读写操作位为0(写操作),则从机进入从接收模式,接收主机发送 过来的数据,并产生应答信号。,六、附录 - RS-232标准,RS-232标准(协议)的全称是EIA-RS-232标准。它是一个全双工的通信标准。这些标准都是在RS-232标准的基础上经过改进而形成的。 RS-323C标准是美国EIA(电子工业联合会)与BELL等公司一起开发的1969年公布的通信协议。它适合于数据传输速率在020000b/s范围内的通信。这个标准对串行通信接口的有关问题都作了明确规定。,RS-232C标准它早期被应用在计算机与调制解调器(MODEM)的连接控制,MODEM再

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论