欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

GPIO代码使用流程(伪代码部分示例)

程序员文章站 2024-02-23 22:18:04
...
  1. 配置PINMUX (根据芯片手册关于pinmux的部分找到使用pinmux的管脚)

OMA-LP138 数据手册部分截图
GPIO代码使用流程(伪代码部分示例)

//管脚映射省略	
//PINMUX 需要使用到的部分
typedef struct{
	volatile unsigned int pinmux[20];//我们使用的OMA-LP138的cpu,根据手册写的pinmux一共有20个管脚进行了复用,用数组代表这20个管脚
}
//在OMA-LP138上的管脚结构体
struct OMAP_138PIN{
	..............//具体部分省略
}
#define PINMUX(reg,index,value)省略......一部分 //每个人的实现方式不同,这个宏函数,也是根据OMA-LP的芯片手册写出来的,具体的实现大家看一下我的截图应该就明白了,如上图所示reg代表的是:管脚的寄存器地址 index代表的是:管脚的区间功能选择 value代表的是:管脚的使用选择

2.对GPIO所使用的管脚进行初始化

//以ksz8873的芯片的rest功能作为示例,N,M为管脚在原理图上的位置
#define GPIO_OUTPUT_DIR (gpio->pin##n) = ((gpio->dir##n)&(~(0x00000001<<m))) //输出功能举例
int 8873_init(void){
	GPIO_OUTPUT_DIR(N,M); //可以通过宏定义的方式对GPIO的接口进行相应的初始化,确定此管脚是输出还是输入使用
}

3.GPIO实际的调用和使用

	//已经做好相应的映射,可以根据管脚的地址直接使用
	#GPIO_SET(N,M) (gpio->(setpin##N))=(0x00000001<<M)
	#GPIO_CLR(N,M) (gpio->(clrpin##N))=(0x00000001<<M)
	//拉低电平同上
	GPIO_SET(N,M); //拉高电平
	GPIO_OUT(N,M); //拉低电平
相关标签: 硬件接口协议