1.通用输入输出
1.1. 模块介绍
每组 GPIO 端口有四个32位配置寄存器(GPIOx_MODE,GPIOx_OTYPE, GPIOx_OSPEED and GPIOx_PUPD),两个32位数据寄存器(GPIOx_IDAT and GPIOx_ODAT),一个32位置位/复位寄存器(GPIOx_BSR)和一个32位翻转寄存器(GPIOx_TGL)。另外,所有GPIO 有两个复用功能选择寄存器 (GPIOx_AFRH and GPIOx_AFRL)。
注:GPIOx 中的 x 表示 GPIO 组数。
1.2. 功能特点
• 输出状态:推挽或开漏(上下拉)
• 输出寄存器状态值(GPIOx_ODAT) 或者复用功能输出
• 输入状态:浮空、上下拉、模拟
• 输入数据到数据寄存器(GPIOx_IDAT) 或复用功能输入
• 独立置位/复位/翻转 IO 状态(GPIOx_ BSR、GPIOx_TGL)
• 模拟功能
• 复用功能(开漏或推挽、上拉或下拉)
1.3. 功能说明
GPIO 的每一个端口可以通过软件独立配置成下面状态
• 输入浮空
• 输入上拉
• 输入下拉
• 模拟功能
• 开漏输出(上拉或下拉)
• 推挽输出
• 复用功能(开漏或推挽、上拉或下拉)
1.3.1. 通用 IO(GPIO)
复位期间和刚复位后,复用功能未开启,IO 端口被配置成浮空输入模式。
当作为输出配置时,写到输出数据寄存器上的值(GPIOx_ ODAT)输出到相应的 IO 引脚。可以以推挽或开漏模式使用输出驱动器。
输入数据寄存器(GPIOx_ IDAT)在每个 APB 时钟周期捕捉 IO 引脚上的数据。
所有 GPIO 引脚有一个内部弱上拉,当配置为输入时,它们可以被激活也可以被断开。
1.3.2. 单独的位操作
当对 GPIOx_ ODAT 的个别位编程时,软件不需要禁止中断:在单次 APB 写操作里,可以只更改一个或多个位。只需要通过对“置位/复位寄存器”(GPIOx_BSR)或“取反寄存器”(GPIOx_TGL)中想要更改的位写“1”来实现。没被选择的位将不被更改。
1.3.3. 复用功能(AF)
芯片 IO 引脚通过多路选择器连接到片内外设,每个 IO 上同一时刻只能选通一个复用功能。每个 IO 引脚有一个 2 输入的多路选择器连接到复用功能(AF0~AF1),通过配置 GPIOx_AFRH/L 选择功能。如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片上外设的输出信号连接。如果软件把一个 GPIO 脚配置成复用输出功能,但是外设没有被激活,它的输出将不确定。
1.3.4. GPIO 锁定机制
锁定机制允许在 GPIO 控制寄存器 GPIOx_LCK 上执行一串锁定程序,然后把 GPIO 的状态锁定,一旦 GPIO 状态被锁定,将不可改变,直到复位。被锁定的寄存器有(GPIOx_MODE, GPIOx_OTYPE,GPIOx_OSPEED, GPIOx_PUPD, GPIOx_AFRL and GPIOx_AFRH)。
锁定序列参考 GPIOx_LCK 寄存器描述 。
1.3.5. 输入配置
当 IO 端口配置为输入时
• 输出缓存器被禁止
• 施密特触发输入被激活
• 根据输入配置(上拉、下拉或浮空)的不同,弱上拉和下拉电阻被连接
• 出现在 IO 脚上的数据在每个 APB 时钟被采样到输入数据寄存器
• 对输入数据寄存器的读访问可得到 IO 状态
1.3.6. 输出配置
当 IO 端口被配置为输出时
• 输出缓冲器被激活
开漏模式:输出寄存器上的“0”激活 N-MOS,而输出寄存器上的“1”将端口置于高阻态(P-MOS从不被激活)
推挽模式:输出寄存器上的“0”激活 N-MOS,而输出寄存器上的“1”将激活 P-MOS。
• 施密特触发输入被激活
• 弱上拉和下拉电阻被禁止
• 出现在 IO 脚上的数据在每个 APB 时钟被采样到输入数据寄存器
• 在开漏模式时,对输入数据寄存器的读访问可得到 IO 状态
• 在推挽模式时,对输出数据寄存器的读访问得到最后一次写的值
1.3.7. 模拟输入配置
当 IO 端口被配置为模拟输入配置时
• 输出缓存器被禁止
• 禁止施密特触发输入,实现了每个模拟 IO 引脚上的零消耗。施密特触发输出值被强制为“0”
• 弱上拉和下拉电阻被禁止
• 读取输入数据寄存器时数值为“0”
1.3.8. 复用功能配置
对 IO 端口进行编程作为复用功能时
• 在开漏或推挽式配置中,输出缓冲器被打开
• 内置外设的信号驱动输出缓冲器 (复用功能输出)
• 施密特触发输入被激活
• 弱上拉和下拉电阻被禁止
• 在每个 APB 时钟周期,出现在 IO 脚上的数据被采样到输入数据寄存器
• 开漏模式时,读输入数据寄存器时可得到 IO 口状态
• 在推挽模式时,读输出数据寄存器时可得到最后一次写的值
2. 同步串行接口
2.1. 模块介绍
SPI_IIC 模块可用作 SPI 接口通信和 IIC 接口通信,两种功能同一时间只能选择其中一种使用。该模块集成两种接口协议,节省资源的同时又能满足不同的应用需求。
2.2. 功能特点
2.2.1. SPI 功能
• 支持主模式和从模式工作
• 支持全双工收发
• 可编程时钟极性,采样相位,支持 4 种模式
• 支持 1~32bit 传输
• 支持 5byte 发送/接收数据缓冲
• 传输数据顺序 MSB 和 LSB
• 支持标准模式,三线模式
• 可触发中断的专用发送和接收标志
2.2.2. IIC 功能
• 支持主模式和从模式
• 主模式支持时钟同步和总线仲裁
• 从模式支持在发送数据没有准备好或者接收缓冲器满时候拉低 SCL
• 从模式支持 7bit 地址或者 10bit 地址
• 从模式支持接收广播地址
• 支持 5byte 发送/接收数据缓冲
2.3. 功能说明
2.3.1. SPI 工作模式
• 模式 0:时钟空闲为 0,上升沿采样,下降沿出数据
• 模式 1:时钟空闲为 0,下降沿采样,上升沿出数据
• 模式 2:时钟空闲为 1,下降沿采样,上升沿出数据
• 模式 3:时钟空闲为 1,上升沿采样,下降沿出数据
2.3.2. SPI 接口模式
• 标准模式:通信线有 CLK,CS,IO0(MOSI),IO1(MISO),一个 CLK 传输 1bit 数据
• 三线模式:通信线有 CLK,CS,IO0,接收和发送都通过 IO0, 一个 CLK 传输 1bit 数据
2.3.3. SPI 数据帧与内部缓存
SPI 可支持 1~32bit 帧数据传输,内部集成了一个 40bit 的缓冲区,根据配置的数据帧长度不同,缓冲区能缓存的帧数也不一样。数据帧长度<=8bit 时,缓冲区可容纳 5 帧数据,8bit<数据帧长度<=16bit时,缓冲区可容纳两帧数据,数据帧长度>16bit 时,缓冲区可容纳 1 帧数据,当缓冲区无法再容下一帧数据时,缓冲区满标志会置 1。
2.3.4. IIC 主机时钟同步和总线仲裁
IIC 主机模式时,在多主机的应用场景下,支持时钟同步和总线仲裁。当总线上连接了不止一个主机时,就会存在同时发起通信的情况,这时候需要时钟同步以及总线仲裁机制决定由哪个主机占用总线完成数据传输。
时钟同步的原理:IIC 总线上的不同主机可能发起传输时的时钟频率不一样,通过时钟同步机制,可以让所有主机的时钟同步,才能进行逐位仲裁。所有主机的 SCL 在总线上是线与的关系,当总线上的 SCL由高切换到低电平时,所有主机从 0 开始计算低电平周期时间。当电平时间达到时,如果总线上的其它主机的 SCL 低电平仍然保持,那么其它主机进入高电平等待状态,等低电平时间最长的主机的 SCL 拉高时再统一拉高。因此,总线上同步后的 SCL 的低电平时间由低电平周期最长的主机决定,而高电平时间由高电平周期最短的主机决定。
总线仲裁原理:IIC 总线上不同主机的 SDA 线也是线与的关系,各主机在 SCL 线为高电平时,检查SDA 线的电平是否和自己发送的 SDA 信号一致,如果检测到 SDA 线为低电平时,自己要发送的 SDA 信号为高电平,那么该主机仲裁失败,停止总线上的传输动作。
2.3.5. IIC 从机拉低 SCL
IIC 从机在发送状态下如果缓冲区中没有可发送的数据,或者在接收状态下缓冲区已满时,将会在 SCL端口输出低电平,拉低总线上的 SCL 信号使主机暂停发送时钟。当从机准备好发送或者接收后,将在 SCL 输出高电平,主机又可以重新控制总线上的 SCL 线,恢复数据传输。
2.3.6. IIC 从机支持 7bit/10bit 寻址
IIC从机支持 7bit 或者 10bit 寻址模式,由寄存器 CON0 的IIC_SLAVE_ADDR_WIDTH位决定。
7bit 模式下,主机需要在 TX 模式下发送带 START 位的 7bit 地址,最后 1bit 为 R/W 标志。当主机写从机时,寻址完成即可进行数据发送。当主机读从机时,寻址完成后,主机需要改成 RX 模式,然后配置准备接收的数据长度(寄存器 DMA_LEN),然后对寄存器 CMD_DATA 写任意值启动接收。
10bit 模式下,主机需要在 TX 模式下发送带 START 位的第 1byte 地址(此时 R/W 位为 1),接着发送第 2byte 地址,此时如果收到从机的 ACK 信号,则为寻址成功。接下来如果是主机写从机,就可以直接进行数据发送。如果是主机读从机,那么需要主机再次发送带 START 为的第 1byte 地址(此时 R/W 为 1),然后切换成 RX 模式,配置寄存器 DMA_LEN,并且对寄存器 CMD_DATA 写任意值启动读数据。
主机读从机时,从机被寻址成功且收到读标志时,需要切换成 TX 模式,并且往缓冲区中写入要发送的数据。
2.6. 时钟与复位
2.6.1. 时钟介绍
该模块时钟来源于系统时钟,可通过配置系统寄存中 CLKCON2 来使能时钟。
2.6.2. 复位介绍
该模块的复位源有两个,分别是系统复位和软件复位,软件复位可通过配置系统寄存器触发。
文章评论(0条评论)
登录后参与讨论