杰理AC692X-GPIO口配置输入输出

最近在学习杰理AC692X,将收获及遇到的一些问题写成博客,方便以后工作中使用
普通IO口的输入输出配置很简单,仿照led.c key_drv_io.c就可以完成IO的基本配置,需要注意的是要解决SDK默认配置冲突的问题,把冲突的IO口的其他地方配置直接屏蔽

#define LED_PORTX        JL_PORTA
#define LED_BLUE         BIT(3)
#define LED_RED          BIT(2)
#define LED_INIT_EN()    do{LED_PORTX->PU &= ~LED_BLUE;LED_PORTX->PD &= ~LED_BLUE;\
						 LED_PORTX->DIR &= ~LED_BLUE;LED_PORTX->PU &= ~LED_RED;\
						 LED_PORTX->PD &= ~LED_RED;LED_PORTX->DIR &= ~LED_RED;}while(0)
#define LED_INIT_DIS()	 do{LED_PORTX->PU &= ~LED_BLUE;LED_PORTX->PD &= ~LED_BLUE;\
						 LED_PORTX->DIR |=  LED_BLUE;LED_PORTX->PU &= ~LED_RED;\
						 LED_PORTX->PD &= ~LED_RED;LED_PORTX->DIR |=  LED_RED;}while(0)
#define B_LED_ON()		 do{LED_PORTX->OUT |=  LED_BLUE;}while(0)
#define B_LED_OFF()		 do{LED_PORTX->OUT &= ~LED_BLUE;}while(0)
#define R_LED_ON()		 do{LED_PORTX->OUT |=  LED_RED;}while(0)
#define R_LED_OFF()		 do{LED_PORTX->OUT &= ~LED_RED;}while(0)

下面是我自己改的一个输入一个输出

#define Motor_PORTX             JL_PORTB
#define Motor_BIT               BIT(5)
#define Motor_INIT_EN()     	do{Motor_PORTX->PU &= ~Motor_BIT;Motor_PORTX->PD &= ~Motor_BIT;Motor_PORTX->DIR &= ~Motor_BIT;}while(0)
#define Motor_INIT_DIS()		do{Motor_PORTX->PU &= ~Motor_BIT;Motor_PORTX->PD &= ~Motor_BIT;Motor_PORTX->DIR |=  Motor_BIT;}while(0)
#define Motor_ON()			    do{Motor_PORTX->OUT |=  Motor_BIT;}while(0)
#define Motor_OFF()			    do{Motor_PORTX->OUT &= ~Motor_BIT;}while(0)
///
#define wakeup_PORTX            JL_PORTA
#define wakeup_BIT              BIT(0)
#define wakeup_INIT_EN()     	do{wakeup_PORTX->PU |=  wakeup_BIT;wakeup_PORTX->PD &= ~wakeup_BIT;wakeup_PORTX->DIR |=  wakeup_BIT;}while(0)
#define wakeup_INIT_DIS()		do{wakeup_PORTX->PU &= ~wakeup_BIT;wakeup_PORTX->PD &= ~wakeup_BIT;wakeup_PORTX->DIR |=  wakeup_BIT;}while(0)
#define read_wakeup()             (wakeup_PORTX->IN & wakeup_BIT)

AC692X一共四组GPIO口,每个IO口都可以独立配置成输入输出

PORTX->OUT  输出寄存器		0:输出0 	 1:输出1  	默认0
PORTX->IN   输入寄存器		0:输入0 	 1:输入1 	默认x
PORTX->DIR  方向寄存器 		0:IO设为输出 1:输入 	默认1
PORTX->DIE  输入允许寄存器 	0:不允许输入 1:允许输入 默认1
PORTX->PU   上拉使能寄存器 	0:关闭上拉   1:打开上拉 默认0
PORTX->PD   下拉使能寄存器 	0:关闭下拉   1:打开下拉 默认0
PORTX->HD
PORTX->HD0
PORTX->HD1

一些IC具有PR口,这些IO口既可以做ad也可以做普通io口,下面这些函数用于配置PR口配置输入输出
特别注意的是如果要使用PR口做普通io口输入输出的话一定要关闭PR口下拉4秒复位的功能,就算是配置成输出高电平,外围电路经电阻接地,还是会不停的复位

int rtc_port_4s_reset_close(void);//关闭四秒复位
//PR PORT
#define PORTR0          	    0
#define PORTR1             		1
#define PORTR2              	2
#define PORTR3              	3
//PR PORT OPERATIONS
void PORTR_DIR(u8 port, u8 val);
void PORTR_OUT(u8 port, u8 val);
void PORTR_HD(u8 port, u8 val);
void PORTR_PU(u8 port, u8 val);
void PORTR_PD(u8 port, u8 val);
void PORTR_DIE(u8 port, u8 val);
void PORTR_PWM_OE(u8 port, u8 val);
u8 PORTR_IN(u8 port);

你可能感兴趣的:(杰理AC692x学习)