Presentation is loading. Please wait.

Presentation is loading. Please wait.

(建议使用Office2003以上版本播放,将有更丰富的动画效果)

Similar presentations


Presentation on theme: "(建议使用Office2003以上版本播放,将有更丰富的动画效果)"— Presentation transcript:

1 (建议使用Office2003以上版本播放,将有更丰富的动画效果)
5.9 GPIO (建议使用Office2003以上版本播放,将有更丰富的动画效果)

2 第5章 目录 1.简介 2.引脚配置 3.存储器寻址 4.系统控制模块 5.存储器加速模块 6.外部存储器控制器 7.引脚连接模块
第5章 目录 1.简介 2.引脚配置 3.存储器寻址 4.系统控制模块 5.存储器加速模块 6.外部存储器控制器 7.引脚连接模块 8. 向量中断控制器 9.GPIO 10.UART0 11.UART1 12.I2C接口 13.SPI接口 14.定时器0/1 15.脉宽调制器(PWM) 16.A/D转换器 17.实时时钟 18.看门狗

3 5.9 GPIO 特性 LPC2000系列作为 “微控制器”,其GPIO特性就显得很重要。它具有如下的特性:
所有GPIO口在复位后默认为输入状态(注意GPIO与引脚的概念区别)。

4 5.9 GPIO 应用 驱动LED或其它指示器 检测数字输入,如键盘或开关信号 控制片外器件

5 5.9 GPIO 引脚描述 LPC2114/2124微控制器具有两个端口——P0和P1,可以作为GPIO使用的引脚数为46个。
LPC2210/2212/2214微控制器还包含另外两个端口——P2和P3,这个两个端口与外部存储器总线复用,当它们全部作为GPIO使用时,GPIO引脚数多达112个。

6 5.9 GPIO 引脚描述 GPIO与控制寄存器的关系 引脚 PINSELx IOxDIR IOxCLR IOxPIN IOxSET in
out 1 引脚

7 GPIO相关寄存器描述 通用名称 描述 访问类型 复位值 IOPIN
PINSELx IOxDIR IOxCLR IOxPIN IOxSET in out 1 PINSELx IOxDIR IOxCLR IOxPIN IOxSET in out 1 通用名称 描述 访问类型 复位值 IOPIN GPIO引脚值寄存器,不管方向模式如何,引脚的当前状态都可以从该寄存器中读出 只读 NA IOSET GPIO输出置位寄存器。该寄存器控制引脚输出高电平 读/置位 0x IOCLR GPIO输出置位寄存器。该寄存器控制引脚输出低电平 只清零 IODIR GPIO方向控制寄存器。该寄存器单独控制每个IO口的方向 读/写

8 GPIO相关寄存器描述——IOxPIN IOxSET out 1 in IOxDIR IOxCLR IOxPIN PINSELx IOxPIN 描述 复位值 31 : 0 GPIO引脚值。IOxPIN[0]对应于Px.0 … IOxPIN[31]对应于Px.31引脚 未定义 该寄存器反映了当前引脚的状态。IOxPIN中的x对应于某一个端口,如P1口对应于IO1PIN。所以芯片存在多少个端口,就有多少个IOxPIN分别与之对应。 写该寄存器会将值保存到输出寄存器,具体使用稍后介绍。 注意:无论引脚被设置为输入还是输出模式,都不影响引脚状态的读出。

9 GPIO相关寄存器描述——IOxDIR IOxSET out 1 in IOxDIR IOxCLR IOxPIN PINSELx IOxDIR 描述 复位值 31 : 0 方向控制位。IOxDIR[0]对应于Px.0 … IOxDIR[31]对应于Px.31引脚 未定义 当引脚设置为GPIO输出模式时,可使用该寄存器控制引脚的方向。向某位写入1使对应引脚作为输出功能,写入0时作为输入功能。 作为输入功能时,引脚处于高阻态。

10 GPIO相关寄存器描述——IOxSET IOxSET out 1 in IOxDIR IOxCLR IOxPIN PINSELx IOxSET 描述 复位值 31 : 0 输出置位。IOxSET[0]对应于Px.0 … IOxPIN[31]对应于Px.31引脚 未定义 当引脚设置为GPIO输出模式时,可使用该寄存器从引脚输出高电平。向某位写入1使对应引脚输出高电平。写入0无效。 从该寄存器读回的数据为GPIO输出寄存器的值。该值不反映外部环境对引脚的影响。

11 GPIO相关寄存器描述——IOxCLR IOxSET out 1 in IOxDIR IOxCLR IOxPIN PINSELx IOxCLR 描述 复位值 31 : 0 输出清零。IOxCLR[0]对应于Px.0 … IOxCLR[31]对应于Px.31引脚 未定义 当引脚设置为GPIO输出模式时,可使用该寄存器从引脚输出低电平。向某位写入1使对应引脚输出低电平。写入0无效。 注意:读取该寄存器无效,不能读回输出寄存器的值。

12 5.9 GPIO 使用GPIO注意要点 引脚设置为输出方式时,输出状态由IOxSET和IOxCLR中最后操作的寄存器决定;
大部分GPIO输出为推挽方式(个别引脚为开漏输出),正常拉出/灌入电流均为4mA(短时间极限值40mA); 复位后默认所有GPIO为输入模式。

13 GPIO应用示例——设置P0.0输出高电平 C代码: P0.0 ... PINSEL0 &= 0xFFFFFFFC;
IO0SET out 1 1 in P0.0 IO0DIR IO0CLR IO0PIN PINSEL0 C代码: ... PINSEL0 &= 0xFFFFFFFC; IO0DIR |= 0x ; IO0SET = 0x ; (1) 设置引脚连接模块,P0.0为GPIO (2) 设置P0.0口方向,设置为输出 (3) 设置P0.0口状态,输出高电平

14 GPIO应用示例——读取P0.0引脚状态 C代码: P0.0 ... uint32 PinStat;
IO0SET out 1 in P0.0 IO0DIR IO0CLR IO0PIN IO0PIN PINSEL0 C代码: ... uint32 PinStat; PINSEL0 &= 0xFFFFFFFC; IO0DIR &= 0xFFFFFFFE; PinStat = IO0PIN; (1) 设置引脚连接模块,P0.0为GPIO (2) 设置P0.0口方向,设置为输入 (3) 从IO0PIN读取引脚状态

15 GPIO应用示例——输出多位数据至IO口
在需要将多位数据同时输出到某几个IO口线时,通常使用IOxSET和IOxCLR来实现,在某些情况下也可以使用IOxPIN寄存器实现。后者可以在多个IO口上直接输出0和1电平。 本例将8位无符号整数变量Data的值输出到P0.0~P0.7。 使用IOxSET和IOxCLR实现: #define DataBus 0xFF PINSEL0 &= 0xFFFF0000; IO0DIR |= DataBus; IO0CLR = DataBus; IO0SET = Data; ... (1) 设置引脚连接模块,P0.0~7为GPIO (2) 设置P0.0口方向,设置为输出 (3) 清零8位IO口的输出状态 (4) Data变量中为1的位将输出高电平 0x?? 0x00 Data 数据输出线:

16 GPIO应用示例——输出多位数据至IO口
在需要将多位数据同时输出到某几个IO口线时,通常使用IOxSET和IOxCLR来实现,在某些情况下也可以使用IOxPIN寄存器实现。后者可以在多个IO口上直接输出0和1电平。 本例将8位无符号整数变量Data的值输出到P0.0~P0.7。 使用IOxPIN实现: #define DataBus 0xFF PINSEL0 &= 0xFFFF0000; IO0DIR |= DataBus; IO0PIN = (IO0SET & 0xFFFFFF00) | Data; ... (1) 设置引脚连接模块,P0.0为GPIO (2) 设置P0.0口方向,设置为输出 (3) 写IO0PIN,输出数据 0x?? Data 数据输出线: 0x?? 0x00 Data 与前者对比:

17 第5章 目录 1.简介 2.引脚配置 3.存储器寻址 4.系统控制模块 5.存储器加速模块 6.外部存储器控制器 7.引脚连接模块
第5章 目录 1.简介 2.引脚配置 3.存储器寻址 4.系统控制模块 5.存储器加速模块 6.外部存储器控制器 7.引脚连接模块 8. 向量中断控制器 9.GPIO 10.UART0 11.UART1 12.I2C接口 13.SPI接口 14.定时器0/1 15.脉宽调制器(PWM) 16.A/D转换器 17.实时时钟 18.看门狗

18 5.10 UART0 特性 LPC2000系列微控制器具有两个功能强大的UART,其中UART0具有如下的特性:
16字节接收FIFO和16字节发送FIFO; 寄存器位置符合16C550工业标准; 接收FIFO触发点可设置为1、4、8或14字节; 内置波特率发生器。

19 使用UART0通信 使用UART0通信需要两个引脚,分别为: LPC2000的I/O电压为3.3V(可承受5V),连接时须注意电平的匹配。
引脚名称 类型 描述 RxD0 输入 串行输入,接收数据 TxD0 输出 串行输出,发送数据 LPC2000 其它 通信设备 PC机串口 232 电平转换 TxD0 RxD0 LPC2000的I/O电压为3.3V(可承受5V),连接时须注意电平的匹配。 与PC机相连时,由于PC机串口是RS232电平,所以连接时需要使用RS232转换器。

20 UART0内部结构示意图 1.在使用UART之前需要设置的寄存器 中断使能 VPB 接口 波特率设置 FIFO控制 UART0格式设置
U0THR U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U0LCR U0IER U0FCR U0DLM U0DLL 波特率设置 FIFO控制 UART0格式设置 1.在使用UART之前需要设置的寄存器

21 CPU内核通过VPB接口对UART0的寄存器进行读写访问
发送缓存 发送移位寄存器 U0THR U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U0THR U0TSR VPB 接口 CPU内核通过VPB接口对UART0的寄存器进行读写访问 2.发送数据的通道

22 UART0内部结构示意图 3.接收数据的通道 VPB 接口 VPB 接口 接收缓存 接收移位寄存器 TxD0 RxD0 与CPU内核相连
U0THR U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U0RBR U0RSR VPB 接口 接收缓存 接收移位寄存器 3.接收数据的通道

23 UART0内部结构示意图 4.通信过程中可能影响的标志位 中断标志 UART0当前状态 VPB 接口 TxD0 RxD0 与CPU内核相连
U0THR U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U0LSR U0IIR UART0当前状态 4.通信过程中可能影响的标志位

24 UART0相关寄存器描述 ——接收缓存寄存器 VPB 接口 VPB 接口
U0THR U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U0THR U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U0RBR U0RBR 描述 复位值 7 : 0 接收缓存寄存器,它包含了接收FIFO中最早接收到的字节 未定义 U0RSR移位寄存器从RxD0引脚接收的有效数据将被送到接收FIFO中。通过读取U0RBR寄存器可以将接收FIFO中最早接收到的字节读出,当FIFO中不再包含有效数据时,该寄存器反映接收到的最后一个有效字节数据。接收的数据不足8位时,高位用0填充。 注意: U0RBR只读。访问该寄存器时,U0LCR的除数锁存访问位(DLAB)必须为0。

25 UART0相关寄存器描述 ——发送器保持寄存器 VPB 接口
U0THR U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U0THR U0THR 描述 复位值 7 : 0 发送器保持寄存器,写入该寄存器的值保存到发送FIFO中,当该字节到达FIFO底部时,它将被送入发送移位寄存器(U0TSR)进行发送。 未定义 写入该寄存器的值将是发送FIFO中的最高字节。访问该寄存器时,U0LCR的除数锁存访问位(DLAB)必须为0。 注意: U0THR只写。它的地址与U0RBR相同,通过读/写操作予以区分。

26 BaudRate = FPCLK / ([U0DLM,U0DLL]×16)
UART0相关寄存器描述 ——除数锁存寄存器 U0THR U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL TxD0 U0IIR U0IER U0THR U0TSR U0LCR U0LSR U0DLM U0DLM U0DLL U0DLL RxD0 名称 描述 复位值 U0DLL[7:0] 除数锁存寄存器低字节 两个寄存器一起构成一个16位的除数,决定UART0的波特率。 未定义 U0DLM[7:0] 除数锁存寄存器高字节 这两个寄存器决定波特率时钟的频率,而波特率时钟必须是波特率的16倍。波特率计算公式如下: BaudRate = FPCLK / ([U0DLM,U0DLL]×16) 注意:由于U0DLL、U0DLM寄存器与其它寄存器的地址重叠,所以在访问它们时,U0LCR的除数锁存访问位(DLAB)必须为1。

27 UART0相关寄存器描述 ——中断使能寄存器
U0THR U0TSR TxD0 RxD0 U0LCR U0LSR U0IIR U0IER U0DLM U0DLL U0IER U0IER 描述 复位值 RBR中断使能。1:使能RDA中断;0:禁止RDA中断。 1 THRE中断使能。1:使能THRE中断;0:禁止THRE中断。 2 Rx线状态中断使能。1:禁止Rx线状态中断;0:禁止Rx线状态中断; 该中断状态可从U0LSR[4:1]读出。 7 : 3 保留,用户软件不要向这些位写入1。 未定义 U0IER可以控制UART0的4个中断源。其中RBR中断使能包括两个中断,一个是接收数据可用(RDA)中断,一个是接收超时中断(CTI)。稍后将对各中断源作详细介绍。

28 UART0相关寄存器描述 ——中断标识寄存器
U0THR U0TSR TxD0 RxD0 U0LCR U0LSR U0IIR U0IER U0DLM U0DLL U0IIR U0IIR 描述 复位值 中断挂起。1:没有挂起的中断;0:至少有一个中断被挂起。 3 : 1 中断标识。 这3位表示了对应于UART0 Rx FIFO的中断。未列出的其它组合作为保留值。 011:1. 接收线状态中断(RLS) 010:2a. 接收数据可用中断(RDA) 110:2b. 字符超时指示(CTI) 001:3. 发送中断(THRE) 7 : 3 保留,用户软件不要向这些位写入1。 未定义 U0IIR提供状态代码用于指示一个挂起中断的中断源和优先级。在访问U0IIR过程中,中断被冻结。如果在访问U0IIR时产生了中断,该中断将被记录,在下次访问U0IIR时可以读出,避免了中断的丢失。

29 UART0相关寄存器描述 ——中断标识寄存器 中断源和中断使能的关系 VIC 中断控制器 ARM7TDMI 内核 TxD0 RxD0
U0THR U0TSR TxD0 RxD0 U0LCR U0LSR U0IIR U0IER U0DLM U0DLL U0IIR 中断源和中断使能的关系 VIC 中断控制器 ARM7TDMI 内核 U0IER bit2 bit1 bit0 RLS中断(U0IIR[3:1]=011) RDA中断(U0IIR[3:1]=010) CTI中断(U0IIR[3:1]=110) THRE中断(U0IIR[3:1]=001)

30 UART0相关寄存器描述 ——中断标识寄存器 中断源和中断使能的关系 VIC 中断控制器 ARM7TDMI 内核 TxD0 RxD0
U0THR U0TSR TxD0 RxD0 U0LCR U0LSR U0IIR U0IER U0DLM U0DLL U0IIR 中断源和中断使能的关系 VIC 中断控制器 ARM7TDMI 内核 U0IER bit2 bit1 bit0 优先级 最高 第二 第三 RLS中断 RDA中断 CTI中断 THRE中断

31 UART0相关寄存器描述 ——中断源说明 RLS中断:该中断为最高优先级。它在UART0产生了四个错误条件(溢出错误(OE)、奇偶错误(PE)、帧错误(FE)和间隔中断(BI))中的任意一个时置位。通过查看U0LSR[4:1]可以了解到产生该中断的错误条件。读取U0LSR时清除该中断;

32 UART0相关寄存器描述 ——中断源说明 RDA中断:该中断与CTI中断并列为第二优先级。当接收的有效数据到达接收FIFO设置寄存器(U0FCR)中设置的触发点时,RDA被激活。当接收FIFO中的有效数据少于触发点时,RDA复位; 接收FIFO 1 2 3 4 5 6 7 9 10 11 12 13 14 15 16 8 触发点设置=8 U0RBR U0RSR RxD0 U0IIR[3:1] xxx U0IIR[0] DATA 1.移位寄存器(U0RSR)从RxD0引脚接收串行数据后,送入接收FIFO中; 010 xxx 1 2.当接收FIFO中的有效数据数量到达预定的触发点时,置位RDA中断; 3.从U0RBR寄存器中读取FIFO中最早到达的数据,当FIFO中的有效数据小于预定触发点时,清零RDA中断;

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

34 UART0相关寄存器描述 ——中断源说明 CTI中断:该中断为第二优先级。当接收FIFO中的有效数据少于预定的触发点数量,但至少有一个字节时,如果超过接收3.5~4.5个字节所需要的时间仍没有接收到数据,那将触发该中断。对接收FIFO的任何操作都会清零该中断标志; RxD0 U0RSR 1 2 3 4 5 6 7 9 10 11 12 13 14 15 16 8 DATA 说明:“3.5~4.5个字节的时间”,其意思是在串口当前的波特率下,发送3.5~4.5个字节所需要的时间; U0IIR[3:1] xxx U0IIR[0] 1 xxx 1 110 注意:当接收FIFO中存在多个数据,从U0RBR读取数据,但是没有读完所有数据,那么在经过3.5~4.5个字节的时间后将触发CTI中断; 触发点设置=8 U0RBR 接收FIFO

35 UART0相关寄存器描述 ——中断源说明 THRE中断:该中断为第三优先级。当发送FIFO为空并且满足一定的条件时,该中断将被触发。这些条件是: 1.系统启动时,虽然发送FIFO为空,但不会产生THRE中断。 1 2 3 4 5 6 7 9 10 11 12 13 14 15 16 8 U0RBR U0TSR TxD0 U0IIR[3:1] xxx U0IIR[0] 2.在上一次发生THRE中断后,向发送FIFO中写入1个字节数据,将在延时一个字节加上一个停止位后发生THRE中断。 DATA 这是因为:如果发送移位寄存器为空,那么写入发送FIFO的数据将直接进入发送移位寄存器; 3.如果在发送FIFO中有过两个字节以上的数据,但是现在发送FIFO为空时,将立即触发THRE中断。 发送FIFO 此时发送FIFO仍然为空,如果立即产生THRE中断,就会影响紧接着要写入发送FIFO的数据; 当THRE中断为当前有效的最高优先级中断时,往U0THR写数据,或者对U0IIR的读操作,将使THRE中断复位。 110 所以在发送完该字节以及一个停止位后,才产生THRE中断; U0TSR

36 UART0相关寄存器描述 ——FIFO控制寄存器 VPB 接口 EnFIFO:FIFO使能。该位的任何变化都将清空UART0的FIFO。
U0THR U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U0FCR 7 6 [5 : 3] 2 1 功能 Rx触发点设置 复位TxFIFO 复位RxFIFO 使能FIFO EnFIFO:FIFO使能。该位的任何变化都将清空UART0的FIFO。 1:使能UART0的接收和发送FIFO,并且允许访问U0FCR[7:1]。 0:禁止接收FIFO,此时接收缓存只有1个字节。而发送FIFO不会被关闭。 U0FCR控制UART0接收和发送FIFO的操作。

37 UART0相关寄存器描述 ——FIFO控制寄存器 VPB 接口
U0THR U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U0FCR 7 6 [5 : 3] 2 1 功能 Rx触发点设置 复位TxFIFO 复位RxFIFO 使能FIFO 复位RxFIFO:接收FIFO复位。当该位置位时,UART0接收FIFO中的所有字节被清零并复位指针逻辑。 注意:该位会自动清零。

38 UART0相关寄存器描述 ——FIFO控制寄存器 VPB 接口
U0THR U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U0FCR 7 6 [5 : 3] 2 1 功能 Rx触发点设置 复位TxFIFO 复位RxFIFO 使能FIFO 复位TxFIFO:发送FIFO复位。当该位置位时,UART0发送FIFO中的所有字节被清零并复位指针逻辑。 注意:该位会自动清零。

39 UART0相关寄存器描述 ——FIFO控制寄存器 VPB 接口 —:这些位保留,用户程序不要向这些位写入1。 TxD0 RxD0
U0THR U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U0FCR 7 6 [5 : 3] 2 1 功能 Rx触发点设置 复位TxFIFO 复位RxFIFO 使能FIFO —:这些位保留,用户程序不要向这些位写入1。

40 UART0相关寄存器描述 ——FIFO控制寄存器 VPB 接口
U0THR U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U0FCR 7 6 [5 : 3] 2 1 功能 Rx触发点设置 复位TxFIFO 复位RxFIFO 使能FIFO Rx触发点设置:通过设置这两位可以调整接收FIFO中触发RDA中断的有效字节数量。 00:触发点0(1字节); 01:触发点1(4字节); 10:触发点2(8字节); 11:触发点3(14字节);

41 UART0相关寄存器描述 ——线状态控制寄存器 VPB UART数据帧结构 接口 U0LCR寄存器: P 1 D0 D1 D2 D3 D4
U0THR U0TSR TxD0 U0LCR U0LSR U0IIR U0IER U0DLM U0DLL U0THR U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U0LCR UART数据帧结构 停止位(1~2位) 奇偶校验位(可选) 数据(5~8位) 起始位 P 1 D0 D1 D2 D3 D4 D5 D6 D7 U0LCR寄存器: 7 6 [5 : 4] 2 [1 :0] 功能 除数锁存 间隔 奇偶选择 奇偶设置 停止位 字长 U0LCR控制发送和接收数据帧的格式。

42 UART0相关寄存器描述 ——线状态控制寄存器 VPB 接口 字长:这些位控制数据长度。 TxD0 RxD0 与CPU内核相连 TxD0 位
U0THR U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U0THR U0TSR TxD0 U0LCR U0LSR U0IIR U0IER U0DLM U0DLL U0LCR 7 6 [5 : 4] 2 [1 :0] 功能 除数锁存 间隔 奇偶选择 奇偶设置 停止位 字长 字长:这些位控制数据长度。 00:5位字符长度; 01:6位字符长度; 10:7位字符长度; 11:8位字符长度; 7 6 [5 : 4] 2 [1 :0] 功能 除数锁存 间隔 奇偶选择 奇偶设置 停止位 字长

43 UART0相关寄存器描述 ——线状态控制寄存器 VPB 接口 停止位:控制每帧数据包含的停止位个数。 TxD0 RxD0 与CPU内核相连
U0THR U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U0LCR 7 6 [5 : 4] 2 [1 :0] 功能 除数锁存 间隔 奇偶选择 奇偶设置 停止位 字长 停止位:控制每帧数据包含的停止位个数。 0:1个停止位; 1:2个停止位;

44 UART0相关寄存器描述 ——线状态控制寄存器 VPB 接口 奇偶使能:控制是否进行奇偶校验。如果使能,发送时将添加一位校验位。
U0THR U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U0LCR 7 6 [5 : 4] 2 [1 :0] 功能 除数锁存 间隔 奇偶选择 奇偶使能 停止位 字长 奇偶使能:控制是否进行奇偶校验。如果使能,发送时将添加一位校验位。 0:禁止奇偶产生和校验; 1:使能奇偶产生和校验; 奇偶选择:设置奇偶校验类型。 00:奇数(数据位+校验位=奇数); 01:偶数(数据位+校验位=偶数); 10:校验位强制为1; 11:校验位强制为0;

45 UART0相关寄存器描述 ——线状态控制寄存器 VPB 接口
U0THR U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U0LCR 7 6 [5 : 4] 2 [1 :0] 功能 除数锁存 间隔 奇偶选择 奇偶使能 停止位 字长 间隔:当该位为1时,输出引脚(TxD0)强制为逻辑0,可以引起通信对方(LPC2000)产生间隔中断。在某些通信方式中,使用间隔中断作为通信的起始信号(如:LIN Bus)。 0:禁止间隔发送; 1:使能间隔发送;

46 UART0相关寄存器描述 ——线状态控制寄存器 VPB 接口
U0THR U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U0LCR 7 6 [5 : 4] 2 [1 :0] 功能 除数锁存 间隔 奇偶选择 奇偶使能 停止位 字长 除数锁存:因为U0DLL和U0RBR/U0THR的地址重叠,通过设置该位可以指定其中某个寄存器操作。 0:禁止访问除数锁存寄存器; 1:使能访问除数锁存寄存器;

47 UART0相关寄存器描述 ——线状态寄存器 VPB 接口 RDR:接收数据就绪。判断该位是否置一,决定能否从FIFO中读取数据。
U0THR U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U0LSR 7 6 5 4 3 2 1 功能 RXFE TEMT THRE BI FE PE OE RDR RDR:接收数据就绪。判断该位是否置一,决定能否从FIFO中读取数据。 0:U0RBR为空; 1:U0RBR中包含有效数据。从接收FIFO中读走所有数据后,恢复为0。 U0LSR为只读寄存器,它反映了UART0接收和发送模块的状态信息。

48 UART0相关寄存器描述 ——线状态寄存器 VPB 接口
U0THR U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U0LSR 7 6 5 4 3 2 1 功能 RXFE TEMT THRE BI FE PE OE RDR OE:溢出错误标志。当U0RBR寄存器中已经有新的字符就绪,而接收FIFO已满时,该位置位。 0:接收缓存区没有溢出; 1:接收缓存区发生溢出错误。

49 UART0相关寄存器描述 ——线状态寄存器 VPB 接口
U0THR U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U0LSR 7 6 5 4 3 2 1 功能 RXFE TEMT THRE BI FE PE OE RDR PE:奇偶校验错误。在使能奇偶校验位之后,对所有接收的数据都进行奇偶校验,如果与U0LCR中的设置不符,将引起奇偶校验错误。 0:没有发生奇偶校验错误; 1:发生奇偶校验错误。读操作使该位恢复为0。

50 UART0相关寄存器描述 ——线状态寄存器 VPB 接口 FE:帧错误标志。当接收字符的停止位为0时,产生帧错误。 0:没有发生帧错误;
U0THR U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U0LSR 7 6 5 4 3 2 1 功能 RXFE TEMT THRE BI FE PE OE RDR FE:帧错误标志。当接收字符的停止位为0时,产生帧错误。 0:没有发生帧错误; 1:发生帧错误。读取该位时恢复为0。

51 UART0相关寄存器描述 ——线状态寄存器 VPB 接口
U0THR U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U0LSR 7 6 5 4 3 2 1 功能 RXFE TEMT THRE BI FE PE OE RDR BI:间隔中断标志。在发送数据时,如果RXD0引脚保持低电平,将产生间隔中断。发生间隔中断后,接收模块停止数据接收。 0:没有发生间隔中断; 1:发生间隔中断。

52 UART0相关寄存器描述 ——线状态寄存器 VPB 接口 THRE:反映U0THR是否为空,也可以认为发送FIFO是否为空。 0:不为空;
U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U0LSR 7 6 5 4 3 2 1 功能 RXFE TEMT THRE BI FE PE OE RDR THRE:反映U0THR是否为空,也可以认为发送FIFO是否为空。 0:不为空; 1:空。对U0THR进行写操作,使该位恢复为0。

53 UART0相关寄存器描述 ——线状态寄存器 VPB 接口 TEMT:当发送移位寄存器和U0THR均为空时,该位置位。 0:不为空;
U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U0LSR 7 6 5 4 3 2 1 功能 RXFE TEMT THRE BI FE PE OE RDR TEMT:当发送移位寄存器和U0THR均为空时,该位置位。 0:不为空; 1:空。对U0THR进行写操作,使该位恢复为0。

54 UART0相关寄存器描述 ——线状态寄存器 VPB 接口
U0THR U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U0LSR 7 6 5 4 3 2 1 功能 RXFE TEMT THRE BI FE PE OE RDR RXFE:如果一个带有接收错误(如帧错误、奇偶错误或间隔中断)的字符装入U0RBR时,该位置位。 0:U0RBR中没有接收错误,或U0FCR[0]为0; 1:U0RBR中包含至少一个UART0 Rx错误。

55 5.10 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/(16×baud);

56 设置引脚连接模块将对应IO连接到UART0
设置串口波特率 设置串口工作模式 发送或接收数据 检查串口状态字或 等待串口中断

57 UART0应用示例——初始化代码 UART0初始化代码: #define UART_BPS 115200 定义表示波特率的宏,方便修改
Void UART0_Ini(void) { uint16 Fdiv; PINSEL0 = 0x ; U0LCR = 0x83; Fdiv = (Fpclk / 16) / UART_BPS; U0DLM = Fdiv / 256; U0LLM = Fdiv % 256; U0LCR = 0x03; } 定义表示波特率的宏,方便修改 设置引脚连接模块 置位除数锁存位 根据波特率计算分频值 设置除数寄存器 (除数锁存访问位必须置位) 清除除数锁存位,并设置工作模式

58 设置引脚连接模块将对应IO连接到UART0
#define UART_BPS Void UART0_Ini(void) { uint16 Fdiv; PINSEL0 = 0x ; U0LCR = 0x83; Fdiv = (Fpclk / 16) / UART_BPS; U0DLM = Fdiv / 256; U0LLM = Fdiv % 256; U0LCR = 0x03; } 设置引脚连接模块将对应IO连接到UART0 设置串口波特率 设置串口工作模式 发送或接收数据 检查串口状态字或 等待串口中断

59 UART0应用示例——收发数据 查询方式发送一字节数据: 查询方式接收一字节数据:
void UART0_SendByte(uint8 data) { U0THR = data; while((U0LSR & 0x40) == 0); } 将要发送的一字节数据写入U0THR 等待数据发送完毕 查询方式接收一字节数据: uint8 UART0_RcvByte(void) { uint8 rcv_data; while((U0LSR & 0x01) == 0); rcv_data = U0RBR; return(rcv_data); } 等待数据到达 从U0RBR中读出接收的数据 返回接收的数据

60 第5章 目录 1.简介 2.引脚配置 3.存储器寻址 4.系统控制模块 5.存储器加速模块 6.外部存储器控制器 7.引脚连接模块
第5章 目录 1.简介 2.引脚配置 3.存储器寻址 4.系统控制模块 5.存储器加速模块 6.外部存储器控制器 7.引脚连接模块 8. 向量中断控制器 9.GPIO 10.UART0 11.UART1 12.I2C接口 13.SPI接口 14.定时器0/1 15.脉宽调制器(PWM) 16.A/D转换器 17.实时时钟 18.看门狗

61 5.11 UART1 特性 UART1与UART0基本功能相同,但是增加了一个调制解调器(Modem)接口。所以UART1具有UART0的所有特性。 16字节接收FIFO和16字节发送FIFO; 寄存器位置符合16C550工业标准; 接收FIFO触发点可设置为1、4、8或14字节; 内置波特率发生器。

62 使用UART1通信 UART1具有一个标准的Modem接口,这些引脚为: 引脚名称 类型 描述 RxD1 输入 串行输入,接收数据 TxD1
输出 串行输出,发送数据 CTS1 清除发送,指示外部modem的接收是否已经准备就绪。低电平有效,表示UART1数据可通过TxD1发送。 DCD1 数据载波检测,指示外部modem是否已经与UART1建立了通信连接。低电平有效,表示可以进行数据交换。 DSR1 数据设备就绪,指示外部modem是否准备建立与UART1的连接,低电平有效。 DTR1 数据终端就绪,有效低电平指示UART1准备建立与外部modem的连接。 RI1 铃响指示,指示modem检测到电话的响铃信号,低电平有效。 RTS1 请求发送,指示UART1打算向外部modem发送数据,低电平有效。

63 使用UART1通信 通过PINSEL0寄存器设置来决定是否使用UART1的Modem接口,当使用Modem接口时,需要一个RS232转换器将信号转换为RS232电平后,才能与Modem连接。如果不使用Modem接口功能,UART1与UART0的操作是一样,那么其它的接口可作为GPIO使用。 LPC2000 PC机串口 RS232 电平转换 TxD1 RxD1 TxD0 RxD0 RTS CTS DSR1 DTR1 DCD1 RI1

64 UART1内部结构示意图 UART1的结构与UART0类似,在其基础上增加了控制MODEM接口的寄存器。 UART0内部结构 VPB 接口
U0THR U0TSR TxD0 U0RBR U0RSR RxD0 U0LCR U0LSR U0IIR U0IER VPB 接口 U0FCR 与CPU内核相连 U0DLM U0DLL U1THR U1TSR TxD0 U1RBR U1RSR RxD0 U1LCR U1LSR U1IIR U1IER VPB 接口 U1FCR 与CPU内核相连 U1DLM U1DLL MODEM U1MSR U1MCR CTS DSR RI DCD DTR RTS UART0内部结构

65 5.11 UART1 UART1寄存器描述 UART1包含12个8位寄存器,其中大部分寄存器与UART0类似,所以仅介绍不同之处。 位 7
6 5 4 3 2 1 U1IER 使能Modem中断 使能Rx线状态中断 使能THRE 中断 使能Rx数据可用中断 U1MCR 回送 RTS DTR U1MSR DCD RI DSR CTS Delta DCD 后沿RI Delta DSR Delta CTS

66 5.11 UART1 UART1寄存器描述 ——中断使能寄存器 使能Modem中断:当该位置位时,允许Modem中断。
7 6 5 4 3 2 1 U1IER 使能Modem中断 使能Rx线状态中断 使能THRE 中断 使能Rx数据可用中断 使能Modem中断:当该位置位时,允许Modem中断。 Modem中断为最低优先级中断,只要在Modem输入引脚DCD、DSR或CTS上发生任何状态变化,该中断就会激活。此外,Modem输入口RI上出现由低到高的电平跳变会产生一个Modem中断。Modem中断源可通过检查U1MSR[3:0]得到。读取U1MSR将清除Modem中断。 Mdoem中断在U0IIR中的标志为0x00。

67 5.11 UART1 UART1寄存器描述 ——Modem控制寄存器 该寄存器使能Modem的回写模式,并控制Modem的输出信号。 位
功能 功能描述 DTR控制 选择Modem输出引脚DTR。该位在回写模式激活时读出为0。 1 RTS控制 选择Modem输出引脚RTS。该位在回写模式激活时读出为0。 3 : 2 保留 用户软件不要向该位写入1 4 回写模式 0:禁止modem回写模式 1:使能modem回写模式 modem回写模式提供了一个执行回写测试的诊断机制。 7 : 5

68 5.11 UART1 UART1寄存器描述 ——回写模式 在Modem回写模式下,发送器输出的串行数据在内部连接到接收器的串行输入端。输入脚RxD1对回写模式无影响,输出脚TxD1保持总为1的状态。 4个modem输入(CTS, DSR, RI和DCD)与外部断开,并在内部与4个modem输入连接。这样连接的结果是U1MSR的高4位由U1MCR的低4位驱动。这样在回写模式下,写U1MCR的低4位就可产生modem状态中断。

69 UART1寄存器描述 ——Modem状态寄存器
该寄存器为只读,它反映Modem输入信号的状态信息。需要注意的是,Mdoem信号对UART1的操作没有直接影响,Modem信号的操作是通过软件来实现的。 功能 功能描述 Delta CTS 检测到CTS状态发生变化时,该位置位。读取U1MSR时清零。 1 Delta DSR 检测到DSR状态发生变化时,该位置位。读取U1MSR时清零。 2 后沿 RI 检测到RI状态发生变化时,该位置位。读取U1MSR时清零。 3 Delta DCD 检测到DCD状态发生变化时,该位置位。读取U1MSR时清零。 4 CTS 反映输入信号CTS的补码。回写模式下该位连接U1MCR的bit1。 5 DSR 反映输入信号DSR的补码。回写模式下该位连接U1MCR的bit0。 6 RI 反映输入信号RI的补码。回写模式下该位连接U1MCR的bit2。 7 DCD 反映输入信号DCD的补码。回写模式下该位连接U1MCR的bit1。

70 第5章 目录 1.简介 2.引脚配置 3.存储器寻址 4.系统控制模块 5.存储器加速模块 6.外部存储器控制器 7.引脚连接模块
第5章 目录 1.简介 2.引脚配置 3.存储器寻址 4.系统控制模块 5.存储器加速模块 6.外部存储器控制器 7.引脚连接模块 8. 向量中断控制器 9.GPIO 10.UART0 11.UART1 12.I2C接口 13.SPI接口 14.定时器0/1 15.脉宽调制器(PWM) 16.A/D转换器 17.实时时钟 18.看门狗

71 5.12 I2C接口 特性 LPC2000系列微控制器具有一到两个标准的I2C接口,它具有如下特性: 可配置为主机、从机或主/从机;
可编程时钟可实现通讯速率控制; 主机从机之间双向数据传输; 同时发送的主机之间进行仲裁,避免了总线数据的冲突。

72 5.12 I2C接口 I2C简介 I2C接口是Philips推出的一种串行总线方式,用于IC器件之间的通信。它通过SDA(串行数据线)和SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并通过软件寻址识别每个器件,而不需要片选线。 I2C接口的标准传输速率为100Kbit/s,最高传输速率可达400Kbit/s。

73 5.12 I2C接口 I2C简介——电气连接 I2C总线接口均为开漏或开集电极输出,因此需要为总线增加上拉电阻Rp。
总线速率越高,总线上拉电阻就越小,100Kbit/s总线速率,通常使用5.1K欧姆的上拉电阻

74 I2C简介——总线时序 在数据传送过程中,必须确认数据传送的开始和结束,这通过起始和结束信号识别。
起始信号 结束信号 SDA SCL S P 发送起始信号后传送的第一字节数据具有特别的意义,其中前七位为从机地址,最后一位为读写方向位(0表示写,1表示读)。 S 从器件地址 R/W 第一字节

75 I2C简介——总线时序 I2C总线数据传送时,每传送一个字节数据后都必须有应答信号(A)。主控器接收数据时,如果要结束通信时,将在停止位之前发送非应答信号( )。 SDA SCL 应答信号 非应答信号 A

76 I2C简介——总线时序 LPC2000在I2C通信中可以配置为主控器也可以作为被控器,那么它就具有4种操作模式:主发送模式、主接收模式、从发送模式和从接收模式。 S 从器件地址 W A 数据 数据… A/ P 主发送模式: S 从器件地址 R A 数据 数据… P 主接收模式: S 从器件地址 W A 数据 数据… A/ P/RS 从发送模式: S 从器件地址 R A 数据 数据… P 从接收模式: 主机到从机 A = 应答(SDA为低) A = 非应答(SDA为高) S = 起始信号 P = 停止信号 RS = 重复起始信号

77 5.12 I2C接口 寄存器描述 I2C接口包含7个寄存器。 名称 描述 访问 复位值 地址 I2CONSET I2C控制置位寄存器
读/置位 0xE001C000 I2STAT I2C状态寄存器 只读 0xF8 0xE001C004 I2DAT I2C数据寄存器 读/写 0xE001C008 I2ADR I2C从地址寄存器 0xE001C00C I2SCLH SCL占空比寄存器高半字 0x04 0xE001C010 I2SCLL SCL占空比寄存器低半字 0xE001C014 I2CONCLR I2C控制清零寄存器 只清零 NA 0xE001C018

78 寄存器描述——I2C控制置位寄存器 I2CONSET寄存器用于置位I2C通信的相关标志位,该寄存器只能对某位置位,而不能清零,清零通过I2CONCLR寄存器完成。 功能 描述 复位值 1:0 保留 用户程序不要向这些位写入1 NA 2 AA 应答标志 3 SI I2C中断标志 4 STO 停止标志 5 STA 起始标志 6 I2EN I2C接口使能 7 用户程序不要向该位写入1

79 寄存器描述——I2C控制置位寄存器 AA:为声明应答标志。
7 6 5 4 3 2 1 : 0 功能 保留 I2EN STA STO SI AA AA:为声明应答标志。 当该位置位时,在SCL线的应答时钟脉冲内,出现下面的任意条件之一将产生一个应答信号(SDA线为低电平): 接收到从地址寄存器中的地址。 当I2ADR中的通用调用位(GC)置位时,接收到通用调用地址。 当I2C接口处于主接收模式时,接收到一个数据字节。 当I2C接口处于可寻址的从接收模式时,接收到一个数据字节。 向I2CONCLR寄存器中的AAC位写入1会使AA位清零。当AA为零时,在SCL线的应答时钟脉冲内,出现下列情况将返回一个非应答信号(SDA线为高电平): 功能 描述 复位值 1 : 0 保留 用户程序不要向这些位写入1 NA 2 AA 应答标志 3 SI I2C中断标志 4 STO 停止标志 5 STA 起始标志 6 I2EN I2C接口使能 7 用户程序不要向该位写入1

80 寄存器描述——I2C控制置位寄存器 SI:为I2C中断标志。
7 6 5 4 3 2 1 : 0 功能 保留 I2EN STA STO SI AA SI:为I2C中断标志。 当进入25种可能的I2C状态中的任何一个后,该位置位。通常,I2C中断只在空闲的从器件中用于指示一个起始条件,或在一个空闲的主器件(如果它等待使用I2C总线)中指示一个停止条件。向I2CONCLR寄存器中的SIC位写入1使SI位清零。

81 寄存器描述——I2C控制置位寄存器 STO:为停止标志。
7 6 5 4 3 2 1 : 0 功能 保留 I2EN STA STO SI AA STO:为停止标志。 当STO为1时,在主模式中,向I2C总线发送一个停止条件或在从模式中使总线从错误状态中恢复。当总线检测到停止条件时,STO自动清零。 在从模式中,置位STO位可从错误状态中恢复。这种情况下不向总线发送停止条件。硬件的表现就好像是接收到一个停止条件并切换到不可寻址的从接收模式。STO标志由硬件自动清零。

82 寄存器描述——I2C控制置位寄存器 STA:为起始标志。
7 6 5 4 3 2 1 : 0 功能 保留 I2EN STA STO SI AA STA:为起始标志。 当STA=1时,I2C接口进入主模式并发送一个起始条件,如果已经处于主模式,则发送一个重复起始条件。 STA可在任何时候置位,当I2C接口处于可寻址的从模式时,STA也可以置位。

83 寄存器描述——I2C控制置位寄存器 7 6 5 4 3 2 1 : 0 功能 保留 I2EN STA STO SI AA I2EN:为I2C接口使能。 当该位置位时,使能I2C接口。向I2CONCLR寄存器中的I2ENC位写入1将使I2EN位清零。当I2EN位为0时,I2C功能被禁止。

84 寄存器描述——I2C控制清零寄存器 I2CONCLR寄存器与I2CONSET寄存器的功能相反,它用于清零I2C通信的相关标志位,该寄存器只能对某位清零,而不能置位。 功能 描述 复位值 1:0 保留 用户程序不要向这些位写入1 NA 2 AA 应答标志 3 SI I2C中断标志 4 STO 停止标志 5 STA 起始标志 6 I2EN I2C接口使能 7 用户程序不要向该位写入1

85 寄存器描述——I2C状态寄存器 I2STAT寄存器包含了I2C接口的状态代码,它是一个只读寄存器。一共有26种可能存在的状态代码。当代码为0xF8时,无可用的相关信息,SI位不会置位。所有其它25种状态代码都对应一个已定义的I2C状态。当进入其中一种状态时,SI位将置位。 I2C处理程序就是根据该寄存器反映的状态来进行相应的处理。 功能 描述 复位值 2 : 0 状态 这3个位总是为0 7 : 3 状态位 1

86 寄存器描述——I2C数据寄存器 I2DAT寄存器包含要发送或刚接收的数据。当它没有处理字节的移位时,CPU可对其进行读写。该寄存器只能在SI置位时访问。在SI置位期间,I2DAT中的数据保持稳定。I2DAT中的数据移位总是从右至左进行:第一个发送的位是MSB(位7),在接收字节时,第一个接收到的位存放在I2DAT的MSB。 功能 描述 复位值 7 : 0 数据 发送/接收数据位

87 寄存器描述——I2C从地址寄存器 I2ADR寄存器只能在I2C设置为从模式时才能使用。在主模式中,该寄存器无效。I2ADR的LSB为通用调用位。当该位置位时,通用调用位(0x00)被识别(即可以对广播地址0x00作出响应)。 功能 描述 复位值 GC 通用调用位 7 : 1 地址 从模式地址

88 位频率 = Fpclk / (I2SCLH + I2SCLL)
寄存器描述——I2C占空比寄存器 I2SCLH、I2SCLL寄存器用于控制I2C通信的波特率。其中I2SCLH定义SCL高电平所保持的PCLK周期数,而I2SCLL定义SCL低电平所保持的PCLK周期数。那么位频率(即总线速率)由下面的公式得出: 位频率 = Fpclk / (I2SCLH + I2SCLL) 寄存器 功能 描述 复位值 I2SCLH 计数值 SCL高电平周期占用PCLK周期数 0x04 I2SCLL SCL低电平周期占用PCLK周期数 I2SCLL I2SCLH

89 5.12 I2C接口 使用I2C接口的注意要点 I2C接口的引脚为开漏输出,必须在I2C总线上接上拉电阻。通信速率越快,电阻值越小;
总线上各器件的地址不能冲突; 编程时需要仔细处理每个状态,注意各状态之间的转移关系。

90 5.12 I2C接口 I2C应用示例 LPC2000对于I2C通信的处理是基于状态标志进行的,不同的模式之间具有相通的分析方法,这里仅介绍常用的主发送和主接收模式。

91 ——主模式设置 I2C应用示例 主模式初始化流程 设置引脚连接模块 (PINSEL0) 设置通信波特率 (I2SCLH、I2SCLL)
(I2CONSET) 设置中断向量 (VICxxx)

92 ——主模式设置 I2C应用示例 初始化代码 主模式初始化流程 主模式初始化流程 设置引脚连接模块 (PINSEL0) 设置通信波特率
(I2SCLH、I2SCLL) 使能主I2C (I2CONSET) 设置中断向量 (VICxxx) 主模式初始化流程 设置引脚连接模块 (PINSEL0) 设置通信波特率 (I2SCLH、I2SCLL) 使能主I2C (I2CONSET) 设置中断向量 (VICxxx) 主模式初始化流程 Void I2C_init(uint32 fi2c) { if(fi2c > ) fi2c = ; PINSEL0 = (PINSEL0 & 0xFFFFFF0F) | 0x05; I2SCLH = (Fpclk / fi2c + 1) / 2; I2SCLL = (Fpclk / fi2c) / 2; I2CONCLR = 0x2C; I2CONSET = 0x40; VICIntSelect = 0x ; VICVectCntl0 = 0x29; VICVectAddr0 = (int)IRQ_I2C; VICIntEnable = 0x0200; } 传入参数为I2C时钟频率 过滤传入参数,最高400K时钟频率

93 ——主机发送 I2C应用示例 LPC2000在该模式下作为主控器,向从机发送数据。数据流向如下图所示: LPC2000(主)

94 ——主机发送 I2C应用示例 主模式数据发送的时序格式 S 从器件地址 W A 数据 数据… A/ P
每发送完一个字节数据,接收数据的器件就发送一个应答位 起始位,用于指示传输的开始。 结束位,用于指示传输的结束。 第一字节的前七位包含接收器件的从地址,第8位表示为写操作。

95 ——主机发送 I2C应用示例 主模式数据发送的时序格式 通过软件置位STA进入I2C主发送模式,I2C逻辑在总线空闲后立即发送一个起始信号;
从器件地址 W A 数据 数据… A/ P (1) (2) (3) (3) (4) 通过软件置位STA进入I2C主发送模式,I2C逻辑在总线空闲后立即发送一个起始信号; 在起始信号发送结束后,SI置位。将从机地址和写操作位装入I2DAT,然后清零SI,将第一字节数据发出; 当从机地址和W位发送结束并收到应答位(A)后,SI位再次置位。此时将要发送的数据装入I2DAT,开始发送数据; 在数据正确发送后,SI置位。此时如果要结束本次操作,那么置位STO位,发送结束信号。

96 ——主机发送 I2C应用示例 主模式数据发送的时序格式
S 从器件地址 W A 数据 数据… A/ P 0x08 0x18 0x28 0x30 正确的状态号 0x20 0x30 0x38 错误的状态号 在通信过程中,随着通信阶段的不同,I2STAT寄存器中的状态号也相应的变化,并引起中断。在中断服务程序中,根据当前的状态号来决定下一步的处理。如果当前的状态号不符合正常操作的流程,那么就要作出相应的错误处理,比如重新启动总线等。

97 主模式数据发送流程图 调用函数 ISendStr() 设置I2C中断处理所需的全局变量(如从机地址) 你要发送数据 IRQ_I2C()
清除STA、SI和AA标志位 置位STA,启动I2C总线 读取I2C操作完成标志I2C_end 判断操作是否正确,然后返回 I2C_end=1? Y N 读取I2C状态码 (即I2CSTAT) 根据状态码进行相应的处理(状态码08H、18H、20H、28H、38H) 按全局变量的设置进行数据操作及设置软件标志 清除中断逻辑,然后中断返回 主模式数据发送流程图

98 ——主机接收 I2C应用示例 LPC2000在该模式下作为主控器,接收从机发出的数据。数据流向如下图所示: LPC2000(主)

99 ——主机接收 I2C应用示例 主模式数据接收的时序格式 主接收模式: S 从器件地址 R A 数据 数据… P 起始位,用于指示传输的开始。
结束位,用于指示传输的结束。 第一字节的前七位包含接收器件的从地址,第8位为1,表示读操作。 每接收完一个字节数据,就发送一个应答位。在接收最后一个字节数据后,发送非应答位,通知从机停止发送数据。

100 ——主机接收 I2C应用示例 主模式数据接收的时序格式 主接收模式:
S 从器件地址 R A 数据 数据… P 主接收模式: (1) (2) (3) (4) (4) 通过软件置位STA进入I2C主发送模式,I2C逻辑在总线空闲后立即发送一个起始信号; 在起始信号发送结束后,SI置位。将从机地址和读操作位装入I2DAT,然后清零SI,将第一字节数据发出; 当从机地址和R位发送结束并收到应答位(A)后,SI位再次置位。此时设置AA位,然后清零SI位,开始接收数据; 每接收到一字节数据,SI位再次置位,此时可以再次接收数据,或者置位STO结束总线。

101 ——主机接收 I2C应用示例 主模式数据接收的时序格式
S 从器件地址 R A 数据 数据… P 主接收模式: 0x08 0x40 0x50 0x58 正确的状态号 0x38 0x58 0x48 错误的状态号 在通信过程中,随着通信阶段的不同,I2STAT寄存器中的状态号也相应的变化,并引起中断。在中断服务程序中,根据当前的状态号来决定下一步的处理。如果当前的状态号不符合正常操作的流程,那么就要作出相应的错误处理,比如重新启动总线等。

102 主模式数据接收流程图 调用函数 ISendStr() 设置I2C中断处理所需的全局变量(如从机地址) 你要发送数据 IRQ_I2C()
清除STA、SI和AA标志位 置位STA,启动I2C总线 读取I2C操作完成标志I2C_end 判断操作是否正确,然后返回 I2C_end=1? Y N 读取I2C状态码 (即I2CSTAT) 根据状态码进行相应的处理(状态码08H、38H、40H、48H、50H、58H) 按全局变量的设置进行数据操作及设置软件标志 清除中断逻辑,然后中断返回

103 第5章 目录 1.简介 2.引脚配置 3.存储器寻址 4.系统控制模块 5.存储器加速模块 6.外部存储器控制器 7.引脚连接模块
第5章 目录 1.简介 2.引脚配置 3.存储器寻址 4.系统控制模块 5.存储器加速模块 6.外部存储器控制器 7.引脚连接模块 8. 向量中断控制器 9.GPIO 10.UART0 11.UART1 12.I2C接口 13.SPI接口 14.定时器0/1 15.脉宽调制器(PWM) 16.A/D转换器 17.实时时钟 18.看门狗

104 5.13 SPI接口 特性 大部分LPC2000系列微控制器具有两个硬件SPI接口(LPC2104/LPC2105/LPC2106只有一个),它们具有如下特性: 完全独立的SPI控制器; 遵循同步串行接口(SPI)规范; 全双工数据通信; 可配置为SPI主机或从机; 最大数据位速率为外设时钟Fpclk的1/8。

105 5.13 SPI接口 SPI简介 SPI是一种全双工的同步串行接口,一个SPI总线可以连接多个主机和多个从机。在同一时刻只允许一个主机操作总线,并且同时只能和一个从机通信。 串行时钟由主机产生,当主机发送一字节数据(通过MOSI)的同时,从机返回一字节数据(通过MISO)。

106 SPI电气连接 使用SPI通信需要4个引脚,分别为: LPC2000 SPI从机1 SPI主机 SPI从机2 引脚名称 类型 描述 SCK
输入/输出 串行时钟,用于同步SPI接口间数据传输的时钟信号。该时钟信号总是由主机输出。 SSEL 输入 从机选择,SPI从机选择信号是一个低有效信号,用于指示被选择参与数据传输的从机。每个从机都有各自特定的从机选择输入信号。 MISO 主入从出,MISO信号是一个单向的信号,它将数据由从机传输到主机。 MOSI 主出从入,MOSI信号是一个单向的信号,它将数据从主机传输到从机。 SPI主机 LPC2000 SPI从机1 SPI从机2 SSEL SPI BUS P0.1 P0.2 nCS 作SPI主机时,SSEL要接上拉电阻

107 SPI传输时序 时钟信号 极性0 极性1 从机选择 时钟相位为0 时钟前沿数据采样 时钟前沿采样 时钟后沿数据输出 时钟后沿输出
时钟前沿输出 时钟后沿采样 时钟前沿采样 时钟后沿输出 时钟相位为1 时钟前沿数据输出 时钟后沿数据采样

108 SPI工作模式 LPC2000在SPI通信中可作为从机也可以作为主机,这取决于硬件设计和软件设置。
当器件作为主机时,使用一个IO引脚拉低相应从机的选择引脚(SSEL),传输的起始由主机发送数据来启动,时钟(SCK)信号由主机产生。通过MOSI发送数据,同时通过MISO引脚接收从机发出的数据。 当器件作为从机时,传输在从机选择引脚(SSEL)被主机拉低后开始,接收主机输出的时钟信号,在读取主机数据的同时通过MISO引脚输出数据。

109 SPI接口内部结构 SPI移位寄存器 SPI时钟发生器&检测器 SPI 寄存器接口 SPI状态寄存器 输出使能逻辑 SPI总线 SCK_in
SCK_out SS_in SPI移位寄存器 SPI状态寄存器 SPI时钟发生器&检测器 输出使能逻辑 SPI 寄存器接口 SPI中断 VPB总线 SPI总线 SCK_out_en MOSI_out_en MISO_out_en

110 SPI寄存器描述 名称 描述 访问 复位值 SPI0名称 SPI1名称 SPCR SPI控制寄存器。该寄存器控制SPI的操作模式。 读写
S0SPCR S1SPCR SPSR SPI状态寄存器。该寄存器显示SPI的状态。 只读 S0SPSR S1SPSR SPDR SPI数据寄存器。该双向寄存器为SPI提供发送和接收的数据。发送数据通过写该寄存器提供。SPI接收的数据可以从该寄存器读出。 S0SPDR S1SPDR SPCCR SPI时钟计数寄存器。该寄存器控制主机SCK的频率。 S0SPCCR SPINT SPI中断标志寄存器。该寄存器包含SPI接口的中断标志。 S0SPINT

111 ——SPI控制寄存器 SPI寄存器描述 SPCR寄存器包含一些可编程位来控制SPI功能模块的功能,该寄存器必须在数据传输之前进行设定。 位
7 6 5 4 3 2 : 0 功能 SPIE LSBF MSTR CPOL CPHA 保留 SPCR寄存器包含一些可编程位来控制SPI功能模块的功能,该寄存器必须在数据传输之前进行设定。

112 ——SPI控制寄存器 SPI寄存器描述 CPHA:时钟相位控制。
7 6 5 4 3 2 : 0 功能 SPIE LSBF MSTR CPOL CPHA 保留 CPHA:时钟相位控制。 该位决定SPI传输时数据和时钟的关系,并控制从机传输的起始和结束。当该位为: 1:时钟前沿数据输出,后沿数据采样; 0:时钟前沿数据采样,后沿数据输出;

113 ——SPI控制寄存器 SPI寄存器描述 CPOL:时钟极性控制。 1:SCK为低有效; 0:SCK为高有效; 位 7 6 5 4 3
2 : 0 功能 SPIE LSBF MSTR CPOL CPHA 保留 CPOL:时钟极性控制。 1:SCK为低有效; 0:SCK为高有效;

114 ——SPI控制寄存器 SPI寄存器描述 CPOL:主模式控制。 1:SPI处于主模式; 0:SPI处于从模式; 位 7 6 5 4 3
2 : 0 功能 SPIE LSBF MSTR CPOL CPHA 保留 CPOL:主模式控制。 1:SPI处于主模式; 0:SPI处于从模式;

115 ——SPI控制寄存器 SPI寄存器描述 LSBF:字节移动方向控制。 1:每字节数据从低位(LSB)开始传输;
7 6 5 4 3 2 : 0 功能 SPIE LSBF MSTR CPOL CPHA 保留 LSBF:字节移动方向控制。 1:每字节数据从低位(LSB)开始传输; 0:每字节数据从高位(MSB)开始传输;

116 ——SPI控制寄存器 SPI寄存器描述 SPIE:SPI中断使能。 1:每次SPIF或MODF置位时都会产生硬件中断;
7 6 5 4 3 2 : 0 功能 SPIE LSBF MSTR CPOL CPHA 保留 SPIE:SPI中断使能。 1:每次SPIF或MODF置位时都会产生硬件中断; 0:SPI中断被禁止;

117 ——SPI状态寄存器 SPI寄存器描述 SPSR寄存器为只读寄存器,用于监视SPI功能模块的状态,包括一般性功能和异常状况。 SPSR 功能
复位值 2 :0 保留 用户程序不要向这些保留位写入1。 NA 3 ABRT 从机中止标志。为1时表示发生了从机中止。读取该位清零。 4 MODF 模式错误。为1时表示发生了模式错误。先通过读取该寄存器清零MODF位,再写SPI控制寄存器。 5 ROVR 读溢出。为1时表示发生了读溢出。当读取该寄存器时,该位清零。 6 WCOL 写冲突。为1时表示发生了写冲突。先通过读取该寄存器清零WCOL位,再访问SPI数据寄存器。 7 SPIF SPI传输完成标志。为1时表示一次SPI数据传输完成。当第一次 读取该寄存器时,该位清零。然后才能访问SPI数据寄存器。 注:SPIF不是SPI中断标志。中断标志位于SPINT寄存器中。

118 SPI寄存器描述 ——SPI状态寄存器 读溢出:当SPI功能模块内部读缓冲区包含没有读出的数据,而新的传输已经完成,就会发生读溢出。如果SPIF位置位 (读缓冲区已满),新接收到的数据将会丢失,而状态寄存器的读溢出 (ROVR)位将置位。 写冲突:在SPI数据传输过程当中不应向SPI数据寄存器写入数据。不能向SPI数据寄存器写入数据的时间从传输启动时开始,直到SPIF置位时读取状态寄存器为止。如果在这段时间内写SPI数据寄存器,写入的数据将会丢失,状态寄存器中的写冲突位(WCOL)置位。 模式错误:SSEL信号在SPI功能模块为主机时必须无效,不能用作GPIO。当SPI功能模块为主机时,如果SSEL信号被激活(将SSEL变为低电平),表示有另外一个主机将该器件选择为从机。这种状态称为模式错误。 从机中止:如果SSEL信号在传输结束之前变为高电平,从传输将被认为中止。此时,正在处理的发送或接收数据都将丢失,状态寄存器的从机中止(ABRT)位置位。

119 SPI寄存器描述 ——SPI数据寄存器 SPDR寄存器为SPI提供数据的发送和接收。处于主模式时,向该寄存器写入数据,将启动SPI数据传输。从数据传输开始到SPIF状态位置位并且没有读取状态寄存器的这段时间内不能对该寄存器执行写操作。 SPDR 功能 描述 复位值 7 : 0 数据 SPI双向数据

120 ——SPI时钟计数寄存器 SPI寄存器描述
作为主机时,SPCCR寄存器控制SCK的频率。寄存器的值为一位SCK时钟所占用的PCLK周期数。该寄存器的值必须为偶数,并且必须不小于8。如果寄存器的值不符合以上条件,可能会导致产生不可预测的动作。 SPI速率 = Fpclk / SPCCR SPCCR 功能 描述 复位值 7 : 0 计数值 设定SPI时钟计数值

121 ——SPI中断寄存器 SPI寄存器描述 该寄存器包含SPI接口的中断标志。 SPCCR 功能 描述 复位值 SPI中断
SPI中断 SPI中断标志。向该位写入1清零。 注:当SPIE位置一,并且SPIF和WCOL位种至少有一位为1时,该位置位。但是只有当SPI中断位置位并且SPI中断在VIC种被使能,SPI中断才能有中毒处理软件处理。 7 : 1 保留 用户程序不要向这些位写入1 NA

122 5.13 SPI接口 使用SPI接口的注意要点 作主机时,SSEL引脚必须接上拉电阻,不能作为IO口使用;
作主机时,在发送一字节数据的同时接收一字节数据; SPI时钟分频值必须大于或等于8; 数据寄存器与内部移位寄存器之间没有缓冲区,写SPDR会使数据直接进入移位寄存器。因此数据只能在上一次数据发送完成后写入SPDR寄存器。

123 ——作为主机 SPI应用示例 操作流程 设置SPI时钟速率 (SPCCR) 设置为SPI主机 (SPCR) 选择从机 发送一字节数据
等待数据发送结束 (SPIF) 读出从机发送的数据或释放从机

124 ——作为主机 SPI应用示例 操作流程 操作流程 SPI初始化代码: 设置SPI时钟速率 (SPCCR) 设置为SPI主机 (SPCR)
选择从机 发送一字节数据 启动SPI数据传输 等待数据发送结束 (SPIF) 读出从机发送的数据或释放从机 操作流程 设置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) void MSpiIni(uint8 fdiv) { if(fdiv < 8) fdiv = 8; S0PCCR = fdiv & 0xFE; S0PCR = SPI_MODE; } 过滤分频值,如果小于8为非法

125 ——作为主机 SPI应用示例 操作流程 SPI主机发送和接收程序: 设置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; return(S0PDR); }

126 ——作为从机 SPI应用示例 操作流程 设置为SPI从机 (SPCR) 将要发送的数据放入SPDR 等待数据发送结束 (SPIF)

127 ——作为从机 SPI应用示例 操作流程 操作流程 SPI初始化代码: 设置为SPI从机 (SPCR) 将要发送的数据放入SPDR
等待数据发送结束 (SPIF) 从SPDR中读出接收的数据 操作流程 设置为SPI从机 (SPCR) 将要发送的数据放入SPDR 等待数据发送结束 (SPIF) 从SPDR中读出接收的数据 ;初始化从机 void SSpiIni(uint8 fdiv) { S0PCR = (1 << 4); } ;收发一字节数据 uint8 SSwapData(uint8 data) S0PDR = data; while(0 == (S0PSR & 0x80)); return(S0PDR);

128 ——作为从机 SPI应用示例 操作流程 SPI初始化代码: void SSpiIni(uint8 fdiv) { 设置为SPI从机
(SPCR) 将要发送的数据放入SPDR 等待数据发送结束 (SPIF) 从SPDR中读出接收的数据 void SSpiIni(uint8 fdiv) { S0PCR = (1 << 4); } uint8 SSwapData(uint8 data) S0PDR = data; while(0 == (S0PSR & 0x80)); return(S0PDR);

129


Download ppt "(建议使用Office2003以上版本播放,将有更丰富的动画效果)"

Similar presentations


Ads by Google