版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1.1 1.1 串行通信方式 通信双方只要约定好通信格式和通信速度即可通信。 串行通信方式可分为两类:异步通信:在异步串行通信中没有同步时钟信号。 同步通信:在同步串行通信中数据传送受到同步时钟的控制。 第1页/共96页第一页,编辑于星期日:八点 五十八分。1.2 1.2 异步通信 异步通信中,微处理器与外设之间必须有两项规定。 第一项规定:双方通信时采用怎样的数据格式。 例如UART串行通信双方规定:用ASCII编码,字符为7位,加一个偶校验位、一个起始位以及一个停止位,则一个字符总共由10位组成,形成的数据格式如图所示。第2页/共96页第二页,编辑于星期日:八点 五十八分。 第二项规定:即
2、双方通信过程中每发送一个数位需要多长的时间。在有些场合也称之为波特率,即每秒钟传送的二进制位数(bps)。 数据传送的速率为120字符/秒,每一个字符是10位,则波特率为1200bps。 PC串口:115200bps 921600bps Modem:19200bps 工业场合:4800bps UART和1-Wire通信标准就是常见的异步通信。在异步通信中发送器和接收器不必用同一个时钟,只要求各局部时钟同一标称频率(波特率)。第3页/共96页第三页,编辑于星期日:八点 五十八分。1.3 1.3 同步通信 在大量数据传送时,采用通信双方(发送器、接收器)在同一个时钟控制下传输数据的同步通信 。 同
3、步通信是先将许多的字符聚集成一字符块,再将每块信息(常称为信息帧)之前加上12个同步字符,接着再加适当的错误检测数据到字符块,最后才传送出去。 注意:在同步通信时,数据上没有字符传输时,必须发送专用的空闲字符或是同步字符。 n冗余:把传输的数据位当做被除数,发送器本身产生一个固定的除数,前者除以后者得到的余数即为冗余字符。第4页/共96页第四页,编辑于星期日:八点 五十八分。1.4 1.4 串行通信制式 在单工制式下,数据只能从发送站向接收站传送。如图: 在半双工制式下,数据能双向传送,但是不能同时在两个方向上传送。如图: 全双工制式下,接收数据和发送数据占用不同的线路。全双工通信可以同时发送
4、和接收。如图:在串行通信中数据是在两个站之间进行传送的,按照数据传送方向,串行通信可分为单工、半双工和全双工3种制式。第5页/共96页第五页,编辑于星期日:八点 五十八分。1.5 1.5 串行通信分类 串行通信标准有许多,下面仅对部分常见的串行通信标准进行简单介绍 。串行通信标准引脚引脚说明通信方式通信制式UARTTXD、RXD、GND(三线)TXD:发送端RXD:接收端异步全双工1-WireDQ (一线)DQ:发送/接收端异步半双工SPISCK、MISO、MOSI(三线)SCK:同步时钟MISO:主机输入,从机输出MOSI:主机输出,从机输入同步全双工I2CSCL、SDA(二线)SCL:同步
5、时钟 SDA:数据输入/输出端同步半双工第6页/共96页第六页,编辑于星期日:八点 五十八分。二、最简单的单工串行通信举例 与外设串行通信过程中,数据是一位一位依次顺序传送的;而在微处理器内部,数据是并行处理和传送的。 当微处理器发送数据到外设时,必须要先把并行的数据转换为串行数据再传送;当微处理器接收来自外设的数据时,必须要先把接收到的串行数据转换为并行数据才能处理。 这种并/串之间的转换既可用硬件实现也可用软件实现。 本小节以74LS164芯片为例,介绍如何用软件方法实现数据的串并转换。(ARM与74LS164之间的串行通信)第7页/共96页第七页,编辑于星期日:八点 五十八分。1.1 1
6、.1 实验目的与内容 实验目的:学会用软件方法模拟串行通信的时序,完成串行通信;深刻理解串行通信的原理,掌握时序分析的基本方法。 实验内容:完成ARM芯片与74LS164芯片之间的串行通信,利用LED灯显示传输的数据;在完成基本通信的实验基础上,实现流水灯效果。第8页/共96页第八页,编辑于星期日:八点 五十八分。实验原理分析 A、B:串行数据输入端。 Clock:时钟输入端。 Clear:清零端。低电平有效。 QAQH:数据输出引脚。ClearClock74LS 164238745691011121314ABQAVCCQBQCQDGNDQHQGQFQE1第9页/共96页第九页,编辑于星期日:
7、八点 五十八分。 74LS164真值表输入输入 输出输出 Clear ClockA BQA QB QHLXX X LLL HLX X H H H HHH H L X LLL H X L LLL 第10页/共96页第十页,编辑于星期日:八点 五十八分。 74LS164的时钟是由ARM处理器产生,每来1个上升沿74LS164就接收1位数据。 假设要使QAQH=10110011,则ARM要发送一串数据10110011给A、B输入端,并产生相应的时钟信号。如下图: 第11页/共96页第十一页,编辑于星期日:八点 五十八分。1.3 1.3 电路原理图#define LS164_DATA (125)/LS
8、164_DATA=0 x0200 0000#define LS164_CLK (129) /LS164_CLK=0 x2000 0000#define LS164_CLR (117) /LS164_CLR=0 x0002 0000n74LS164通过ARM的3个I/O脚:P1.17、P3.29、P0.25,分别控制74LS164芯片的清零端口(CLR)、时钟端口(CLK)和数据端口(DATA),引脚定义如下:第12页/共96页第十二页,编辑于星期日:八点 五十八分。程序清单-初始化子程序/*名称: void LS164_Init(void)*功能: 初始化子程序。*入口参数:无*出口参数:无*
9、/void LS164_Init(void)PINSEL1 = PINSEL1 & 0 xfff3ffff; / 设置Ls164引脚LS164_DATA(P0.25)为GPIOPINSEL2 = PINSEL2 & 0 xffffffb7; / 设置Ls164引脚LS164_CLK (P3.29)为GPIO / 设置Ls164引脚LS164_CLR(P1.17)为GPIO/- 设置各引脚输出方向都为输出-IO0DIR = IO0DIR | LS164_DATA;/ 设置P0.25为输出IO3DIR = IO3DIR | LS164_CLK;/ 设置P3.29为输出IO1DIR
10、= IO1DIR | LS164_CLR;/ 设置P1.17为输出第13页/共96页第十三页,编辑于星期日:八点 五十八分。程序清单-发送数据子程序void LS164_SendData (uint8 data)uint8 j;/定义一个8位无符号整型变量jIO1CLR = LS164_CLR; /74LS164输出清零IO1SET = LS164_CLR; /-模拟时钟信号,循环8次完成数据传送-for( j=0; j=1;/data右移一位IO3SET = LS164_CLK;/向74LS164发送一个高电平时钟信号IO3CLR = LS164_CLK;第14页/共96页第十四页,编辑于星
11、期日:八点 五十八分。程序清单-主程序uint8 const LS164_TAB32=0 x00,0 x01,0 x03,0 x07,0 x0F,0 x1F,0 x3F,0 x7F, 0 xFF,0 x7F,0 x3F, 0 x1F,0 x0F,0 x07,0 x03,0 x01,0 x00,0 x81,0 x42,0 x24, 0 x18,0 x3c,0 x7e,0 xff,0 x00,0 xff,0 x00,0 x55, 0 xaa,0 x55, 0 xaa,0 x00; /* * 名称:main() * 功能:通过64LS164控制LED灯,实现流水灯 */ int main (void
12、) uint8 i; LS164_Init(); / 引脚初始化 while(1) /-发送数据- for(i=1;i32;i+) LS164_SendData(LS164_TABi);DelayMS(100); /大约延时100毫秒,详见第一章蜂鸣器控制程序 return(0); 第15页/共96页第十五页,编辑于星期日:八点 五十八分。1.5 1.5 实验结果 观看实验板,每次由ARM处理器向74LS164芯片发送一个8位数据,LED的开关会发生相应的变化。当程序连续运行时,实验板上会出现各种灯闪烁的效果。第16页/共96页第十六页,编辑于星期日:八点 五十八分。三、UART异步串行接口应
13、用 UART通信标准就有专门的硬件UART,即异步接收发送器。 UART有2个对外连接的引脚:RxD、TxD: RxD是输入引脚,用于串行数据接收; TxD是输出引脚,用于串行数据发送。 第17页/共96页第十七页,编辑于星期日:八点 五十八分。1.1 硬件UART的结构框图 第18页/共96页第十八页,编辑于星期日:八点 五十八分。 UART数据的接收过程示意图nUART数据的发送过程示意图第19页/共96页第十九页,编辑于星期日:八点 五十八分。1.2 1.2 UART的功能1传输转换功能 UART既能发送,把并行数据转换成串行数据输出;又能接收,把接收的串行数据转换成并行数据输入。2奇偶
14、校验功能 UART在发送时,检查每个要传送的字符中的“1” 的个数,自动在奇偶校验位上添“l” 或“0”,使之满足要求; UART在接收时,检查每个字符的各位及奇偶校验位, “1” 的个数是否满足要求。3出错标识功能常用的有以下三种:l奇偶错误l帧错误l溢出错误第20页/共96页第二十页,编辑于星期日:八点 五十八分。1.3 1.3 UART通信协议 UART异步串行通信协议需要定义以下5个内容:1起始位 2数据位3奇偶校验位 4停止位5波特率设置n 范例如图:第21页/共96页第二十一页,编辑于星期日:八点 五十八分。1.4 1.4 UART的应用 UART一般可以应用到如下一些场合: 1.
15、芯片间的近距离通信 2.与PC机之间的通信 3.模块之间的远距离通信第22页/共96页第二十二页,编辑于星期日:八点 五十八分。1、芯片间的近距离通信 同一块板卡上的芯片需要通信时,我们可以采用UART异步串行通信。 连接示意图 如下:第23页/共96页第二十三页,编辑于星期日:八点 五十八分。2、与PC机的通信 RS-232-C接口是PC机目前最常用的一种串行通讯接口。芯片利用UART可以与PC机进行通讯,由于接口不同从而电流不同,需要使用RS232转换器对通讯信号进行转换 芯片接RS232转换器与PC机通讯图 第24页/共96页第二十四页,编辑于星期日:八点 五十八分。3、模块之间的远距离
16、通信 RS-485接口的最大传输距离可达 3000米,最高传输速率10Mbps,且抗噪声干扰性好。 RS-485的电气特性:逻辑“1”以两线间的电压差为 +2V +6V表示;逻辑“0”以两线间的电压差为 -2V -6V表示。接口信号电平比RS-232-C降低了,该电平与TTL电平兼容,可方便与TTL 电路连接 。RS-485通信电路示意图第25页/共96页第二十五页,编辑于星期日:八点 五十八分。n RS-485接口具有多站能力,能够实现多机间远距离通信。下图是基于RS-485的多机通信系统:第26页/共96页第二十六页,编辑于星期日:八点 五十八分。1.5 1.5 LPC2220内部UART
17、模块 UART0具有16字节发送FIFO和16字节接收FIFO。 UART0内置了波特率发生器。 第27页/共96页第二十七页,编辑于星期日:八点 五十八分。 UART0主要包括3个模块: UART0接收器模块(U0Rx) UART0发送器模块(U0Tx) UART0波特率发生器模块(U0RBG) UART0波特率发生器模块(U0RBG),产生UART0所使用的定时,U0BRG模块时钟源为VPB时钟(pclk),它保存了VPB时钟(pclk)的分频值。 时钟源(pclk)与除数锁存LSB寄存器(U0DLL)和除数锁存MSB寄存器(U0DLM)所定义的除数相除得到UART0模块所使用的时钟,该时
18、钟必须为波特率的16倍。 波特率计算如下: 分频后的时钟 = pclk /(U0DLM * 256 + U0DLL) 波特率 = 分频后的时钟 / 16第28页/共96页第二十八页,编辑于星期日:八点 五十八分。问题:系统时钟(pclk)为64MHz,UART0串行通信所需要的波特率为115200bps,如何设置U0DLL和U0DLM?除数=64MHz/(16*115200)U0DLM=除数/256=0U0DLL=除数%256=36n注意:当U0DLM和UODLL中的值为0 x0000时,系统默认为0 x0001。第29页/共96页第二十九页,编辑于星期日:八点 五十八分。1.6 1.6 寄存
19、器介绍 UART0包含10个8位寄存器。U0RBR、U0THR、U0SCR、U0DLL、U0DLM、U0IER、U0FCR、U0LCR、U0IIR、U0LSR。名称描述访问权限地址复位值U0RBR接收缓冲寄存器只读0 xE000 C000未定义U0THR发送缓冲寄存器只写0 xE000 C000未定义U0IER中断使能寄存器读/写 0 xE000 C0040U0IIR中断标识寄存器只读0 xE000 C0080 x01UOFCRFIFO控制寄存器只写0 xE000 C0080U0LCR线控制寄存器读/写0 xE000 C00C0UOLSR线状态寄存器只读0 xE000 C0140 x60U0S
20、CR高速缓存寄存器读/写0 xE000 C01C0U0DLL除数锁存(低8位)寄存器读/写0 xE000 C0000 x01UODLM除数锁存(高8位)寄存器读/写0 xE000 C0040除数锁存访问位DLAB=1时可以设置波特率第30页/共96页第三十页,编辑于星期日:八点 五十八分。U0LCR线控制寄存器 U0LCR决定发送和接收数据字符的格式 。U0LCR功能描述复位值1:0字长度选择00:5位字符长度 01:6位字符长度10:7位字符长度 11:8位字符长度02停止位0:1个停止位1:2个停止位03奇偶使能0:禁止奇偶产生和校验1:使能奇偶产生和校验05:4奇偶选择00:奇数 01:
21、偶数10:强制为1 11:强制为006间隔控制0:禁止间隔发送1:使能间隔发送当该位为1时,输出引脚UART0 TxD强制为逻辑007除数锁存访问位DLAB0:禁止访问除数锁存寄存器1:使能访问除数锁存寄存器0第31页/共96页第三十一页,编辑于星期日:八点 五十八分。U0LSR线状态寄存器 U0LSR为只读寄存器,它提供UART0的接收和发送模块的当前状态信息。 U0LSR功能描述复位值0接收数据就绪(RDR)0:U0RBR为空1:U0RBR包含有效数据01溢出错误(OE)0:溢出错误状态未激活1:溢出错误状态激活02奇偶错误(PE)0:奇偶错误状态未激活1:奇偶错误状态激活03帧错误(FE
22、)0:帧错误状态未激活1:帧错误状态激活04间隔中断(BI)0:间隔中断状态未激活1:间隔中断状态激活05发送保持寄存器(THRE)0:U0THR包含有效数据1:U0THR为空16发送器(THRE)0:U0THR/U0TSR包含有效数据1:U0THR/U0TSR为空17Rx FIFO错误(RXFE)0:U0RBR中没有UART Rx错误,或U0FCR的bit0为01:U0RBR中有UART Rx错误(至少有一个错误)0第32页/共96页第三十二页,编辑于星期日:八点 五十八分。UART0的初始化设置程序*名称:UART0_Init(unit32 UART_BPS)*功能:初始化串口0,设置波特
23、率,数据位长度,停止位长度,奇偶校验类型 默认设置为8位数据位,1位停止位,无奇偶校验*入口参数:UART_BPS*出口参数:无*Void UART0_Init(uinit32 UART_BPS) unit16 Fdiv; PINSEL0=0 x00000005; /设置P0.0(Txd)和P0.1(Rxd)连接到UART0 /*设置波特率*/ U0LCR=0 x83; /DLAB=1,可设置波特率 Fdiv=(Fpclk/16)/UART_BPS; /计算分频值 U0DLM=Fdiv/256; U0DLL=Fdiv%256; /*设置数据格式/* U0LCR=0 x03; /8位数据长度、1
24、个停止位、禁止奇偶校验位 UART0初始化包括三项内容:1引脚连接功能的设置 2波特率的设置 3通信数据格式的设置 第33页/共96页第三十三页,编辑于星期日:八点 五十八分。1.7 1.7 实验目的与内容 实验目的:掌握LPC2220的UART模块中各个控制寄存器的设置,并能使用UART 通信标准与PC机或其他板块进行通信。 实验内容1:使用UART0通过RS-232接口向PC机发送数据,并在PC机的超级终端上显示。 实验内容2:使用UART1通过RS485接口与另一个板块进行通信,通信数据通过8个LED灯显示。 第34页/共96页第三十四页,编辑于星期日:八点 五十八分。实验1 PC机一般
25、都会配有12个RS232串行通信接口(简称COM口),利用COM口PC机可以与外部设备实现通信连接。 本实验中,我们用ARM实验平台连接PC机。第35页/共96页第三十五页,编辑于星期日:八点 五十八分。/* 名称:UART0_SendByte(uint8 data)* 功能:向串口发送一个字节数据,并等待发送完毕。* 入口参数:data要发送的字节数据*/void UART0_SendByte(uint8 data) U0THR = data; / 发送数据 while( (U0LSR&0 x40)=0 ); / 等待数据发送完毕/* 名称:uint8 UART0_RcvByte()
26、* 功能: 接收一个字节数据。* 出口参数:接收到的数据*/uint8 UART0_RcvByte() uint8 rcv_data;while(U0LSR & 0 x01)= 0);/当U0RBR中没有数据就一直等待rcv_data = U0RBR;return(rcv_data);实验1 程序清单 第36页/共96页第三十六页,编辑于星期日:八点 五十八分。实验1 程序清单 uint8 const UART0_SEND_TAB = Oh,Succeed!n;/* 名称:main()* 功能:向串口UART0发送字符串 Oh,Succeed!*/int main(void) uint
27、8 *str,data; UART0_Init(115200); while(1) str = UART0_SEND_TAB;while(*str != 0) UART0_SendByte(*str+); / 向PC机发送数据data = UART0_RcvByte();/ 等待PC发送数据 return(0);第37页/共96页第三十七页,编辑于星期日:八点 五十八分。实验1结果在AXD调试软件中全速运行程序,串口调试助手,将会显示一串字符“Oh,Succeed!”。当PC台式机向实验板发送任何字符后,串口调试助手的接收窗口会再多一串字符“Oh,Succeed!”。第38页/共96页第三十八
28、页,编辑于星期日:八点 五十八分。实验2 当设备间需要远距离通信时可以考虑采用RS485通信。Max483是一款半双工的芯片板卡1用于数据发送(客户端)板卡2用于数据接收(服务器端)第39页/共96页第三十九页,编辑于星期日:八点 五十八分。实验2 程序清单-服务端程序#define DERE (110) /连接 P0.10/* 名称:UART1_Init(uint32 UART_BPS)* 功能:ARM处理器UART1相关引脚与功能模块的初始化* 入口参数:UART_BPS 串口的波特率*/ void UART1_Init(uint32 UART_BPS) uint16 Fdiv; PINS
29、EL0 = (PINSEL0 & 0 xfff0ffff)|(0 x05 16); /将 p0.8 P0.9设置为TxD1 RxD1功能 IO0DIR = IO0DIR | DERE ; /将连接 DE/RE 引脚的GPIO设置为输出 /-设置波特率- U1LCR = 0 x83; / DLAB = 1,可设置波特率 Fdiv = (Fpclk / 16) / UART_BPS; / 设置波特率 U1DLM = Fdiv / 256; U1DLL = Fdiv % 256; /-设置数据格式- U1LCR = 0 x03;/8位字符长度、1个停止位、禁止奇偶效验 第40页/共96页第四
30、十页,编辑于星期日:八点 五十八分。/*名称: uint8 UART1_RcvByte(void)*功能: 通过RS-485接收一字节数据。*出口参数: data接收到的数据*/uint8 UART1_RcvByte(void) uint8 rcv_data;IO0CLR = DERE ; /RE引脚置低,使其处于接收状态while(U1LSR & 0 x01)= 0);/当U0RBR中没有数据就一直等待rcv_data = U1RBR;return(rcv_data);/* 名称:main()* 功能:接收RS485发送过来的数据,根据接收的数据控制LED灯的显示*/int main
31、(void) uint8 data; UART1_Init(115200); while(1) data = UART1_RcvByte(); / 接收一字节数据,没有接收则等待 LS164_SendData(data);/ 控制LED灯显示 return(0);第41页/共96页第四十一页,编辑于星期日:八点 五十八分。实验2 参考程序清单-客户端程序void UART1_SendData(uint8 data) IO0SET = DERE ; /DE引脚置高,使Max483处于发送状态 U1THR = data ; /发送数据 while(U1LSR & 0 x40) = 0) ;
32、 /等待数据发送完毕 uint8 const UART1_SEND_TAB = 1,2,3,4,5,6,7,8,7,6,5,4,3,2,1;int main(void) uint8 i; UART1_Init(115200); for(i=0; i15; i+) UART1_SendData(UART1_SEND_TABi);/ 发送一字节数据 DelayMS(2000);/ 软件延时 return(0);第42页/共96页第四十二页,编辑于星期日:八点 五十八分。四、SPI串行接口应用 SPI是由Motorola公司提出的一种同步串行外围接口。它在速度要求不高、低功耗、需保存少量参数的智能化
33、传感系统中得到了广泛应用。 SPI是一个全双工的同步串行接口。在数据传输过程中,总线上只能是一个主机和一个从机进行通信。n在数据传输中,主机总是向从机发送1字节的数据(MOSI),同时从机向主机发送1字节的数据(MISO)。第43页/共96页第四十三页,编辑于星期日:八点 五十八分。1.1 1.1 SPI接口的信号描述 1MISO(Master In Slave Out)主机输入、从机输出信号。 2MOSI(Master Out Slave In)主机输出、从机输入信号。 3SCK(Serial Clock)串行时钟信号。 4SS(Slave Select) 从机选择信号。低电平有效。注意:1
34、、主设备必须为微处理器,从设 备可以是微处理器也可以是其他带有SPI接口的芯片。2、主设备的SS应接高电平。3、先发送MSB,在发送LSB。4、SCK由主设备产生。主设备和从设备必须在相同的时序下工作。第44页/共96页第四十四页,编辑于星期日:八点 五十八分。1.21.2 基于SPI接口的系统组成 SPI总线可在软件的控制下构成各种简单或复杂的系统。SPI总线与多从机连接示意图 第45页/共96页第四十五页,编辑于星期日:八点 五十八分。1.3 1.3 SPI接口的工作原理 SPI的基本结构相当于两个8位移位寄存器的首尾相接,构成16位的环形移位寄存器。从而实现了主机与从机的数据交换。 SP
35、I接口的基本结构图 第46页/共96页第四十六页,编辑于星期日:八点 五十八分。1.4 1.4 LPC2220内部SPI模块 LPC2220中具有两个完全独立的SPI控制器:SPI0和SPI1。其中SPI0模块有4个引脚:SCK0、SSEL0、MISO0、MOSI0,其功能如下:引脚名称引脚名称类型类型描述描述SCK0,SCK1输入/输出串行时钟:用于同步SPI接口间数据传输的时钟信号。该时钟信号总是由主机输出。时钟可编程为高有效或低有效。只有在数据传输时才被激活,其它任何时候都处于非激活状态或三态。SSEL0,SSEL1输入从机选择:用于指示被选择参与数据传输的从机。低电平有效。在数据处理前
36、必须为低电平并在数据传输时保持低电平。如果SSEL在数据传输过程中变为高电平,传输将被中止,并将接收到的数据丢弃。从机返回到空闲状态。配置LPC2220的SPI为主机必须选择相应的脚用作SSEL功能并保持高电平,这样才能执行主机的功能。MISO0,MISO1输入/输出主入从出:数据由从机传输到主机,单向信号。MOSI0,MOSI1输入/输出主出从入:数据由主机传输到从机,单向信号。第47页/共96页第四十七页,编辑于星期日:八点 五十八分。 一个SPI总线可以连接多个主机和多个从机,但是在同一时刻只允许有一个主机操作总线。可通过SSEL引脚设置LPC222为SPI主机或从机。第48页/共96页
37、第四十八页,编辑于星期日:八点 五十八分。1.5 1.5 SPI数据传输 SPI接口可由CPOL和CPHA设定4种不同传输格式的时序。 CPOL决定时钟脉冲SCK的有效脉冲方式(正脉冲、负脉冲)。CPHA决定数据线MOSI什么时候输出数据或采集数据。 根据CPOL和CPHA的组合数目,一共有4种设置情况 。第49页/共96页第四十九页,编辑于星期日:八点 五十八分。 4种时序下的数据传输,其中“第一位数据的输出”和“其他位数据的输出”栏是表示数据在什么时候更新输出。还需注意数据采样是上升沿还是下降沿有效。 数据与时钟的相位关系如图:CPOL/CPHACPOL/CPHA的设定的设定第一位数据的输
38、出第一位数据的输出其它位的输出其它位的输出数据采样数据采样CPOL=0,CPHA=0在第一个SCK上升沿之前SCK下降沿SCK上升沿CPOL=1,CPHA=1第一个SCK下降沿SCK下降沿SCK上升沿CPOL=1,CPHA=0在第一个SCK下降沿之前SCK上升沿SCK下降沿CPOL=0,CPHA=1第一个SCK上升沿SCK上升沿SCK下降沿第50页/共96页第五十页,编辑于星期日:八点 五十八分。1.6 1.6 SPI寄存器 LPC的SPI内部结构框图如表所示。第51页/共96页第五十一页,编辑于星期日:八点 五十八分。SPI内部包括控制寄存器、数据寄存器、状态寄存器、时钟计数寄存器、中断标志
39、寄存器 。具体描述见表 :名称名称描述描述复位值复位值SPCRSPI控制寄存器,该寄存器控制SPI的操作模式0SPSRSPI状态寄存器,反映SPI模块的当前状态0SPDRSPI数据寄存器,保存发送和接收的数据0SPCCRSPI时钟计数寄存器,用于设置SPI时钟分频值0SPINTSPI中断标志寄存器,保存SPI的中断标志0第52页/共96页第五十二页,编辑于星期日:八点 五十八分。SPI控制寄存器(SPCR)名称名称功能功能描述复位复位值值2:0保留不能写入1NA3CPHA1:数据在第二个时钟沿采样,传输从第一个时钟终开始在最后一个时钟结束0:数据在第一个时钟沿采样,传输从SSEL激活开始,在S
40、SEL无效后结束04CPOL1:SCK低有效0:SCK高有效05MSTR1:主模式0:从模式06LSBF1:数据传输低位在先0:数据传输高位在先07SPIE1:每次SPIF或 MODF置位时产生硬件中断0:SPI被禁止第53页/共96页第五十三页,编辑于星期日:八点 五十八分。SPI状态寄存器(SPSR)名称名称功能功能描述复位复位值值2:0保留不能写入1NA3ABRT1:从机终止,读取该位则清零04MODF1:模式错误,读取该位可清零MODF,再写SPI控制寄存器05ROVR1:读溢出,读取该位则清零06WCOL1:写冲突,读取该位则清零,在防伪SPI数据寄存器07SPIE1:每次SPIF或
41、 MODF置位时产生硬件中断0:SPI被禁止第54页/共96页第五十四页,编辑于星期日:八点 五十八分。SPI数据寄存器(SPDR)SPDR功能功能描述复位值复位值7:0数据SPI双向数据0SPI时钟寄存器(SPCCR)SPCCR功能功能描述复位值复位值0计数值SPI时钟计数值设定0SPI中断标志寄存器(SPINT)SPCCR功能功能描述复位值复位值0SPI中断SPI时钟计数值设定07:1保留不能写入1NA第55页/共96页第五十五页,编辑于星期日:八点 五十八分。1.7 1.7 SPI的使用1主机操作SSEL0引脚接高电平,数据传输步骤为: 设置S0PCCR寄存器,确定分频值。 设置S0PC
42、R寄存器,控制SPI0为主机。 当有多个从机情况下,控制片选信号,选择要通信的从机。 将要发送的数据写入S0PDR寄存器,即启动SPI传输。 读取S0PSR寄存器,等待SPIF位置位。 从SPI数据寄存器中读出接收到的数据(可选)。 如果还有数据要传送,则重复第46步骤,否则取消对从机选择。第46步骤。 通过SSEL引脚的电平可以配置LPC2220为SPI主机或为SPI从机,LPC2220内部SPI支持主机操作和从机操作。下面以SPI0模块为例分别介绍。第56页/共96页第五十六页,编辑于星期日:八点 五十八分。1.7 1.7 SPI的使用2从机操作SSEL0引脚接低电平,数据传输步骤为:设置
43、S0PCR寄存器,控制SPI0为从机。不需要设置S0PCCR寄存器。将要发送的数据写入S0PDR (可选)。读取S0PSR寄存器,等待SPIF位置位。从SPI数据寄存器中读出接收到的数据(可选)。如果还有数据要传送,则跳到第2步。第57页/共96页第五十七页,编辑于星期日:八点 五十八分。74HC595芯片介绍 当SCLR为低电平时,输出端Q清零; 当SCLR=1,SCK出现上升沿时,内部寄存器移位并接收SER端发来的数据;当RCK出现上升沿时,74HC595内部寄存器的数据输出到QAQH。 74HC595在SCK上升沿进行数据采样,因此CPOL=0,CPHA=0。 真值表 74HC595引脚
44、图 第58页/共96页第五十八页,编辑于星期日:八点 五十八分。1.81.8 电路原理图分析n74HC595的控制端口和SPI串行通信端口连接LPC2220的相关引脚。 n并行输出端口QAQH连接到数码管上,数码管输出显示的内容完全取决于SPI0模块所传输的内容。 第59页/共96页第五十九页,编辑于星期日:八点 五十八分。1.9 1.9 程序清单/* 名称:SPI0_SendData()* 功能:向SPI总线发送数据,并接收从机发回的数据。* 入口参数:data 待发送的数据* 出口参数:返回值为接收到的数据*/uint8 SPI0_SendData(uint8 data) S0PDR =
45、data; while( 0=(S0PSR&0 x80) ); / 等待SPIF置位,即等待数据发送完毕 return(S0PDR);第60页/共96页第六十页,编辑于星期日:八点 五十八分。/*名称: void HC595_Init(void)*功能: 初始化引脚与SPI0模块。*入口参数:无*出口参数:无*/void HC595_Init(void) /-引脚初始化-PINSEL0 = (PINSEL0 & 0 xffff00ff) | 0 x00005500; / 设置P0.4,P0.5,P0.6为SPI0引脚PINSEL2 = PINSEL2 & 0 xffff
46、ff7f;/ 设置HC595_nCS为GPIO口PINSEL2 = PINSEL2 & 0 xfffffff7;/ 设置HC595_RCK为GPIOIO3DIR = IO3DIR | (128);IO1DIR = IO1DIR | (116);IO3CLR = (128);/ 选中HC595/-SPI寄存器初始化- S0PCCR = 0 x52;/ 设置SPI时钟分频S0PCR = 0 x30; / 设置SPI接口模式,MSTR=1,主模式/CPOL=0,CPHA=0,LSBF=1,LSB在前 第61页/共96页第六十一页,编辑于星期日:八点 五十八分。#define smgA1 (1
47、22) / p2.22连接数码管的第一个位选端uint8 const TAB10= 0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x98;/-int main(void) uint8 i;HC595_Init ();/HC595初始化/-打开数码管- IO2DIR = IO2DIR | smgA1;IO2CLR = smgA1;while(1)/-向74HC595发送数据-for(i=0;i 400000) F_I2C = 40000;I2SCLH = (Fpclk/ F_I2C + 1) / 2; /设置I2C时钟为F_I2C
48、I2SCLL = (Fpclk/ F_I2C) / 2; I2CONCLR = Ox2C;I2CONSET = Ox40; /使能主I2C第77页/共96页第七十七页,编辑于星期日:八点 五十八分。主模式下的数据发送 主模式I2C的数据发送格式见图所示,起始信号S和停止信号P用于指示串行传输的起始和结束。数据的发送每次为8位,即一字节,每发送完一个字节,主机都接收到一个应答位(是由从机回发的)。第78页/共96页第七十八页,编辑于星期日:八点 五十八分。操作步骤如下:1、置位STA进入I2C主发送模式,I2C逻辑在总线空闲后,立即发送一个起始条件;2、当发送起始条件后,等待SI置位(只有当SI
49、=1时,I2DAT才能访问并保持稳定状态),此时I2STAT的状态为08H;3、把从地址和读写操作位装入I2DAT,清零SI位,开始发送从地址和读写操作位;4、当把从地址和读写操作位已发送并且接受到从机应答位后,SI位再次置位,现在的状态码可能为18H、20H、38H;5、如果状态码为18H,表明主机已经接收到应答位,则可以将数据装入I2DAT寄存器,然后清零SI位,开始发送数据;6、正确发送数据后,SI位再次置位,可能的状态码为28H,30H,此时可以根据状态码进行下一个操作。第79页/共96页第七十九页,编辑于星期日:八点 五十八分。主模式下的数据发送/*名称: I2C_Send()*功能
50、: 主发送模式,与从器件进行数据交互。*入口参数: SlaveAddr从器件地址pSendData待发送的数据指针Num发送的数据长度 *出口参数:1 代表发送成功; 0 代表发送失败*/uint8 I2C_Send(unit8 SlaveAddr, uint8 *pSendData, uint32 Num) uint32 i;I2CONSET = 0 x20;/发送起始位while(I2CONSET&0 x08) = 0) ;/等待SI置位/*发送从器件地址和读写位*/I2CONCLR = 0 x08;/SI位清零I2DAT = SlaveAddr1 & 0 xFE;whil
51、e(I2CONSET&0 x08) = 0) ; /等待SI置位第80页/共96页第八十页,编辑于星期日:八点 五十八分。if(I2STAT != 0 x18) /未接收到应答,则发送停止位,数据传输中止。 I2CONSET = 0 x10; return 0;/*发送Num个字节数据数据*/for(i=0; iNum; i+) I2CONCLR = 0 x08;/SI位清零I2DAT = *(pSendData + i);while(I2CONSET&0 x08) = 0) ; /等待SI置位if(I2STAT = 0 x30)/接收非应答位,则中断数据传输I2CONSET
52、= 0 x10; return 0; return 1; 第81页/共96页第八十一页,编辑于星期日:八点 五十八分。第82页/共96页第八十二页,编辑于星期日:八点 五十八分。主模式下的数据接收 主机所接收的数据字节来自从发送器(即从机) ,起始和停止条件用于指示串行传输的起始和结束。第一个发送的数据包含接收器件的从地址(7位)和读写操作位(1位)。第83页/共96页第八十三页,编辑于星期日:八点 五十八分。操作步骤如下: 1、置位STA进入I2C主接收模式,I2C逻辑在总线空闲后,立即发送一个起始条件;2、当发送起始条件后,等待SI置位(只有当SI=1时,I2DAT才能访问并 保持稳定状态
53、),此时I2STAT的状态为08H;3、清零SI位,把从地址和读写操作位装入I2DAT,开始发送从地址和读写操作位;4、当把从地址和读写操作位已发送并且接受到从机应答位后,SI位再次置位,现在的状态码可能为38H、40H、48H;5、如果状态码为40H,表明主机已经接收到应答位,设置AA位,用来控制接收数据后产生应答位还是非应答位,然后清零SI位,开始接收数据;6、正确发送数据后,SI位再次置位,可能的状态码为50H、58H,此时可以根据状态码进行下一个操作。第84页/共96页第八十四页,编辑于星期日:八点 五十八分。从模式下的初始化操作 LPC2220系列器件配置为I2C从机时,I2C主机可
54、以对它进行读/写操作。要初始化从接收模式,并向I2CONSET写入0 x44实现I2C使能和AA位置1,向I2CONCLR写入0 x28清零起始位和中断标识,即可等待主机访问。 通常初始化程序中加入了中断的初始化。 I2C总线时钟信号是由主机产生,所以从机不用初始化I2SCLH和I2SCLL寄存器。 第85页/共96页第八十五页,编辑于星期日:八点 五十八分。I2C从模式初始化设置/*名称: I2C_SlaveInit() *功能:从模式I2C初始化,包括初始化其中断为向量IRQ中断。 *入口参数: adr 本从机地址*出口参数:无*/void I2C_Slavlnit(uit8 adr) P
55、INSELO = (PINSELO & OxFFFFFFOF) | Ox50; /设置I2C控制口有效I2ADR = adr&OxFE;/设置从机地址I2CONCLR = 0 x28; I2CONSET = Ox44;/I2C配置为从机模式/*设置I2C中断允许*/VICIntselect = OxOOOOOOOO; /设置所有通道为IRQ中断VICVectCntl0 = Ox29; /I2C通道分配到IRQ slot 0,即优先级最高VICVectAddr0 = (int)IRQ_I2C; /设置I2C中断向量地址VICIntEnale = Ox0200; /使能I2C中断第86页/共96页第八十六页,编辑于星期日:八点 五十八分。从模式下的数据发送 当主机访问从机时,若读写操作位为1(读操作),则从机进入从发送模式,向主机发送数据,并等待主机的应答信号。第87页/共96页第八十七页,编辑于星期日:八点 五十八分。从模式下的数据接收 当主机访问从机时,若读写操作位为0(写操作),则从机进入从接收模式,接收主机发送 过来的数据,并产生应答信号。第88页/共96页第八十八页,编辑于星期日:八点 五十八分。六、附录 - RS-232标准 RS-232标准(协议)的全称是EIA-RS-232标准。它是一个全双工的通信标准。这些标准都是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人工智能与区块链 课件 第1章 人工智能与区块链融合导论
- 2026年导游资格证考试模拟试卷及答案(共七套)
- 2024-2025学年度电工通关题库及参考答案详解(精练)
- 2024-2025学年度主管护师(中级)预测复习及答案详解(名校卷)
- 2024-2025学年度医院三基考试预测复习含答案详解【轻巧夺冠】
- 2024-2025学年度全国统考教师资格考试《教育教学知识与能力(小学)》通关考试题库附参考答案详解(综合题)
- 2024-2025学年度注册核安全工程师检测卷及答案详解(真题汇编)
- 2024-2025学年度广州铁路职业技术学院单招《英语》自我提分评估带答案详解(模拟题)
- 2024-2025学年度反射疗法师大赛理论复习提分资料【综合题】附答案详解
- 2024-2025学年度三支一扶测试卷及答案详解【必刷】
- 党校住宿管理办法
- 血吸虫病健康教育课课件
- 文学常识1000题含答案
- 2025水利工程生态产品价值核算技术规范
- 鄂教版一年级心理健康全册教案1
- 2025年 四川德阳三星堆开发建设有限公司招聘考试笔试试卷附答案
- 正念冥想培训课件
- 医院内部审计培训课件
- 2025年河北省中考物理试题(含答案解析)
- 《小学教师专业发展》课件-第一章(二) 做什么样的教师
- T∕ZZB 0586-2018 汽车用等速驱动轴总成
评论
0/150
提交评论