5. 外设接口详解

5.1 GPIO(通用输入输出端口)
5.1.1 GPIO 基本原理
通用输入输出端口(GPIO)是单片机中最基本的外设接口之一,用于控制外部设备的输入和输出。GPIO 可以配置为输入或输出模式,具有多种功能,如中断检测、上拉/下拉电阻配置等。LPC1100 系列单片机的 GPIO 端口通常由多个寄存器控制,包括数据寄存器、方向寄存器、中断寄存器等。
5.1.2 GPIO 寄存器
LPC1100 系列单片机的 GPIO 寄存器主要包括以下几类:
- 数据寄存器(FIOxSET 和 FIOxCLR):用于设置或清除端口的输出值。
- 方向寄存器(FIODIR):用于配置端口的方向,即输入或输出。
- 中断寄存器(FIOINTENSET/FIOINTENCLR、FIOINTSTATR/FIOINTSTATF、FIOINTSTATR):用于配置和检测 GPIO 中断。
- 状态寄存器(FIOPIN):用于读取端口的输入值。
5.1.3 GPIO 配置
GPIO 的配置通常包括以下几个步骤:
- 配置端口方向:使用
FIODIR寄存器设置端口为输入或输出。 - 设置初始输出值:使用
FIOxSET和FIOxCLR寄存器设置端口的初始输出值。 - 配置中断:使用
FIOINTENSET和FIOINTENCLR寄存器启用或禁用中断,使用FIOINTSTATR和FIOINTSTATF寄存器检测中断状态。
5.1.4 GPIO 示例
5.1.4.1 配置 GPIO 为输出
以下示例代码展示了如何配置 GPIO 为输出并控制 LED 的亮灭:
#include "LPC11xx.h"
#define LED_PORT (1) // LED 连接在 PORT1
#define LED_PIN (21) // LED 连接在 PIN21
void GPIO_Init(void) {
// 配置 GPIO 方向
LPC_GPIO1->DIR |= (1 << LED_PIN); // 设置 GPIO1 的 PIN21 为输出
}
void LED_Toggle(void) {
// 切换 LED 状态
LPC_GPIO1->DATA ^= (1 << LED_PIN); // 切换 GPIO1 的 PIN21 输出值
}
int main(void) {
// 初始化 GPIO
GPIO_Init();
while (1) {
LED_Toggle(); // 切换 LED 状态
for (int i = 0; i < 1000000; i++) {
// 延时
__NOP();
}
}
}
5.1.4.2 配置 GPIO 为输入并检测按键
以下示例代码展示了如何配置 GPIO 为输入并检测按键的状态:
#include "LPC11xx.h"
#define BUTTON_PORT (0) // 按键连接在 PORT0
#define BUTTON_PIN (7) // 按键连接在 PIN7
void GPIO_Init(void) {
// 配置 GPIO 方向
LPC_GPIO0->DIR &= ~(1 << BUTTON_PIN); // 设置 GPIO0 的 PIN7 为输入
LPC_GPIO0->DIR |= (1 << LED_PIN); // 设置 GPIO1 的 PIN21 为输出
}
void GPIO_ISR(void) __attribute__((naked));
void GPIO_ISR(void) {
// 中断处理函数
if (LPC_GPIO0->INTSTATR & (1 << BUTTON_PIN)) {
// 按键被按下
LPC_GPIO1->DATA ^= (1 << LED_PIN); // 切换 LED 状态
LPC_GPIO0->INTCLR =

最低0.47元/天 解锁文章
646

被折叠的 条评论
为什么被折叠?



