PAGE1
PAGE1
GPIO编程
引言
GPIO(GeneralPurposeInputOutput,通用输入输出)是嵌入式系统中常用的功能模块之一。通过GPIO,可以实现对单片机外部设备的控制和状态检测。在TIVAC系列单片机中,GPIO模块提供了丰富的功能,包括数字输入、数字输出、中断触发等。本节将详细介绍如何在TM4C123单片机上进行GPIO编程,包括配置GPIO端口、设置引脚方向、读取和写入引脚状态,以及配置GPIO中断。
GPIO端口配置
端口选择
TM4C123单片机拥有多个GPIO端口,通常用A、B、C、D、E、F等字母表示。每个端口包含多个引脚,例如PORTA有8个引脚(PA0到PA7)。
端口时钟使能
在使用任何GPIO端口之前,必须首先使能该端口的时钟。时钟使能是通过GPIO模块的时钟控制寄存器(RCGCGPIO)来配置的。
代码示例
//使能PORTA的时钟
SYSCTL_RCGCGPIO_R|=SYSCTL_RCGCGPIO_R0;//RCGCGPIO寄存器位于SysCtl模块中
端口方向配置
GPIO端口的引脚可以配置为输入或输出。方向配置是通过GPIO方向寄存器(GPIODIR)来完成的。
代码示例
//配置PORTA的PA0为输出
GPIO_PORTA_DIR_R|=(10);//设置PA0为输出
//配置PORTA的PA1为输入
GPIO_PORTA_DIR_R=~(11);//设置PA1为输入
引脚使能
在配置引脚方向之后,还需要使能引脚。引脚使能是通过GPIO数字使能寄存器(GPIODEN)来完成的。
代码示例
//使能PORTA的PA0和PA1
GPIO_PORTA_DEN_R|=(10)|(11);//设置PA0和PA1为数字引脚
引脚初始状态配置
对于输出引脚,可以配置其初始状态。初始状态配置是通过GPIO数据寄存器(GPIODATA)来完成的。
代码示例
//设置PORTA的PA0初始状态为高电平
GPIO_PORTA_DATA_R|=(10);//设置PA0为高电平
//设置PORTA的PA1初始状态为低电平
GPIO_PORTA_DATA_R=~(11);//设置PA1为低电平
GPIO读写操作
读取引脚状态
读取引脚状态时,使用GPIO数据寄存器(GPIODATA)。
代码示例
//读取PORTA的PA1状态
uint32_tstatus=GPIO_PORTA_DATA_R(11);
if(status){
//PA1为高电平
}else{
//PA1为低电平
}
写入引脚状态
写入引脚状态时,同样使用GPIO数据寄存器(GPIODATA)。
代码示例
//设置PORTA的PA0为高电平
GPIO_PORTA_DATA_R|=(10);
//设置PORTA的PA0为低电平
GPIO_PORTA_DATA_R=~(10);
GPIO中断配置
中断使能
中断使能是通过GPIO中断使能寄存器(GPIOIM)来配置的。此外,还需要使能NVIC(NestedVectoredInterruptController)中的相应中断。
代码示例
//使能PORTA的PA1中断
GPIO_PORTA_IM_R|=(11);
//使能NVIC中的PORTA中断
NVIC_EN0_R|=NVIC_EN0_INT_GPIOA;
中断类型配置
GPIO中断可以配置为上升沿、下降沿或双边沿触发。配置中断类型是通过GPIO上升沿触发寄存器(GPIOIS)和GPIO边缘触发寄存器(GPIOIBE)来完成的。
代码示例
//配置PORTA的PA1为上升沿触发
GPIO_PORTA_IS_R=~(11);//设置为边沿触发
GPIO_PORTA_IBE_R=~(11);//设置为上升沿触发
GPIO_PORTA_IEV_R|=(11);
//配置PORTA的PA1为下降沿触发
GPIO_PORTA_IS_R=~(11);//设置为边沿触发
GPIO_PORTA_IBE_R=~(11);//设置为下降沿触发
GPIO_PORTA_IEV_R=~(11);
//配置PORTA的PA1为双边沿触发
GPIO_PORTA_IS_R=~(11);//设置为边沿触发
GPIO_PORTA_IBE_R|=(11);/