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

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

《ARM与嵌入式技术培训课件第7章课件》由会员分享,可在线阅读,更多相关《ARM与嵌入式技术培训课件第7章课件(118页珍藏版)》请在金锄头文库上搜索。

1、7.8 GPIOLPC2200系列作为 “微控制器”,其通用并行I/O口( GPIO)具有如下的特性:可以独立控制每个GPIO口的方向(输入/输出模式);可以独立设置每个GPIO的输出状态(高/低电平);所有GPIO口在复位后默认为输入状态。ARM与嵌入式技术培训课件第7章7.8 GPIO通用名称描述访问类型复位值IOPINGPIO引脚值寄存器,不管方向模式如何,引脚的当前状态都可以从该寄存器中读出只读NAIOSETGPIO输出置位寄存器。该寄存器控制引脚输出高电平读/置位0x0000 0000IOCLRGPIO输出置位寄存器。该寄存器控制引脚输出低电平只清零0x0000 0000IODIRG

2、PIO方向控制寄存器。该寄存器单独控制每个IO口的方向读/写0x0000 0000 GPIO相关寄存器描述ARM与嵌入式技术培训课件第7章PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10GPIO相关寄存器描述IOxPINIOxPIN描述复位值31 : 0GPIO引脚值。IOxPIN0对应于Px.0 IOxPIN31对应于Px.31引脚未定义 该寄存器反映了当前引脚的状态。IOxPIN中的x对应于某一个端口,如P1口对应于IO1PIN。所以芯片存在多少个端口,就有多少个IOxPIN分别与之对应。 写该寄存器会将值保存到输出寄存器,具体使用稍后介绍。注意:无论引脚被设置

3、为输入还是输出模式,都不影响引脚状态的读出。ARM与嵌入式技术培训课件第7章PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10GPIO相关寄存器描述IOxDIRIOxDIR描述复位值31 : 0方向控制位。IOxDIR0对应于Px.0 IOxDIR31对应于Px.31引脚未定义 当引脚设置为GPIO输出模式时,可使用该寄存器控制引脚的方向。向某位写入1使对应引脚作为输出功能,写入0时作为输入功能。 作为输入功能时,引脚处于高阻态。ARM与嵌入式技术培训课件第7章PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10GPIO相关寄存器描述IOxSE

4、TIOxSET描述复位值31 : 0输出置位。IOxSET0对应于Px.0 IOxPIN31对应于Px.31引脚未定义 当引脚设置为GPIO输出模式时,可使用该寄存器从引脚输出高电平。向某位写入1使对应引脚输出高电平。写入0无效。 从该寄存器读回的数据为GPIO输出寄存器的值。该值不反映外部环境对引脚的影响。ARM与嵌入式技术培训课件第7章PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10GPIO相关寄存器描述IOxCLRIOxCLR描述复位值31 : 0输出清零。IOxCLR0对应于Px.0 IOxCLR31对应于Px.31引脚未定义 当引脚设置为GPIO输出模式时

5、,可使用该寄存器从引脚输出低电平。向某位写入1使对应引脚输出低电平。写入0无效。注意:读取该寄存器无效,不能读回输出寄存器的值。ARM与嵌入式技术培训课件第7章7.9 GPIO使用GPIO注意要点引脚设置为输出方式时,输出状态由IOxSET和IOxCLR中最后操作的寄存器决定;大部分GPIO输出为推挽方式(个别引脚为开漏输出),正常拉出/灌入电流均为4mA(短时间极限值40mA);复位后默认所有GPIO为输入模式。ARM与嵌入式技术培训课件第7章 . PINSEL0 &= 0xFFFFFFFC; IO0DIR |= 0x00000001; IO0SET = 0x00000001; .C代码:P

6、INSEL0IO0DIRIO0CLRIO0PINIO0SETinout10GPIO应用示例设置P0.0输出高电平P0.0(1) 设置引脚连接模块,P0.0为GPIO(2) 设置P0.0口方向,设置为输出(3) 设置P0.0口状态,输出高电平1ARM与嵌入式技术培训课件第7章 . uint32 PinStat; PINSEL0 &= 0xFFFFFFFC; IO0DIR &= 0xFFFFFFFE; PinStat = IO0PIN; .C代码:PINSEL0IO0DIRIO0CLRIO0PINIO0SETinout10GPIO应用示例读取P0.0引脚状态P0.0(1) 设置引脚连接模块,P0.

7、0为GPIO(2) 设置P0.0口方向,设置为输入(3) 从IO0PIN读取引脚状态IO0PINARM与嵌入式技术培训课件第7章#define DataBus 0xFF PINSEL0 &= 0xFFFF0000; IO0DIR |= DataBus; IO0CLR = DataBus; IO0SET = Data; .使用IOxSET和IOxCLR实现:GPIO应用示例输出多位数据至IO口(1) 设置引脚连接模块,P0.07为GPIO(2) 设置P0.0口方向,设置为输出(3) 清零8位IO口的输出状态 在需要将多位数据同时输出到某几个IO口线时,通常使用IOxSET和IOxCLR来实现,在

8、某些情况下也可以使用IOxPIN寄存器实现。后者可以在多个IO口上直接输出0和1电平。 本例将8位无符号整数变量Data的值输出到P0.0P0.7。(4) Data变量中为1的位将输出高电平0x?0x00Data数据输出线:ARM与嵌入式技术培训课件第7章#define DataBus 0xFF PINSEL0 &= 0xFFFF0000; IO0DIR |= DataBus; IO0PIN = (IO0SET & 0xFFFFFF00) | Data; .GPIO应用示例输出多位数据至IO口(1) 设置引脚连接模块,P0.0为GPIO(2) 设置P0.0口方向,设置为输出(3) 写IO0PI

9、N,输出数据 在需要将多位数据同时输出到某几个IO口线时,通常使用IOxSET和IOxCLR来实现,在某些情况下也可以使用IOxPIN寄存器实现。后者可以在多个IO口上直接输出0和1电平。 本例将8位无符号整数变量Data的值输出到P0.0P0.7。使用IOxPIN实现:0x?Data数据输出线:0x?0x00Data与前者对比:ARM与嵌入式技术培训课件第7章7.9 UART0 简介串行通信口(UART),LPC2200包含两个UART:UART0和UART1 其中UART0具有如下的特性:16字节接收FIFO和16字节发送FIFO;寄存器位置符合16C550工业标准;接收FIFO触发点可设

10、置为1、4、8或14字节;内置波特率发生器。ARM与嵌入式技术培训课件第7章7.9 UART0 使用UART0通信需要两个引脚,分别为:引脚名称类型描述RxD0输入串行输入,接收数据TxD0输出串行输出,发送数据ARM与嵌入式技术培训课件第7章U0THRU0TSRTxD0U0RBRU0RSRRxD0U0LCRU0LSRU0IIRU0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLL1.在使用UART之前需要设置的寄存器UART0内部结构示意图U0LCRU0IERU0FCRU0DLM U0DLLFIFO控制中断使能UART0格式设置波特率设置ARM与嵌入式技术培训课件第7章U0TH

11、RU0TSRTxD0U0RBRU0RSRRxD0U0LCRU0LSRU0IIRU0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLL2.发送数据的通道UART0内部结构示意图U0THRU0TSRVPB接口CPU内核通过VPB接口对UART0的寄存器进行读写访问发送缓存发送移位寄存器ARM与嵌入式技术培训课件第7章U0THRU0TSRTxD0U0RBRU0RSRRxD0U0LCRU0LSRU0IIRU0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLL3.接收数据的通道UART0内部结构示意图U0RBRU0RSRVPB接口接收缓存接收移位寄存器ARM与嵌入式技术培训课

12、件第7章U0THRU0TSRTxD0U0RBRU0RSRRxD0U0LCRU0LSRU0IIRU0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLL4.通信过程中可能影响的标志位UART0内部结构示意图U0LSRU0IIR中断标志UART0当前状态ARM与嵌入式技术培训课件第7章UART0相关寄存器描述U0THRU0TSRTxD0U0RBRU0RSRRxD0U0LCRU0LSRU0IIRU0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLLU0RBRU0RBR描述复位值7 : 0接收缓存寄存器,它包含了接收FIFO中最早接收到的字节未定义 U0RSR移位寄存器从Rx

13、D0引脚接收的有效数据将被送到接收FIFO中。通过读取U0RBR寄存器可以将接收FIFO中最早接收到的字节读出,当FIFO中不再包含有效数据时,该寄存器反映接收到的最后一个有效字节数据。接收的数据不足8位时,高位用0填充。注意: U0RBR只读。访问该寄存器时,U0LCR的除数锁存访问位(DLAB)必须为0。接收缓存寄存器ARM与嵌入式技术培训课件第7章UART0相关寄存器描述U0THRU0TSRTxD0U0RBRU0RSRRxD0U0LCRU0LSRU0IIRU0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLLU0THR描述复位值7 : 0发送器保持寄存器,写入该寄存器的值保

14、存到发送FIFO中,当该字节到达FIFO底部时,它将被送入发送移位寄存器(U0TSR)进行发送。未定义 写入该寄存器的值将是发送FIFO中的最高字节。访问该寄存器时,U0LCR的除数锁存访问位(DLAB)必须为0。注意: U0THR只写。它的地址与U0RBR相同,通过读/写操作予以区分。U0THR发送器保持寄存器ARM与嵌入式技术培训课件第7章U0THRU0TSRTxD0U0RBRU0RSRRxD0U0LCRU0LSRU0IIRU0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLLU0THRU0THRU0TSRTxD0RxD0U0LCRU0LSRU0IIRU0IERU0DLM U

15、0DLLUART0相关寄存器描述名称描述复位值U0DLL7:0除数锁存寄存器低字节两个寄存器一起构成一个16位的除数,决定UART0的波特率。未定义U0DLM7:0除数锁存寄存器高字节 这两个寄存器决定波特率时钟的频率,而波特率时钟必须是波特率的16倍。波特率计算公式如下:BaudRate = FPCLK / (U0DLM,U0DLL16)除数锁存寄存器U0DLM U0DLL注意:由于U0DLL、U0DLM寄存器与其它寄存器的地址重叠,所以在访问它们时,U0LCR的除数锁存访问位(DLAB)必须为1。ARM与嵌入式技术培训课件第7章U0THRU0TSRTxD0RxD0U0LCRU0LSRU0I

16、IRU0IERU0DLM U0DLLUART0相关寄存器描述U0IER描述复位值0RBR中断使能。1:使能RDA中断;0:禁止RDA中断。01THRE中断使能。1:使能THRE中断;0:禁止THRE中断。02Rx线状态中断使能。1:禁止Rx线状态中断;0:禁止Rx线状态中断;该中断状态可从U0LSR4:1读出。07 : 3保留,用户软件不要向这些位写入1。未定义中断使能寄存器U0IER U0IER可以控制UART0的4个中断源。其中RBR中断使能包括两个中断,一个是接收数据可用(RDA)中断,一个是接收超时中断(CTI)。稍后将对各中断源作详细介绍。ARM与嵌入式技术培训课件第7章U0THRU

17、0TSRTxD0RxD0U0LCRU0LSRU0IIRU0IERU0DLM U0DLLUART0相关寄存器描述U0IIR描述复位值0中断挂起。1:没有挂起的中断;0:至少有一个中断被挂起。03 : 1中断标识。这3位表示了对应于UART0 Rx FIFO的中断。未列出的其它组合作为保留值。011:1. 接收线状态中断(RLS)0010:2a. 接收数据可用中断(RDA)0110:2b. 字符超时指示(CTI)001:3. 发送中断(THRE)7 : 3保留,用户软件不要向这些位写入1。未定义中断标识寄存器 U0IIR提供状态代码用于指示一个挂起中断的中断源和优先级。在访问U0IIR过程中,中断

18、被冻结。如果在访问U0IIR时产生了中断,该中断将被记录,在下次访问U0IIR时可以读出,避免了中断的丢失。U0IIRARM与嵌入式技术培训课件第7章U0THRU0TSRTxD0RxD0U0LCRU0LSRU0IIRU0IERU0DLM U0DLLUART0相关寄存器描述中断标识寄存器中断源和中断使能的关系U0IIRRLS中断(U0IIR3:1=011)RDA中断(U0IIR3:1=010)CTI中断(U0IIR3:1=110)THRE中断(U0IIR3:1=001)VIC中断控制器ARM7TDMI内核U0IERbit2bit1bit0ARM与嵌入式技术培训课件第7章优先级最高第二第二第三U0

19、THRU0TSRTxD0RxD0U0LCRU0LSRU0IIRU0IERU0DLM U0DLLUART0相关寄存器描述中断标识寄存器U0IIRRLS中断RDA中断CTI中断THRE中断VIC中断控制器ARM7TDMI内核U0IERbit2bit1bit0中断源和中断使能的关系ARM与嵌入式技术培训课件第7章UART0相关寄存器描述中断源说明l RLS中断:该中断为最高优先级。它在UART0产生了四个错误条件(溢出错误(OE)、奇偶错误(PE)、帧错误(FE)和间隔中断(BI))中的任意一个时置位。通过查看U0LSR4:1可以了解到产生该中断的错误条件。读取U0LSR时清除该中断;ARM与嵌入式

20、技术培训课件第7章UART0相关寄存器描述中断源说明lRDA中断:该中断与CTI中断并列为第二优先级。当接收的有效数据到达接收FIFO设置寄存器(U0FCR)中设置的触发点时,RDA被激活。当接收FIFO中的有效数据少于触发点时,RDA复位;1.移位寄存器(U0RSR)从RxD0引脚接收串行数据后,送入接收FIFO中;2.当接收FIFO中的有效数据数量到达预定的触发点时,置位RDA中断;3.从U0RBR寄存器中读取FIFO中最早到达的数据,当FIFO中的有效数据小于预定触发点时,清零RDA中断;接收FIFO12345679101112131415168触发点设置=8U0RBRU0RSRRxD0

21、U0IIR3:1xxxU0IIR010100xxx1DATAARM与嵌入式技术培训课件第7章UART0相关寄存器描述中断源说明lCTI中断:该中断为第二优先级。当接收FIFO中的有效数据少于预定的触发点数量,但至少有一个字节时,如果超过接收3.54.5个字节所需要的时间仍没有接收到数据,那将触发该中断。对接收FIFO的任何操作都会清零该中断标志;接收FIFO12345679101112131415168触发点设置=8U0RBR1.移位寄存器(U0RSR)从RxD0引脚接收串行数据后,送入接收FIFO中;2.当接收FIFO中的有效数据少于触发个数,但至少有一个时,如果长时间没有数据到达,将触发C

22、TI中断;3.从U0RBR中读取接收FIFO中的数据,或者有新的数据送入接收FIFO,都将清零CTI中断;U0RSRDATARxD0U0IIR3:1xxxU0IIR011100xxx1ARM与嵌入式技术培训课件第7章UART0相关寄存器描述中断源说明lCTI中断:该中断为第二优先级。当接收FIFO中的有效数据少于预定的触发点数量,但至少有一个字节时,如果超过接收3.54.5个字节所需要的时间仍没有接收到数据,那将触发该中断。对接收FIFO的任何操作都会清零该中断标志;接收FIFO12345679101112131415168触发点设置=8U0RBR说明:“3.54.5个字节的时间”,其意思是在

23、串口当前的波特率下,发送3.54.5个字节所需要的时间;U0RSRDATARxD0U0IIR3:1xxxU0IIR011100xxx1注意:当接收FIFO中存在多个数据,从U0RBR读取数据,但是没有读完所有数据,那么在经过3.54.5个字节的时间后将触发CTI中断;ARM与嵌入式技术培训课件第7章12345679101112131415168U0RBRU0TSRTxD0U0IIR3:1xxxU0IIR01UART0相关寄存器描述中断源说明lTHRE中断:该中断为第三优先级。当发送FIFO为空并且满足一定的条件时,该中断将被触发。这些条件是:发送FIFO1.系统启动时,虽然发送FIFO为空,但

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

25、HRE中断复位。ARM与嵌入式技术培训课件第7章UART0相关寄存器描述U0THRU0TSRTxD0U0RBRU0RSRRxD0U0LCRU0LSRU0IIRU0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLL位765 : 3210功能Rx触发点设置复位TxFIFO复位RxFIFO使能FIFOFIFO控制寄存器U0FCR U0FCR控制UART0接收和发送FIFO的操作。EnFIFO:FIFO使能。该位的任何变化都将清空UART0的FIFO。 1:使能UART0的接收和发送FIFO,并且允许访问U0FCR7:1。 0:禁止接收FIFO,此时接收缓存只有1个字节。而发送FIFO不

26、会被关闭。ARM与嵌入式技术培训课件第7章UART0相关寄存器描述U0THRU0TSRTxD0U0RBRU0RSRRxD0U0LCRU0LSRU0IIRU0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLL位765 : 3210功能Rx触发点设置复位TxFIFO复位RxFIFO使能FIFOFIFO控制寄存器U0FCR复位RxFIFO:接收FIFO复位。当该位置位时,UART0接收FIFO中的所有字节被清零并复位指针逻辑。注意:该位会自动清零。ARM与嵌入式技术培训课件第7章UART0相关寄存器描述U0THRU0TSRTxD0U0RBRU0RSRRxD0U0LCRU0LSRU0II

27、RU0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLL位765 : 3210功能Rx触发点设置复位TxFIFO复位RxFIFO使能FIFOFIFO控制寄存器U0FCR复位TxFIFO:发送FIFO复位。当该位置位时,UART0发送FIFO中的所有字节被清零并复位指针逻辑。注意:该位会自动清零。ARM与嵌入式技术培训课件第7章UART0相关寄存器描述U0THRU0TSRTxD0U0RBRU0RSRRxD0U0LCRU0LSRU0IIRU0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLL位765 : 3210功能Rx触发点设置复位TxFIFO复位RxFIFO使能FI

28、FOFIFO控制寄存器U0FCR:这些位保留,用户程序不要向这些位写入1。ARM与嵌入式技术培训课件第7章UART0相关寄存器描述U0THRU0TSRTxD0U0RBRU0RSRRxD0U0LCRU0LSRU0IIRU0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLL位765 : 3210功能Rx触发点设置复位TxFIFO复位RxFIFO使能FIFOFIFO控制寄存器U0FCRRx触发点设置:通过设置这两位可以调整接收FIFO中触发RDA中断的有效字节数量。00:触发点0(1字节);01:触发点1(4字节);10:触发点2(8字节);11:触发点3(14字节);ARM与嵌入式技

29、术培训课件第7章U0THRU0TSRTxD0U0RBRU0RSRRxD0U0LCRU0LSRU0IIRU0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLLU0THRU0TSRTxD0U0LCRU0LSRU0IIRU0IERU0DLM U0DLLP11D0D1D2D3D4D5D6D70UART0相关寄存器描述线状态控制寄存器U0LCR位765 : 4621 :0功能除数锁存间隔奇偶选择奇偶设置停止位字长起始位U0LCR寄存器: U0LCR控制发送和接收数据帧的格式。ARM与嵌入式技术培训课件第7章U0THRU0TSRTxD0U0LCRU0LSRU0IIRU0IERU0DLM U0

30、DLLU0THRU0TSRTxD0U0RBRU0RSRRxD0U0LCRU0LSRU0IIRU0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLLUART0相关寄存器描述线状态控制寄存器位765 : 4621 :0功能除数锁存间隔奇偶选择奇偶设置停止位字长字长:这些位控制数据长度。00:5位字符长度;01:6位字符长度;10:7位字符长度;11:8位字符长度;位765 : 4621 :0功能除数锁存间隔奇偶选择奇偶设置停止位字长U0LCRARM与嵌入式技术培训课件第7章UART0相关寄存器描述U0THRU0TSRTxD0U0RBRU0RSRRxD0U0LCRU0LSRU0IIRU

31、0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLL线状态控制寄存器U0LCR位765 : 4621 :0功能除数锁存间隔奇偶选择奇偶设置停止位字长停止位:控制每帧数据包含的停止位个数。0:1个停止位;1:2个停止位;ARM与嵌入式技术培训课件第7章UART0相关寄存器描述U0THRU0TSRTxD0U0RBRU0RSRRxD0U0LCRU0LSRU0IIRU0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLL线状态控制寄存器U0LCR位765 : 4621 :0功能除数锁存间隔奇偶选择奇偶使能停止位字长奇偶使能:控制是否进行奇偶校验。如果使能,发送时将添加一位校验

32、位。0:禁止奇偶产生和校验;1:使能奇偶产生和校验;奇偶选择:设置奇偶校验类型。00:奇数(数据位+校验位奇数);01:偶数(数据位+校验位偶数);10:校验位强制为1;11:校验位强制为0;ARM与嵌入式技术培训课件第7章UART0相关寄存器描述U0THRU0TSRTxD0U0RBRU0RSRRxD0U0LCRU0LSRU0IIRU0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLL线状态控制寄存器U0LCR位765 : 4621 :0功能除数锁存间隔奇偶选择奇偶使能停止位字长间隔:当该位为1时,输出引脚(TxD0)强制为逻辑0,可以引起通信对方(LPC2000)产生间隔中断。

33、在某些通信方式中,使用间隔中断作为通信的起始信号(如:LIN Bus)。0:禁止间隔发送;1:使能间隔发送;ARM与嵌入式技术培训课件第7章UART0相关寄存器描述U0THRU0TSRTxD0U0RBRU0RSRRxD0U0LCRU0LSRU0IIRU0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLL线状态控制寄存器U0LCR位765 : 4621 :0功能除数锁存间隔奇偶选择奇偶使能停止位字长除数锁存:因为U0DLL和U0RBR/U0THR的地址重叠,通过设置该位可以指定其中某个寄存器操作。0:禁止访问除数锁存寄存器;1:使能访问除数锁存寄存器;ARM与嵌入式技术培训课件第7

34、章UART0相关寄存器描述U0THRU0TSRTxD0U0RBRU0RSRRxD0U0LCRU0LSRU0IIRU0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLL位76543210功能RXFETEMTTHREBIFEPEOERDR线状态寄存器 U0LSR为只读寄存器,它反映了UART0接收和发送模块的状态信息。RDR:接收数据就绪。判断该位是否置一,决定能否从FIFO中读取数据。 0:U0RBR为空; 1:U0RBR中包含有效数据。从接收FIFO中读走所有数据后,恢复为0。U0LSRARM与嵌入式技术培训课件第7章UART0相关寄存器描述U0THRU0TSRTxD0U0RBR

35、U0RSRRxD0U0LCRU0LSRU0IIRU0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLL位76543210功能RXFETEMTTHREBIFEPEOERDR线状态寄存器OE:溢出错误标志。当U0RBR寄存器中已经有新的字符就绪,而接收FIFO已满时,该位置位。 0:接收缓存区没有溢出; 1:接收缓存区发生溢出错误。U0LSRARM与嵌入式技术培训课件第7章UART0相关寄存器描述U0THRU0TSRTxD0U0RBRU0RSRRxD0U0LCRU0LSRU0IIRU0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLL位76543210功能RXFETEM

36、TTHREBIFEPEOERDR线状态寄存器PE:奇偶校验错误。在使能奇偶校验位之后,对所有接收的数据都进行奇偶校验,如果与U0LCR中的设置不符,将引起奇偶校验错误。 0:没有发生奇偶校验错误; 1:发生奇偶校验错误。读操作使该位恢复为0。U0LSRARM与嵌入式技术培训课件第7章UART0相关寄存器描述U0THRU0TSRTxD0U0RBRU0RSRRxD0U0LCRU0LSRU0IIRU0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLL位76543210功能RXFETEMTTHREBIFEPEOERDR线状态寄存器FE:帧错误标志。当接收字符的停止位为0时,产生帧错误。

37、0:没有发生帧错误; 1:发生帧错误。读取该位时恢复为0。U0LSRARM与嵌入式技术培训课件第7章UART0相关寄存器描述U0THRU0TSRTxD0U0RBRU0RSRRxD0U0LCRU0LSRU0IIRU0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLL位76543210功能RXFETEMTTHREBIFEPEOERDR线状态寄存器BI:间隔中断标志。在发送数据时,如果RXD0引脚保持低电平,将产生间隔中断。发生间隔中断后,接收模块停止数据接收。 0:没有发生间隔中断; 1:发生间隔中断。U0LSRARM与嵌入式技术培训课件第7章UART0相关寄存器描述U0THRU0T

38、SRTxD0U0RBRU0RSRRxD0U0LCRU0LSRU0IIRU0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLL位76543210功能RXFETEMTTHREBIFEPEOERDR线状态寄存器THRE:反映U0THR是否为空,也可以认为发送FIFO是否为空。 0:不为空; 1:空。对U0THR进行写操作,使该位恢复为0。U0LSRARM与嵌入式技术培训课件第7章UART0相关寄存器描述U0THRU0TSRTxD0U0RBRU0RSRRxD0U0LCRU0LSRU0IIRU0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLL位76543210功能RXFET

39、EMTTHREBIFEPEOERDR线状态寄存器TEMT:当发送移位寄存器和U0THR均为空时,该位置位。 0:不为空; 1:空。对U0THR进行写操作,使该位恢复为0。U0LSRARM与嵌入式技术培训课件第7章UART0相关寄存器描述U0THRU0TSRTxD0U0RBRU0RSRRxD0U0LCRU0LSRU0IIRU0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLL位76543210功能RXFETEMTTHREBIFEPEOERDR线状态寄存器RXFE:如果一个带有接收错误(如帧错误、奇偶错误或间隔中断)的字符装入U0RBR时,该位置位。 0:U0RBR中没有接收错误,或

40、U0FCR0为0; 1:U0RBR中包含至少一个UART0 Rx错误。U0LSRARM与嵌入式技术培训课件第7章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、U0

41、DLL = FPCLK/(16baud);ARM与嵌入式技术培训课件第7章UART0应用示例操作流程设置引脚连接模块将对应IO连接到UART0设置串口波特率设置串口工作模式发送或接收数据检查串口状态字或等待串口中断ARM与嵌入式技术培训课件第7章UART0应用示例初始化代码UART0初始化代码:#define UART_BPS 115200Void UART0_Ini(void) uint16 Fdiv; PINSEL0 = 0x00000005; U0LCR = 0x83; Fdiv = (Fpclk / 16) / UART_BPS; U0DLM = Fdiv / 256; U0LLM =

42、 Fdiv % 256; U0LCR = 0x03;定义表示波特率的宏,方便修改设置引脚连接模块置位除数锁存位根据波特率计算分频值设置除数寄存器(除数锁存访问位必须置位)清除除数锁存位,并设置工作模式ARM与嵌入式技术培训课件第7章UART0应用示例初始化代码UART0初始化代码:#define UART_BPS 115200Void UART0_Ini(void) uint16 Fdiv; PINSEL0 = 0x00000005; U0LCR = 0x83; Fdiv = (Fpclk / 16) / UART_BPS; U0DLM = Fdiv / 256; U0LLM = Fdiv %

43、 256; U0LCR = 0x03;设置引脚连接模块将对应IO连接到UART0设置串口波特率设置串口工作模式发送或接收数据检查串口状态字或等待串口中断ARM与嵌入式技术培训课件第7章UART0应用示例收发数据void UART0_SendByte(uint8 data) U0THR = data; while(U0LSR & 0x40) = 0);uint8 UART0_RcvByte(void) uint8 rcv_data; while(U0LSR & 0x01) = 0); rcv_data = U0RBR; return(rcv_data);查询方式发送一字节数据:查询方式接收一字节

44、数据:将要发送的一字节数据写入U0THR等待数据发送完毕等待数据到达从U0RBR中读出接收的数据返回接收的数据ARM与嵌入式技术培训课件第7章7.10 UART1特性 UART1与UART0基本功能相同,但是增加了一个调制解调器(Modem)接口。所以UART1具有UART0的所有特性。16字节接收FIFO和16字节发送FIFO;寄存器位置符合16C550工业标准;接收FIFO触发点可设置为1、4、8或14字节;内置波特率发生器。ARM与嵌入式技术培训课件第7章UART1具有一个标准的Modem接口,这些引脚为:引脚名称类型描述RxD1输入串行输入,接收数据TxD1输出串行输出,发送数据CTS

45、1输入清除发送,指示外部modem的接收是否已经准备就绪。低电平有效,表示UART1数据可通过TxD1发送。DCD1输入数据载波检测,指示外部modem是否已经与UART1建立了通信连接。低电平有效,表示可以进行数据交换。DSR1输入数据设备就绪,指示外部modem是否准备建立与UART1的连接,低电平有效。DTR1输出数据终端就绪,有效低电平指示UART1准备建立与外部modem的连接。RI1输入铃响指示,指示modem检测到电话的响铃信号,低电平有效。RTS1输出请求发送,指示UART1打算向外部modem发送数据,低电平有效。使用UART1通信ARM与嵌入式技术培训课件第7章UART0内

46、部结构 UART1的结构与UART0类似,在其基础上增加了控制MODEM接口的寄存器。UART1内部结构示意图U0THRU0TSRTxD0U0RBRU0RSRRxD0U0LCRU0LSRU0IIRU0IERVPB接口U0FCR与CPU内核相连U0DLM U0DLLU1THRU1TSRTxD0U1RBRU1RSRRxD0U1LCRU1LSRU1IIRU1IERVPB接口U1FCR与CPU内核相连U1DLM U1DLLMODEMU1MSRU1MCRCTSDSRRIDCDDTRRTSARM与嵌入式技术培训课件第7章7.10 UART1位76543210U1IER0000使能Modem中断使能Rx线状

47、态中断使能THRE 中断使能Rx数据可用中断U1MCR000回送00RTSDTRU1MSRDCDRIDSRCTSDelta DCD后沿RIDelta DSRDelta CTS UART1包含12个8位寄存器,其中大部分寄存器与UART0类似,所以仅介绍不同之处。UART1寄存器描述ARM与嵌入式技术培训课件第7章位76543210U1IER0000使能Modem中断使能Rx线状态中断使能THRE 中断使能Rx数据可用中断使能Modem中断:当该位置位时,允许Modem中断。 Modem中断为最低优先级中断,只要在Modem输入引脚DCD、DSR或CTS上发生任何状态变化,该中断就会激活。此外,

48、Modem输入口RI上出现由低到高的电平跳变会产生一个Modem中断。Modem中断源可通过检查U1MSR3:0得到。读取U1MSR将清除Modem中断。 Mdoem中断在U0IIR中的标志为0x00。7.10 UART1中断使能寄存器UART1寄存器描述ARM与嵌入式技术培训课件第7章7.10 UART1Modem控制寄存器UART1寄存器描述位功能功能描述0DTR控制选择Modem输出引脚DTR。该位在回写模式激活时读出为0。1RTS控制选择Modem输出引脚RTS。该位在回写模式激活时读出为0。3 : 2保留用户软件不要向该位写入14回写模式0:禁止modem回写模式1:使能modem回

49、写模式modem回写模式提供了一个执行回写测试的诊断机制。7 : 5保留用户软件不要向该位写入1 该寄存器使能Modem的回写模式,并控制Modem的输出信号。ARM与嵌入式技术培训课件第7章7.10 UART1回写模式UART1寄存器描述 在Modem回写模式下,发送器输出的串行数据在内部连接到接收器的串行输入端。输入脚RxD1对回写模式无影响,输出脚TxD1保持总为1的状态。 4个modem输入(CTS, DSR, RI和DCD)与外部断开,并在内部与4个modem输入连接。这样连接的结果是U1MSR的高4位由U1MCR的低4位驱动。这样在回写模式下,写U1MCR的低4位就可产生modem

50、状态中断。 ARM与嵌入式技术培训课件第7章位功能功能描述0Delta CTS检测到CTS状态发生变化时,该位置位。读取U1MSR时清零。1Delta DSR检测到DSR状态发生变化时,该位置位。读取U1MSR时清零。2后沿 RI检测到RI状态发生变化时,该位置位。读取U1MSR时清零。3Delta DCD检测到DCD状态发生变化时,该位置位。读取U1MSR时清零。4CTS反映输入信号CTS的补码。回写模式下该位连接U1MCR的bit1。5DSR反映输入信号DSR的补码。回写模式下该位连接U1MCR的bit0。6RI反映输入信号RI的补码。回写模式下该位连接U1MCR的bit2。7DCD反映输

51、入信号DCD的补码。回写模式下该位连接U1MCR的bit1。Modem状态寄存器UART1寄存器描述 该寄存器为只读,它反映Modem输入信号的状态信息。需要注意的是,Mdoem信号对UART1的操作没有直接影响,Modem信号的操作是通过软件来实现的。ARM与嵌入式技术培训课件第7章7.11 I2C接口特性 LPC2200系列微控制器具有一到两个标准的I2C接口,它具有如下特性:可配置为主机、从机或主/从机;可编程时钟可实现通讯速率控制;主机从机之间双向数据传输;同时发送的主机之间进行仲裁,避免了总线数据的冲突。ARM与嵌入式技术培训课件第7章7.11 I2C接口I2C简介 I2C接口是Ph

52、ilips推出的一种串行总线方式,用于IC器件之间的通信。它通过SDA(串行数据线)和SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并通过软件寻址识别每个器件,而不需要片选线。 I2C接口的标准传输速率为100Kbit/s,最高传输速率可达400Kbit/s。ARM与嵌入式技术培训课件第7章7.11 I2C接口I2C简介电气连接 I2C总线接口均为开漏或开集电极输出,因此需要为总线增加上拉电阻Rp。总线速率越高,总线上拉电阻就越小,100Kbit/s总线速率,通常使用5.1K欧姆的上拉电阻ARM与嵌入式技术培训课件第7章I2C简介总线时序 在数据传送过程中,必须确认数据传送的开始和

53、结束,这通过起始和结束信号识别。起始信号结束信号SDASCLSPS从器件地址 R/W第一字节 发送起始信号后传送的第一字节数据具有特别的意义,其中前七位为从机地址,最后一位为读写方向位(0表示写,1表示读)。ARM与嵌入式技术培训课件第7章I2C简介总线时序 I2C总线数据传送时,每传送一个字节数据后都必须有应答信号(A)。主控器接收数据时,如果要结束通信时,将在停止位之前发送非应答信号( )。SDASCL应答信号非应答信号AAARM与嵌入式技术培训课件第7章I2C简介总线时序 LPC2200在I2C通信中可以配置为主控器也可以作为被控器,那么它就具有4种操作模式:主发送模式、主接收模式、从发

54、送模式和从接收模式。S从器件地址WA数据A数据A/ AP主发送模式:S从器件地址RA数据A数据AP主接收模式:S从器件地址WA数据A数据A/ AP/RS从发送模式:S从器件地址RA数据A数据AP从接收模式:主机到从机主机到从机A = 应答(SDA为低)A = 非应答(SDA为高)S = 起始信号P = 停止信号RS = 重复起始信号ARM与嵌入式技术培训课件第7章7.11 I2C接口寄存器描述 I2C接口包含7个寄存器。名称描述访问复位值地址I2CONSETI2C控制置位寄存器读/置位00xE001C000I2STATI2C状态寄存器 只读0xF80xE001C004I2DATI2C数据寄存器

55、 读/写00xE001C008I2ADRI2C从地址寄存器 读/写00xE001C00CI2SCLHSCL占空比寄存器高半字读/写0x040xE001C010I2SCLLSCL占空比寄存器低半字 读/写0x040xE001C014I2CONCLRI2C控制清零寄存器 只清零NA0xE001C018ARM与嵌入式技术培训课件第7章寄存器描述I2C控制置位寄存器 I2CONSET寄存器用于置位I2C通信的相关标志位,该寄存器只能对某位置位,而不能清零,清零通过I2CONCLR寄存器完成。位功能描述复位值1:0保留用户程序不要向这些位写入1NA2AA应答标志03SII2C中断标志04STO停止标志0

56、5STA起始标志06I2ENI2C接口使能07保留用户程序不要向该位写入1NAARM与嵌入式技术培训课件第7章寄存器描述I2C控制置位寄存器位功能描述复位值1 : 0保留用户程序不要向这些位写入1NA2AA应答标志03SII2C中断标志04STO停止标志05STA起始标志06I2ENI2C接口使能07保留用户程序不要向该位写入1NA位7654321 : 0功能保留I2ENSTASTOSIAA保留AA:为声明应答标志。 当该位置位时,在SCL线的应答时钟脉冲内,出现下面的任意条件之一将产生一个应答信号(SDA线为低电平):接收到从地址寄存器中的地址。当I2ADR中的通用调用位(GC)置位时,接收

57、到通用调用地址。当I2C接口处于主接收模式时,接收到一个数据字节。当I2C接口处于可寻址的从接收模式时,接收到一个数据字节。 向I2CONCLR寄存器中的AAC位写入1会使AA位清零。当AA为零时,在SCL线的应答时钟脉冲内,出现下列情况将返回一个非应答信号(SDA线为高电平):当I2C接口处于主接收模式时,接收到一个数据字节。当I2C接口处于可寻址的从接收模式时,接收到一个数据字节。ARM与嵌入式技术培训课件第7章寄存器描述I2C控制置位寄存器位7654321 : 0功能保留I2ENSTASTOSIAA保留SI:为I2C中断标志。 当进入25种可能的I2C状态中的任何一个后,该位置位。通常,

58、I2C中断只在空闲的从器件中用于指示一个起始条件,或在一个空闲的主器件(如果它等待使用I2C总线)中指示一个停止条件。向I2CONCLR寄存器中的SIC位写入1使SI位清零。 ARM与嵌入式技术培训课件第7章寄存器描述I2C控制置位寄存器位7654321 : 0功能保留I2ENSTASTOSIAA保留STO:为停止标志。 当STO为1时,在主模式中,向I2C总线发送一个停止条件或在从模式中使总线从错误状态中恢复。当总线检测到停止条件时,STO自动清零。 在从模式中,置位STO位可从错误状态中恢复。这种情况下不向总线发送停止条件。硬件的表现就好像是接收到一个停止条件并切换到不可寻址的从接收模式。

59、STO标志由硬件自动清零。 ARM与嵌入式技术培训课件第7章寄存器描述I2C控制置位寄存器位7654321 : 0功能保留I2ENSTASTOSIAA保留STA:为起始标志。 当STA=1时,I2C接口进入主模式并发送一个起始条件,如果已经处于主模式,则发送一个重复起始条件。 STA可在任何时候置位,当I2C接口处于可寻址的从模式时,STA也可以置位。ARM与嵌入式技术培训课件第7章寄存器描述I2C控制置位寄存器位7654321 : 0功能保留I2ENSTASTOSIAA保留I2EN:为I2C接口使能。 当该位置位时,使能I2C接口。向I2CONCLR寄存器中的I2ENC位写入1将使I2EN位

60、清零。当I2EN位为0时,I2C功能被禁止。 ARM与嵌入式技术培训课件第7章寄存器描述I2C控制清零寄存器 I2CONCLR寄存器与I2CONSET寄存器的功能相反,它用于清零I2C通信的相关标志位,该寄存器只能对某位清零,而不能置位。位功能描述复位值1:0保留用户程序不要向这些位写入1NA2AA应答标志NA3SII2C中断标志NA4STO停止标志NA5STA起始标志NA6I2ENI2C接口使能NA7保留用户程序不要向该位写入1NAARM与嵌入式技术培训课件第7章寄存器描述I2C状态寄存器 I2STAT寄存器包含了I2C接口的状态代码,它是一个只读寄存器。一共有26种可能存在的状态代码。当代

61、码为0xF8时,无可用的相关信息,SI位不会置位。所有其它25种状态代码都对应一个已定义的I2C状态。当进入其中一种状态时,SI位将置位。 I2C处理程序就是根据该寄存器反映的状态来进行相应的处理。位功能描述复位值2 : 0状态这3个位总是为007 : 3状态状态位1ARM与嵌入式技术培训课件第7章寄存器描述I2C数据寄存器 I2DAT寄存器包含要发送或刚接收的数据。当它没有处理字节的移位时,CPU可对其进行读写。该寄存器只能在SI置位时访问。在SI置位期间,I2DAT中的数据保持稳定。I2DAT中的数据移位总是从右至左进行:第一个发送的位是MSB(位7),在接收字节时,第一个接收到的位存放在

62、I2DAT的MSB。位功能描述复位值7 : 0数据发送/接收数据位0ARM与嵌入式技术培训课件第7章寄存器描述I2C从地址寄存器 I2ADR寄存器只能在I2C设置为从模式时才能使用。在主模式中,该寄存器无效。I2ADR的LSB为通用调用位。当该位置位时,通用调用位(0x00)被识别(即可以对广播地址0x00作出响应)。 位功能描述复位值0GC通用调用位07 : 1地址从模式地址0ARM与嵌入式技术培训课件第7章寄存器描述I2C占空比寄存器 I2SCLH、I2SCLL寄存器用于控制I2C通信的波特率。其中I2SCLH定义SCL高电平所保持的PCLK周期数,而I2SCLL定义SCL低电平所保持的P

63、CLK周期数。那么位频率(即总线速率)由下面的公式得出:位频率 = Fpclk / (I2SCLH + I2SCLL)寄存器功能描述复位值I2SCLH计数值SCL高电平周期占用PCLK周期数0x04I2SCLL计数值SCL低电平周期占用PCLK周期数0x04I2SCLLI2SCLHARM与嵌入式技术培训课件第7章7.11 I2C接口使用I2C接口的注意要点I2C接口的引脚为开漏输出,必须在I2C总线上接上拉电阻。通信速率越快,电阻值越小;总线上各器件的地址不能冲突;编程时需要仔细处理每个状态,注意各状态之间的转移关系。ARM与嵌入式技术培训课件第7章7.11 I2C接口I2C应用示例 LPC2

64、200对于I2C通信的处理是基于状态标志进行的,不同的模式之间具有相通的分析方法,这里仅介绍常用的主发送和主接收模式。ARM与嵌入式技术培训课件第7章I2C应用示例主模式设置设置引脚连接模块(PINSEL0)设置通信波特率(I2SCLH、I2SCLL)使能主I2C(I2CONSET)设置中断向量(VICxxx)主模式初始化流程ARM与嵌入式技术培训课件第7章I2C应用示例主模式设置设置引脚连接模块(PINSEL0)设置通信波特率(I2SCLH、I2SCLL)使能主I2C(I2CONSET)设置中断向量(VICxxx)主模式初始化流程设置引脚连接模块(PINSEL0)设置通信波特率(I2SCLH

65、、I2SCLL)使能主I2C(I2CONSET)设置中断向量(VICxxx)主模式初始化流程Void I2C_init(uint32 fi2c) if(fi2c 400000) fi2c = 400000; PINSEL0 = (PINSEL0 & 0xFFFFFF0F) | 0x05; I2SCLH = (Fpclk / fi2c + 1) / 2; I2SCLL = (Fpclk / fi2c) / 2; I2CONCLR = 0x2C; I2CONSET = 0x40; VICIntSelect = 0x00000000; VICVectCntl0 = 0x29; VICVectAddr

66、0 = (int)IRQ_I2C; VICIntEnable = 0x0200;初始化代码传入参数为I2C时钟频率过滤传入参数,最高400K时钟频率ARM与嵌入式技术培训课件第7章I2C应用示例 LPC2200在该模式下作为主控器,向从机发送数据。数据流向如下图所示:主机发送LPC2200(主)ARM与嵌入式技术培训课件第7章I2C应用示例主模式数据发送的时序格式主机发送S从器件地址WA数据A数据A/ AP起始位,用于指示传输的开始。结束位,用于指示传输的结束。第一字节的前七位包含接收器件的从地址,第8位表示为写操作。每发送完一个字节数据,接收数据的器件就发送一个应答位每发送完一个字节数据,接

67、收数据的器件就发送一个应答位每发送完一个字节数据,接收数据的器件就发送一个应答位每发送完一个字节数据,接收数据的器件就发送一个应答位ARM与嵌入式技术培训课件第7章I2C应用示例主模式数据发送的时序格式主机发送S从器件地址WA数据A数据A/ AP (1) (2) (3) (3) (4)(1)通过软件置位STA进入I2C主发送模式,I2C逻辑在总线空闲后立即发送一个起始信号;(2)在起始信号发送结束后,SI置位。将从机地址和写操作位装入I2DAT,然后清零SI,将第一字节数据发出;(3)当从机地址和W位发送结束并收到应答位(A)后,SI位再次置位。此时将要发送的数据装入I2DAT,开始发送数据;

68、(4)在数据正确发送后,SI置位。此时如果要结束本次操作,那么置位STO位,发送结束信号。ARM与嵌入式技术培训课件第7章I2C应用示例主模式数据发送的时序格式主机发送S从器件地址WA数据A数据A/ AP0x080x180x280x280x30正确的状态号 在通信过程中,随着通信阶段的不同,I2STAT寄存器中的状态号也相应的变化,并引起中断。在中断服务程序中,根据当前的状态号来决定下一步的处理。如果当前的状态号不符合正常操作的流程,那么就要作出相应的错误处理,比如重新启动总线等。0x200x300x38错误的状态号ARM与嵌入式技术培训课件第7章你要发送数据调用函数ISendStr()ISe

69、ndStr()I2C中断IRQ_I2C()设置I2C中断处理所需的全局变量(如从机地址)清除STA、SI和AA标志位置位STA,启动I2C总线读取I2C操作完成标志I2C_end判断操作是否正确,然后返回I2C_end=1?YN读取I2C状态码(即I2CSTAT)根据状态码进行相应的处理(状态码08H、18H、20H、28H、38H)按全局变量的设置进行数据操作及设置软件标志清除中断逻辑,然后中断返回主模式数据发送流程图ARM与嵌入式技术培训课件第7章I2C应用示例 LPC2200在该模式下作为主控器,接收从机发出的数据。数据流向如下图所示:主机接收LPC2200(主)ARM与嵌入式技术培训课

70、件第7章S从器件地址RA数据A数据AP主接收模式:I2C应用示例主模式数据接收的时序格式主机接收起始位,用于指示传输的开始。结束位,用于指示传输的结束。第一字节的前七位包含接收器件的从地址,第8位为1,表示读操作。每接收完一个字节数据,就发送一个应答位。在接收最后一个字节数据后,发送非应答位,通知从机停止发送数据。ARM与嵌入式技术培训课件第7章I2C应用示例主模式数据接收的时序格式主机接收 (1) (2) (3) (4) (4)(1)通过软件置位STA进入I2C主发送模式,I2C逻辑在总线空闲后立即发送一个起始信号;(2)在起始信号发送结束后,SI置位。将从机地址和读操作位装入I2DAT,然

71、后清零SI,将第一字节数据发出;(3)当从机地址和R位发送结束并收到应答位(A)后,SI位再次置位。此时设置AA位,然后清零SI位,开始接收数据;(4)每接收到一字节数据,SI位再次置位,此时可以再次接收数据,或者置位STO结束总线。S从器件地址RA数据A数据AP主接收模式:ARM与嵌入式技术培训课件第7章0x080x400x500x500x58正确的状态号 在通信过程中,随着通信阶段的不同,I2STAT寄存器中的状态号也相应的变化,并引起中断。在中断服务程序中,根据当前的状态号来决定下一步的处理。如果当前的状态号不符合正常操作的流程,那么就要作出相应的错误处理,比如重新启动总线等。0x380

72、x580x48错误的状态号I2C应用示例主模式数据接收的时序格式S从器件地址RA数据A数据AP主接收模式:主机接收ARM与嵌入式技术培训课件第7章你要发送数据调用函数ISendStr()ISendStr()I2C中断IRQ_I2C()设置I2C中断处理所需的全局变量(如从机地址)清除STA、SI和AA标志位置位STA,启动I2C总线读取I2C操作完成标志I2C_end判断操作是否正确,然后返回I2C_end=1?YN读取I2C状态码(即I2CSTAT)根据状态码进行相应的处理(状 态 码 08H、38H、40H、48H、50H、58H)按全局变量的设置进行数据操作及设置软件标志清除中断逻辑,然

73、后中断返回主模式数据接收流程图ARM与嵌入式技术培训课件第7章7.12 SPI接口特性 大部分LPC2200系列微控制器具有两个硬件SPI接口(LPC2104/LPC2105/LPC2106只有一个),它们具有如下特性:完全独立的SPI控制器;遵循同步串行接口(SPI)规范;全双工数据通信;可配置为SPI主机或从机;最大数据位速率为外设时钟Fpclk的1/8。ARM与嵌入式技术培训课件第7章7.12 SPI接口SPI简介 SPI是一种全双工的同步串行接口,一个SPI总线可以连接多个主机和多个从机。在同一时刻只允许一个主机操作总线,并且同时只能和一个从机通信。 串行时钟由主机产生,当主机发送一字

74、节数据(通过MOSI)的同时,从机返回一字节数据(通过MISO)。ARM与嵌入式技术培训课件第7章 使用SPI通信需要4个引脚,分别为:引脚名称类型描述SCK输入/输出串行时钟,用于同步SPI接口间数据传输的时钟信号。该时钟信号总是由主机输出。SSEL输入从机选择,SPI从机选择信号是一个低有效信号,用于指示被选择参与数据传输的从机。每个从机都有各自特定的从机选择输入信号。MISO输入/输出主入从出,MISO信号是一个单向的信号,它将数据由从机传输到主机。MOSI输入/输出主出从入,MOSI信号是一个单向的信号,它将数据从主机传输到从机。SPI电气连接SPI主机LPC2200SPI从机1SPI

75、从机2SSELSPI BUSP0.1P0.2nCSnCS作SPI主机时,SSEL要接上拉电阻ARM与嵌入式技术培训课件第7章时钟相位为1时钟前沿数据输出时钟后沿数据采样时钟信号极性0极性1从机选择时钟相位为0时钟前沿数据采样时钟后沿数据输出SPI传输时序时钟前沿输出时钟后沿采样时钟前沿采样时钟后沿输出ARM与嵌入式技术培训课件第7章SPI工作模式 LPC2200在SPI通信中可作为从机也可以作为主机,这取决于硬件设计和软件设置。 当器件作为主机时,使用一个IO引脚拉低相应从机的选择引脚(SSEL),传输的起始由主机发送数据来启动,时钟(SCK)信号由主机产生。通过MOSI发送数据,同时通过MI

76、SO引脚接收从机发出的数据。 当器件作为从机时,传输在从机选择引脚(SSEL)被主机拉低后开始,接收主机输出的时钟信号,在读取主机数据的同时通过MISO引脚输出数据。ARM与嵌入式技术培训课件第7章SPI接口内部结构SCK_inSCK_outSS_inSPI移位寄存器SPI状态寄存器SPI时钟发生器&检测器输出使能逻辑SPI寄存器接口SPI中断VPB总线SPI总线SCK_out_enMOSI_out_enMISO_out_enARM与嵌入式技术培训课件第7章SPI寄存器描述名称描述访问复位值SPI0名称SPI1名称SPCRSPI控制寄存器。该寄存器控制SPI的操作模式。读写0S0SPCRS1S

77、PCRSPSRSPI状态寄存器。该寄存器显示SPI的状态。只读0S0SPSRS1SPSRSPDRSPI数据寄存器。该双向寄存器为SPI提供发送和接收的数据。发送数据通过写该寄存器提供。SPI接收的数据可以从该寄存器读出。读写0S0SPDRS1SPDRSPCCRSPI时钟计数寄存器。该寄存器控制主机SCK的频率。读写0S0SPCCRS0SPCCRSPINTSPI中断标志寄存器。该寄存器包含SPI接口的中断标志。读写0S0SPINTS0SPINTARM与嵌入式技术培训课件第7章SPI寄存器描述SPI控制寄存器位765432 : 0功能SPIELSBFMSTRCPOLCPHA保留 SPCR寄存器包含

78、一些可编程位来控制SPI功能模块的功能,该寄存器必须在数据传输之前进行设定。ARM与嵌入式技术培训课件第7章SPI寄存器描述SPI控制寄存器位765432 : 0功能SPIELSBFMSTRCPOLCPHA保留CPHA:时钟相位控制。 该位决定SPI传输时数据和时钟的关系,并控制从机传输的起始和结束。当该位为:1:时钟前沿数据输出,后沿数据采样;0:时钟前沿数据采样,后沿数据输出;ARM与嵌入式技术培训课件第7章SPI寄存器描述SPI控制寄存器位765432 : 0功能SPIELSBFMSTRCPOLCPHA保留CPOL:时钟极性控制。1:SCK为低有效;0:SCK为高有效;ARM与嵌入式技术

79、培训课件第7章SPI寄存器描述SPI控制寄存器位765432 : 0功能SPIELSBFMSTRCPOLCPHA保留CPOL:主模式控制。1:SPI处于主模式;0:SPI处于从模式;ARM与嵌入式技术培训课件第7章SPI寄存器描述SPI控制寄存器位765432 : 0功能SPIELSBFMSTRCPOLCPHA保留LSBF:字节移动方向控制。1:每字节数据从低位(LSB)开始传输;0:每字节数据从高位(MSB)开始传输;ARM与嵌入式技术培训课件第7章SPI寄存器描述SPI控制寄存器位765432 : 0功能SPIELSBFMSTRCPOLCPHA保留SPIE:SPI中断使能。 1:每次SPI

80、F或MODF置位时都会产生硬件中断; 0:SPI中断被禁止;ARM与嵌入式技术培训课件第7章SPI寄存器描述SPI状态寄存器 SPSR寄存器为只读寄存器,用于监视SPI功能模块的状态,包括一般性功能和异常状况。SPSR功能描述复位值2 :0保留用户程序不要向这些保留位写入1。NA3ABRT从机中止标志。为1时表示发生了从机中止。读取该位清零。04MODF模式错误。为1时表示发生了模式错误。先通过读取该寄存器清零MODF位,再写SPI控制寄存器。05ROVR读溢出。为1时表示发生了读溢出。当读取该寄存器时,该位清零。 06WCOL写冲突。为1时表示发生了写冲突。先通过读取该寄存器清零WCOL位,

81、再访问SPI数据寄存器。 07SPIFSPI传输完成标志。为1时表示一次SPI数据传输完成。当第一次读取该寄存器时,该位清零。然后才能访问SPI数据寄存器。注:SPIF不是SPI中断标志。中断标志位于SPINT寄存器中。 0ARM与嵌入式技术培训课件第7章SPI寄存器描述SPI状态寄存器读溢出:当SPI功能模块内部读缓冲区包含没有读出的数据,而新的传输已经完成,就会发生读溢出。如果SPIF位置位 (读缓冲区已满),新接收到的数据将会丢失,而状态寄存器的读溢出 (ROVR)位将置位。 写冲突:在SPI数据传输过程当中不应向SPI数据寄存器写入数据。不能向SPI数据寄存器写入数据的时间从传输启动时

82、开始,直到SPIF置位时读取状态寄存器为止。如果在这段时间内写SPI数据寄存器,写入的数据将会丢失,状态寄存器中的写冲突位(WCOL)置位。 模式错误:SSEL信号在SPI功能模块为主机时必须无效,不能用作GPIO。当SPI功能模块为主机时,如果SSEL信号被激活(将SSEL变为低电平),表示有另外一个主机将该器件选择为从机。这种状态称为模式错误。 从机中止:如果SSEL信号在传输结束之前变为高电平,从传输将被认为中止。此时,正在处理的发送或接收数据都将丢失,状态寄存器的从机中止(ABRT)位置位。 ARM与嵌入式技术培训课件第7章SPI寄存器描述SPI数据寄存器 SPDR寄存器为SPI提供数

83、据的发送和接收。处于主模式时,向该寄存器写入数据,将启动SPI数据传输。从数据传输开始到SPIF状态位置位并且没有读取状态寄存器的这段时间内不能对该寄存器执行写操作。SPDR功能描述复位值7 : 0数据SPI双向数据0ARM与嵌入式技术培训课件第7章SPI寄存器描述SPI时钟计数寄存器 作为主机时,SPCCR寄存器控制SCK的频率。寄存器的值为一位SCK时钟所占用的PCLK周期数。该寄存器的值必须为偶数,并且必须不小于8。如果寄存器的值不符合以上条件,可能会导致产生不可预测的动作。SPI速率 = Fpclk / SPCCRSPCCR功能描述复位值7 : 0计数值设定SPI时钟计数值0ARM与嵌

84、入式技术培训课件第7章SPI寄存器描述SPI中断寄存器 该寄存器包含SPI接口的中断标志。SPCCR功能描述复位值0SPI中断SPI中断标志。向该位写入1清零。注:当SPIE位置一,并且SPIF和WCOL位种至少有一位为1时,该位置位。但是只有当SPI中断位置位并且SPI中断在VIC种被使能,SPI中断才能有中毒处理软件处理。07 : 1保留用户程序不要向这些位写入1NAARM与嵌入式技术培训课件第7章7.12 SPI接口使用SPI接口的注意要点作主机时,SSEL引脚必须接上拉电阻,不能作为IO口使用;作主机时,在发送一字节数据的同时接收一字节数据;SPI时钟分频值必须大于或等于8;数据寄存器

85、与内部移位寄存器之间没有缓冲区,写SPDR会使数据直接进入移位寄存器。因此数据只能在上一次数据发送完成后写入SPDR寄存器。ARM与嵌入式技术培训课件第7章SPI应用示例作为主机操作流程设置SPI时钟速率(SPCCR)设置为SPI主机(SPCR)选择从机发送一字节数据启动SPI数据传输等待数据发送结束(SPIF)读出从机发送的数据或释放从机ARM与嵌入式技术培训课件第7章SPI应用示例作为主机操作流程设置SPI时钟速率(SPCCR)设置为SPI主机(SPCR)选择从机发送一字节数据启动SPI数据传输等待数据发送结束(SPIF)读出从机发送的数据或释放从机操作流程设置SPI时钟速率(SPCCR)

86、设置为SPI主机(SPCR)选择从机发送一字节数据启动SPI数据传输等待数据发送结束(SPIF)读出从机发送的数据或释放从机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 & 0xFE; S0PCR = SPI_MODE;过滤分频值,如果小于8为非法ARM与嵌入式技术培训课件第7章SPI应用示例作为主机操作流

87、程设置SPI时钟速率(SPCCR)设置为SPI主机(SPCR)选择从机发送一字节数据启动SPI数据传输等待数据发送结束(SPIF)读出从机发送的数据或释放从机SPI主机发送和接收程序:#define 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 & 0x80); IO0SET = HC595_CS; re

88、turn(S0PDR);ARM与嵌入式技术培训课件第7章SPI应用示例作为从机操作流程设置为SPI从机(SPCR)将要发送的数据放入SPDR等待数据发送结束(SPIF)从SPDR中读出接收的数据ARM与嵌入式技术培训课件第7章SPI应用示例作为从机操作流程设置为SPI从机(SPCR)将要发送的数据放入SPDR等待数据发送结束(SPIF)从SPDR中读出接收的数据操作流程设置为SPI从机(SPCR)将要发送的数据放入SPDR等待数据发送结束(SPIF)从SPDR中读出接收的数据SPI初始化代码:;初始化从机void SSpiIni(uint8 fdiv) S0PCR = (1 4);收发一字节数

89、据uint8 SS(uint8 data) S0PDR = data; while(0 = (S0PSR & 0x80); return(S0PDR);ARM与嵌入式技术培训课件第7章SPI应用示例作为从机操作流程设置为SPI从机(SPCR)将要发送的数据放入SPDR等待数据发送结束(SPIF)从SPDR中读出接收的数据SPI初始化代码:void SSpiIni(uint8 fdiv) S0PCR = (1 4);uint8 SS(uint8 data) S0PDR = data; while(0 = (S0PSR & 0x80); return(S0PDR);ARM与嵌入式技术培训课件第7章

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号