ARM与嵌入式技术培训课件第7章.ppt

上传人:小飞机 文档编号:6501666 上传时间:2023-11-07 格式:PPT 页数:118 大小:1.84MB
返回 下载 相关 举报
ARM与嵌入式技术培训课件第7章.ppt_第1页
第1页 / 共118页
ARM与嵌入式技术培训课件第7章.ppt_第2页
第2页 / 共118页
ARM与嵌入式技术培训课件第7章.ppt_第3页
第3页 / 共118页
ARM与嵌入式技术培训课件第7章.ppt_第4页
第4页 / 共118页
ARM与嵌入式技术培训课件第7章.ppt_第5页
第5页 / 共118页
点击查看更多>>
资源描述

《ARM与嵌入式技术培训课件第7章.ppt》由会员分享,可在线阅读,更多相关《ARM与嵌入式技术培训课件第7章.ppt(118页珍藏版)》请在三一办公上搜索。

1、7.8 GPIO,LPC2200系列作为“微控制器”,其通用并行I/O口(GPIO)具有如下的特性:可以独立控制每个GPIO口的方向(输入/输出模式);可以独立设置每个GPIO的输出状态(高/低电平);所有GPIO口在复位后默认为输入状态。,7.8 GPIO,GPIO相关寄存器描述,PINSELx,IOxDIR,IOxCLR,IOxPIN,IOxSET,in,out,1,0,GPIO相关寄存器描述IOxPIN,该寄存器反映了当前引脚的状态。IOxPIN中的x对应于某一个端口,如P1口对应于IO1PIN。所以芯片存在多少个端口,就有多少个IOxPIN分别与之对应。写该寄存器会将值保存到输出寄存器

2、,具体使用稍后介绍。注意:无论引脚被设置为输入还是输出模式,都不影响引脚状态的读出。,PINSELx,IOxDIR,IOxCLR,IOxPIN,IOxSET,in,out,1,0,GPIO相关寄存器描述IOxDIR,当引脚设置为GPIO输出模式时,可使用该寄存器控制引脚的方向。向某位写入1使对应引脚作为输出功能,写入0时作为输入功能。作为输入功能时,引脚处于高阻态。,PINSELx,IOxDIR,IOxCLR,IOxPIN,IOxSET,in,out,1,0,GPIO相关寄存器描述IOxSET,当引脚设置为GPIO输出模式时,可使用该寄存器从引脚输出高电平。向某位写入1使对应引脚输出高电平。写

3、入0无效。从该寄存器读回的数据为GPIO输出寄存器的值。该值不反映外部环境对引脚的影响。,PINSELx,IOxDIR,IOxCLR,IOxPIN,IOxSET,in,out,1,0,GPIO相关寄存器描述IOxCLR,当引脚设置为GPIO输出模式时,可使用该寄存器从引脚输出低电平。向某位写入1使对应引脚输出低电平。写入0无效。注意:读取该寄存器无效,不能读回输出寄存器的值。,7.9 GPIO,使用GPIO注意要点,引脚设置为输出方式时,输出状态由IOxSET和IOxCLR中最后操作的寄存器决定;大部分GPIO输出为推挽方式(个别引脚为开漏输出),正常拉出/灌入电流均为4mA(短时间极限值40

4、mA);复位后默认所有GPIO为输入模式。,.PINSEL0.,C代码:,PINSEL0,IO0DIR,IO0CLR,IO0PIN,IO0SET,in,out,1,0,GPIO应用示例设置P0.0输出高电平,P0.0,.uint32 PinStat;PINSEL0.,C代码:,PINSEL0,IO0DIR,IO0CLR,IO0PIN,IO0SET,in,out,1,0,GPIO应用示例读取P0.0引脚状态,P0.0,IO0PIN,#define DataBus 0 xFF PINSEL0.,使用IOxSET和IOxCLR实现:,GPIO应用示例输出多位数据至IO口,在需要将多位数据同时输出到某

5、几个IO口线时,通常使用IOxSET和IOxCLR来实现,在某些情况下也可以使用IOxPIN寄存器实现。后者可以在多个IO口上直接输出0和1电平。本例将8位无符号整数变量Data的值输出到P0.0P0.7。,数据输出线:,#define DataBus 0 xFF PINSEL0.,GPIO应用示例输出多位数据至IO口,在需要将多位数据同时输出到某几个IO口线时,通常使用IOxSET和IOxCLR来实现,在某些情况下也可以使用IOxPIN寄存器实现。后者可以在多个IO口上直接输出0和1电平。本例将8位无符号整数变量Data的值输出到P0.0P0.7。,使用IOxPIN实现:,数据输出线:,7.

6、9 UART0,简介串行通信口(UART),LPC2200包含两个UART:UART0和UART1 其中UART0具有如下的特性:16字节接收FIFO和16字节发送FIFO;寄存器位置符合16C550工业标准;接收FIFO触发点可设置为1、4、8或14字节;内置波特率发生器。,7.9 UART0,使用UART0通信需要两个引脚,分别为:,1.在使用UART之前需要设置的寄存器,UART0内部结构示意图,FIFO控制,中断使能,UART0格式设置,波特率设置,2.发送数据的通道,UART0内部结构示意图,CPU内核通过VPB接口对UART0的寄存器进行读写访问,发送缓存,发送移位寄存器,3.接收

7、数据的通道,UART0内部结构示意图,接收缓存,接收移位寄存器,4.通信过程中可能影响的标志位,UART0内部结构示意图,中断标志,UART0当前状态,UART0相关寄存器描述,U0RBR,U0RSR移位寄存器从RxD0引脚接收的有效数据将被送到接收FIFO中。通过读取U0RBR寄存器可以将接收FIFO中最早接收到的字节读出,当FIFO中不再包含有效数据时,该寄存器反映接收到的最后一个有效字节数据。接收的数据不足8位时,高位用0填充。注意:U0RBR只读。访问该寄存器时,U0LCR的除数锁存访问位(DLAB)必须为0。,接收缓存寄存器,UART0相关寄存器描述,写入该寄存器的值将是发送FIFO

8、中的最高字节。访问该寄存器时,U0LCR的除数锁存访问位(DLAB)必须为0。注意:U0THR只写。它的地址与U0RBR相同,通过读/写操作予以区分。,U0THR,发送器保持寄存器,U0THR,U0TSR,TxD0,RxD0,U0LCR,U0LSR,U0IIR,U0IER,U0DLM,U0DLL,UART0相关寄存器描述,这两个寄存器决定波特率时钟的频率,而波特率时钟必须是波特率的16倍。波特率计算公式如下:BaudRate=FPCLK/(U0DLM,U0DLL16),除数锁存寄存器,注意:由于U0DLL、U0DLM寄存器与其它寄存器的地址重叠,所以在访问它们时,U0LCR的除数锁存访问位(D

9、LAB)必须为1。,UART0相关寄存器描述,中断使能寄存器,U0IER,U0IER可以控制UART0的4个中断源。其中RBR中断使能包括两个中断,一个是接收数据可用(RDA)中断,一个是接收超时中断(CTI)。稍后将对各中断源作详细介绍。,UART0相关寄存器描述,中断标识寄存器,U0IIR提供状态代码用于指示一个挂起中断的中断源和优先级。在访问U0IIR过程中,中断被冻结。如果在访问U0IIR时产生了中断,该中断将被记录,在下次访问U0IIR时可以读出,避免了中断的丢失。,U0IIR,UART0相关寄存器描述,中断标识寄存器,中断源和中断使能的关系,U0IIR,RLS中断(U0IIR3:1

10、=011),RDA中断(U0IIR3:1=010),CTI中断(U0IIR3:1=110),THRE中断(U0IIR3:1=001),UART0相关寄存器描述,中断标识寄存器,U0IIR,RLS中断,RDA中断,CTI中断,THRE中断,中断源和中断使能的关系,UART0相关寄存器描述,中断源说明,RLS中断:该中断为最高优先级。它在UART0产生了四个错误条件(溢出错误(OE)、奇偶错误(PE)、帧错误(FE)和间隔中断(BI))中的任意一个时置位。通过查看U0LSR4:1可以了解到产生该中断的错误条件。读取U0LSR时清除该中断;,UART0相关寄存器描述,中断源说明,RDA中断:该中断与

11、CTI中断并列为第二优先级。当接收的有效数据到达接收FIFO设置寄存器(U0FCR)中设置的触发点时,RDA被激活。当接收FIFO中的有效数据少于触发点时,RDA复位;,1.移位寄存器(U0RSR)从RxD0引脚接收串行数据后,送入接收FIFO中;,2.当接收FIFO中的有效数据数量到达预定的触发点时,置位RDA中断;,3.从U0RBR寄存器中读取FIFO中最早到达的数据,当FIFO中的有效数据小于预定触发点时,清零RDA中断;,DATA,UART0相关寄存器描述,中断源说明,CTI中断:该中断为第二优先级。当接收FIFO中的有效数据少于预定的触发点数量,但至少有一个字节时,如果超过接收3.5

12、4.5个字节所需要的时间仍没有接收到数据,那将触发该中断。对接收FIFO的任何操作都会清零该中断标志;,接收FIFO,触发点设置=8,U0RBR,1.移位寄存器(U0RSR)从RxD0引脚接收串行数据后,送入接收FIFO中;,2.当接收FIFO中的有效数据少于触发个数,但至少有一个时,如果长时间没有数据到达,将触发CTI中断;,3.从U0RBR中读取接收FIFO中的数据,或者有新的数据送入接收FIFO,都将清零CTI中断;,U0RSR,DATA,RxD0,UART0相关寄存器描述,中断源说明,CTI中断:该中断为第二优先级。当接收FIFO中的有效数据少于预定的触发点数量,但至少有一个字节时,如

13、果超过接收3.54.5个字节所需要的时间仍没有接收到数据,那将触发该中断。对接收FIFO的任何操作都会清零该中断标志;,接收FIFO,触发点设置=8,U0RBR,说明:“3.54.5个字节的时间”,其意思是在串口当前的波特率下,发送3.54.5个字节所需要的时间;,U0RSR,DATA,RxD0,注意:当接收FIFO中存在多个数据,从U0RBR读取数据,但是没有读完所有数据,那么在经过3.54.5个字节的时间后将触发CTI中断;,UART0相关寄存器描述,中断源说明,THRE中断:该中断为第三优先级。当发送FIFO为空并且满足一定的条件时,该中断将被触发。这些条件是:,发送FIFO,1.系统启

14、动时,虽然发送FIFO为空,但不会产生THRE中断。,DATA,U0TSR,2.在上一次发生THRE中断后,向发送FIFO中写入1个字节数据,将在延时一个字节加上一个停止位后发生THRE中断。,这是因为:如果发送移位寄存器为空,那么写入发送FIFO的数据将直接进入发送移位寄存器;,此时发送FIFO仍然为空,如果立即产生THRE中断,就会影响紧接着要写入发送FIFO的数据;,所以在发送完该字节以及一个停止位后,才产生THRE中断;,3.如果在发送FIFO中有过两个字节以上的数据,但是现在发送FIFO为空时,将立即触发THRE中断。,当THRE中断为当前有效的最高优先级中断时,往U0THR写数据,

15、或者对U0IIR的读操作,将使THRE中断复位。,UART0相关寄存器描述,FIFO控制寄存器,U0FCR,U0FCR控制UART0接收和发送FIFO的操作。,UART0相关寄存器描述,FIFO控制寄存器,U0FCR,UART0相关寄存器描述,FIFO控制寄存器,U0FCR,UART0相关寄存器描述,FIFO控制寄存器,U0FCR,UART0相关寄存器描述,FIFO控制寄存器,U0FCR,UART0相关寄存器描述,线状态控制寄存器,U0LCR,起始位,U0LCR寄存器:,U0LCR控制发送和接收数据帧的格式。,UART0相关寄存器描述,线状态控制寄存器,U0LCR,UART0相关寄存器描述,线

16、状态控制寄存器,U0LCR,UART0相关寄存器描述,线状态控制寄存器,U0LCR,UART0相关寄存器描述,线状态控制寄存器,U0LCR,UART0相关寄存器描述,线状态控制寄存器,U0LCR,UART0相关寄存器描述,线状态寄存器,U0LSR为只读寄存器,它反映了UART0接收和发送模块的状态信息。,U0LSR,UART0相关寄存器描述,线状态寄存器,U0LSR,UART0相关寄存器描述,线状态寄存器,U0LSR,UART0相关寄存器描述,线状态寄存器,U0LSR,UART0相关寄存器描述,线状态寄存器,U0LSR,UART0相关寄存器描述,线状态寄存器,U0LSR,UART0相关寄存器描

17、述,线状态寄存器,U0LSR,UART0相关寄存器描述,线状态寄存器,U0LSR,7.9 UART0,使用UART0注意要点,U0RBR与U0THR在同一地址上,但实际上是两个独立的寄存器,读操作时选择U0RBR,写操作时选择U0THR;U0DLL与U0RBR/U0THR、U0DLM与U0IER在同一地址上,通过除数访问位DLAB选择。当该位为1时,选择U0DLL和U0DLM。为0时,选择U0RBR/U0THR和U0IER;无论在U0FCR中是否使能FIFO,接收FIFO不能被禁止。关闭FIFO后,接收FIFO只有一个字节缓冲;波特率计算公式:U0DLM、U0DLL=FPCLK/(16baud

18、);,UART0应用示例操作流程,UART0应用示例初始化代码,UART0初始化代码:,#define UART_BPS 115200Void UART0_Ini(void)uint16 Fdiv;PINSEL0=0 x00000005;U0LCR=0 x83;Fdiv=(Fpclk/16)/UART_BPS;U0DLM=Fdiv/256;U0LLM=Fdiv%256;U0LCR=0 x03;,UART0应用示例初始化代码,UART0初始化代码:,#define UART_BPS 115200Void UART0_Ini(void)uint16 Fdiv;PINSEL0=0 x00000005

19、;U0LCR=0 x83;Fdiv=(Fpclk/16)/UART_BPS;U0DLM=Fdiv/256;U0LLM=Fdiv%256;U0LCR=0 x03;,UART0应用示例收发数据,void UART0_SendByte(uint8 data)U0THR=data;while(U0LSR,uint8 UART0_RcvByte(void)uint8 rcv_data;while(U0LSR,查询方式发送一字节数据:,查询方式接收一字节数据:,7.10 UART1,特性,UART1与UART0基本功能相同,但是增加了一个调制解调器(Modem)接口。所以UART1具有UART0的所有特性

20、。16字节接收FIFO和16字节发送FIFO;寄存器位置符合16C550工业标准;接收FIFO触发点可设置为1、4、8或14字节;内置波特率发生器。,UART1具有一个标准的Modem接口,这些引脚为:,使用UART1通信,UART0内部结构,UART1的结构与UART0类似,在其基础上增加了控制MODEM接口的寄存器。,UART1内部结构示意图,7.10 UART1,UART1包含12个8位寄存器,其中大部分寄存器与UART0类似,所以仅介绍不同之处。,UART1寄存器描述,7.10 UART1,中断使能寄存器,UART1寄存器描述,7.10 UART1,Modem控制寄存器,UART1寄存

21、器描述,该寄存器使能Modem的回写模式,并控制Modem的输出信号。,7.10 UART1,回写模式,UART1寄存器描述,在Modem回写模式下,发送器输出的串行数据在内部连接到接收器的串行输入端。输入脚RxD1对回写模式无影响,输出脚TxD1保持总为1的状态。4个modem输入(CTS,DSR,RI和DCD)与外部断开,并在内部与4个modem输入连接。这样连接的结果是U1MSR的高4位由U1MCR的低4位驱动。这样在回写模式下,写U1MCR的低4位就可产生modem状态中断。,Modem状态寄存器,UART1寄存器描述,该寄存器为只读,它反映Modem输入信号的状态信息。需要注意的是,

22、Mdoem信号对UART1的操作没有直接影响,Modem信号的操作是通过软件来实现的。,7.11 I2C接口,特性,LPC2200系列微控制器具有一到两个标准的I2C接口,它具有如下特性:可配置为主机、从机或主/从机;可编程时钟可实现通讯速率控制;主机从机之间双向数据传输;同时发送的主机之间进行仲裁,避免了总线数据的冲突。,7.11 I2C接口,I2C简介,I2C接口是Philips推出的一种串行总线方式,用于IC器件之间的通信。它通过SDA(串行数据线)和SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并通过软件寻址识别每个器件,而不需要片选线。I2C接口的标准传输速率为100Kb

23、it/s,最高传输速率可达400Kbit/s。,7.11 I2C接口,I2C简介电气连接,I2C总线接口均为开漏或开集电极输出,因此需要为总线增加上拉电阻Rp。,总线速率越高,总线上拉电阻就越小,100Kbit/s总线速率,通常使用5.1K欧姆的上拉电阻,I2C简介总线时序,在数据传送过程中,必须确认数据传送的开始和结束,这通过起始和结束信号识别。,第一字节,发送起始信号后传送的第一字节数据具有特别的意义,其中前七位为从机地址,最后一位为读写方向位(0表示写,1表示读)。,I2C简介总线时序,I2C总线数据传送时,每传送一个字节数据后都必须有应答信号(A)。主控器接收数据时,如果要结束通信时,

24、将在停止位之前发送非应答信号()。,I2C简介总线时序,LPC2200在I2C通信中可以配置为主控器也可以作为被控器,那么它就具有4种操作模式:主发送模式、主接收模式、从发送模式和从接收模式。,7.11 I2C接口,寄存器描述,I2C接口包含7个寄存器。,寄存器描述I2C控制置位寄存器,I2CONSET寄存器用于置位I2C通信的相关标志位,该寄存器只能对某位置位,而不能清零,清零通过I2CONCLR寄存器完成。,寄存器描述I2C控制置位寄存器,寄存器描述I2C控制置位寄存器,寄存器描述I2C控制置位寄存器,寄存器描述I2C控制置位寄存器,寄存器描述I2C控制置位寄存器,寄存器描述I2C控制清零

25、寄存器,I2CONCLR寄存器与I2CONSET寄存器的功能相反,它用于清零I2C通信的相关标志位,该寄存器只能对某位清零,而不能置位。,寄存器描述I2C状态寄存器,I2STAT寄存器包含了I2C接口的状态代码,它是一个只读寄存器。一共有26种可能存在的状态代码。当代码为0 xF8时,无可用的相关信息,SI位不会置位。所有其它25种状态代码都对应一个已定义的I2C状态。当进入其中一种状态时,SI位将置位。I2C处理程序就是根据该寄存器反映的状态来进行相应的处理。,寄存器描述I2C数据寄存器,I2DAT寄存器包含要发送或刚接收的数据。当它没有处理字节的移位时,CPU可对其进行读写。该寄存器只能在

26、SI置位时访问。在SI置位期间,I2DAT中的数据保持稳定。I2DAT中的数据移位总是从右至左进行:第一个发送的位是MSB(位7),在接收字节时,第一个接收到的位存放在I2DAT的MSB。,寄存器描述I2C从地址寄存器,I2ADR寄存器只能在I2C设置为从模式时才能使用。在主模式中,该寄存器无效。I2ADR的LSB为通用调用位。当该位置位时,通用调用位(0 x00)被识别(即可以对广播地址0 x00作出响应)。,寄存器描述I2C占空比寄存器,I2SCLH、I2SCLL寄存器用于控制I2C通信的波特率。其中I2SCLH定义SCL高电平所保持的PCLK周期数,而I2SCLL定义SCL低电平所保持的

27、PCLK周期数。那么位频率(即总线速率)由下面的公式得出:位频率=Fpclk/(I2SCLH+I2SCLL),7.11 I2C接口,使用I2C接口的注意要点,I2C接口的引脚为开漏输出,必须在I2C总线上接上拉电阻。通信速率越快,电阻值越小;总线上各器件的地址不能冲突;编程时需要仔细处理每个状态,注意各状态之间的转移关系。,7.11 I2C接口,I2C应用示例,LPC2200对于I2C通信的处理是基于状态标志进行的,不同的模式之间具有相通的分析方法,这里仅介绍常用的主发送和主接收模式。,I2C应用示例,主模式设置,主模式初始化流程,I2C应用示例,主模式设置,Void I2C_init(uin

28、t32 fi2c)if(fi2c 400000)fi2c=400000;PINSEL0=(PINSEL0,初始化代码,传入参数为I2C时钟频率,过滤传入参数,最高400K时钟频率,I2C应用示例,LPC2200在该模式下作为主控器,向从机发送数据。数据流向如下图所示:,主机发送,LPC2200(主),I2C应用示例,主模式数据发送的时序格式,主机发送,第一字节的前七位包含接收器件的从地址,第8位表示为写操作。,I2C应用示例,主模式数据发送的时序格式,主机发送,(1)(2)(3)(3)(4),通过软件置位STA进入I2C主发送模式,I2C逻辑在总线空闲后立即发送一个起始信号;在起始信号发送结束

29、后,SI置位。将从机地址和写操作位装入I2DAT,然后清零SI,将第一字节数据发出;当从机地址和W位发送结束并收到应答位(A)后,SI位再次置位。此时将要发送的数据装入I2DAT,开始发送数据;在数据正确发送后,SI置位。此时如果要结束本次操作,那么置位STO位,发送结束信号。,I2C应用示例,主模式数据发送的时序格式,主机发送,在通信过程中,随着通信阶段的不同,I2STAT寄存器中的状态号也相应的变化,并引起中断。在中断服务程序中,根据当前的状态号来决定下一步的处理。如果当前的状态号不符合正常操作的流程,那么就要作出相应的错误处理,比如重新启动总线等。,主模式数据发送流程图,I2C应用示例,

30、LPC2200在该模式下作为主控器,接收从机发出的数据。数据流向如下图所示:,主机接收,LPC2200(主),I2C应用示例,主模式数据接收的时序格式,主机接收,第一字节的前七位包含接收器件的从地址,第8位为1,表示读操作。,I2C应用示例,主模式数据接收的时序格式,主机接收,(1)(2)(3)(4)(4),通过软件置位STA进入I2C主发送模式,I2C逻辑在总线空闲后立即发送一个起始信号;在起始信号发送结束后,SI置位。将从机地址和读操作位装入I2DAT,然后清零SI,将第一字节数据发出;当从机地址和R位发送结束并收到应答位(A)后,SI位再次置位。此时设置AA位,然后清零SI位,开始接收数

31、据;每接收到一字节数据,SI位再次置位,此时可以再次接收数据,或者置位STO结束总线。,在通信过程中,随着通信阶段的不同,I2STAT寄存器中的状态号也相应的变化,并引起中断。在中断服务程序中,根据当前的状态号来决定下一步的处理。如果当前的状态号不符合正常操作的流程,那么就要作出相应的错误处理,比如重新启动总线等。,I2C应用示例,主模式数据接收的时序格式,主机接收,主模式数据接收流程图,7.12 SPI接口,特性,大部分LPC2200系列微控制器具有两个硬件SPI接口(LPC2104/LPC2105/LPC2106只有一个),它们具有如下特性:完全独立的SPI控制器;遵循同步串行接口(SPI

32、)规范;全双工数据通信;可配置为SPI主机或从机;最大数据位速率为外设时钟Fpclk的1/8。,7.12 SPI接口,SPI简介,SPI是一种全双工的同步串行接口,一个SPI总线可以连接多个主机和多个从机。在同一时刻只允许一个主机操作总线,并且同时只能和一个从机通信。串行时钟由主机产生,当主机发送一字节数据(通过MOSI)的同时,从机返回一字节数据(通过MISO)。,使用SPI通信需要4个引脚,分别为:,SPI电气连接,作SPI主机时,SSEL要接上拉电阻,SPI传输时序,SPI工作模式,LPC2200在SPI通信中可作为从机也可以作为主机,这取决于硬件设计和软件设置。当器件作为主机时,使用一

33、个IO引脚拉低相应从机的选择引脚(SSEL),传输的起始由主机发送数据来启动,时钟(SCK)信号由主机产生。通过MOSI发送数据,同时通过MISO引脚接收从机发出的数据。当器件作为从机时,传输在从机选择引脚(SSEL)被主机拉低后开始,接收主机输出的时钟信号,在读取主机数据的同时通过MISO引脚输出数据。,SPI接口内部结构,SPI寄存器描述,SPI寄存器描述,SPI控制寄存器,SPCR寄存器包含一些可编程位来控制SPI功能模块的功能,该寄存器必须在数据传输之前进行设定。,SPI寄存器描述,SPI控制寄存器,SPI寄存器描述,SPI控制寄存器,SPI寄存器描述,SPI控制寄存器,SPI寄存器描

34、述,SPI控制寄存器,SPI寄存器描述,SPI控制寄存器,SPI寄存器描述,SPI状态寄存器,SPSR寄存器为只读寄存器,用于监视SPI功能模块的状态,包括一般性功能和异常状况。,SPI寄存器描述,SPI状态寄存器,读溢出:当SPI功能模块内部读缓冲区包含没有读出的数据,而新的传输已经完成,就会发生读溢出。如果SPIF位置位(读缓冲区已满),新接收到的数据将会丢失,而状态寄存器的读溢出(ROVR)位将置位。写冲突:在SPI数据传输过程当中不应向SPI数据寄存器写入数据。不能向SPI数据寄存器写入数据的时间从传输启动时开始,直到SPIF置位时读取状态寄存器为止。如果在这段时间内写SPI数据寄存器

35、,写入的数据将会丢失,状态寄存器中的写冲突位(WCOL)置位。模式错误:SSEL信号在SPI功能模块为主机时必须无效,不能用作GPIO。当SPI功能模块为主机时,如果SSEL信号被激活(将SSEL变为低电平),表示有另外一个主机将该器件选择为从机。这种状态称为模式错误。从机中止:如果SSEL信号在传输结束之前变为高电平,从传输将被认为中止。此时,正在处理的发送或接收数据都将丢失,状态寄存器的从机中止(ABRT)位置位。,SPI寄存器描述,SPI数据寄存器,SPDR寄存器为SPI提供数据的发送和接收。处于主模式时,向该寄存器写入数据,将启动SPI数据传输。从数据传输开始到SPIF状态位置位并且没

36、有读取状态寄存器的这段时间内不能对该寄存器执行写操作。,SPI寄存器描述,SPI时钟计数寄存器,作为主机时,SPCCR寄存器控制SCK的频率。寄存器的值为一位SCK时钟所占用的PCLK周期数。该寄存器的值必须为偶数,并且必须不小于8。如果寄存器的值不符合以上条件,可能会导致产生不可预测的动作。SPI速率=Fpclk/SPCCR,SPI寄存器描述,SPI中断寄存器,该寄存器包含SPI接口的中断标志。,7.12 SPI接口,使用SPI接口的注意要点,作主机时,SSEL引脚必须接上拉电阻,不能作为IO口使用;作主机时,在发送一字节数据的同时接收一字节数据;SPI时钟分频值必须大于或等于8;数据寄存器

37、与内部移位寄存器之间没有缓冲区,写SPDR会使数据直接进入移位寄存器。因此数据只能在上一次数据发送完成后写入SPDR寄存器。,SPI应用示例,作为主机,操作流程,SPI应用示例,作为主机,SPI初始化代码:,#define MSTR(1 5)#define CPOL(1 4)#define CPHA(1 3)#define LSBF(1 6)#define SPI_MODE(MSTR|CPOL)void MSpiIni(uint8 fdiv)if(fdiv 8)fdiv=8;S0PCCR=fdiv,过滤分频值,如果小于8为非法,SPI应用示例,作为主机,SPI主机发送和接收程序:,#defin

38、e MSTR(1 5)#define CPOL(1 4)#define CPHA(1 3)#define LSBF(1 6)#define SPI_MODE(MSTR|CPOL)uint8 MSendData(uint8 data)IO0CLR=HC595_CS;S0PDR=data;while(0=(S0PSR,SPI应用示例,作为从机,操作流程,SPI应用示例,作为从机,SPI初始化代码:,;初始化从机void SSpiIni(uint8 fdiv)S0PCR=(1 4);收发一字节数据uint8 SSwapData(uint8 data)S0PDR=data;while(0=(S0PSR,SPI应用示例,作为从机,SPI初始化代码:,void SSpiIni(uint8 fdiv)S0PCR=(1 4);uint8 SSwapData(uint8 data)S0PDR=data;while(0=(S0PSR,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号