📄 gpio.c
字号:
//-------------------------------------------------------------------------*
// 文件名: gpio.c *
// 说 明: gpio驱动程序文件 *
//-------------------------------------------------------------------------*
#include "gpio.h" //包含gpio头文件
//-------------------------------------------------------------------------*
//函数名: gpio_init *
//功 能: 初始化gpio *
//参 数: port:端口名 *
// index:指定端口引脚 *
// dir:引脚方向,0=输入,1=输出 *
// data:初始状态,0=低电平,1=高电平 *
//返 回: 无 *
//说 明: 无 *
//-------------------------------------------------------------------------*
void gpio_init (GPIO_MemMapPtr port, int index, int dir,int data)
{
PORT_MemMapPtr p;
switch((uint32)port)
{
case 0x400FF000u:
p = PORTA_BASE_PTR;
break;
case 0x400FF040u:
p = PORTB_BASE_PTR;
break;
case 0x400FF080u:
p = PORTC_BASE_PTR;
break;
case 0x400FF0C0u:
p = PORTD_BASE_PTR;
break;
case 0x400FF100u:
p = PORTE_BASE_PTR;
break;
default:
break;
}
PORT_PCR_REG(p,index)=(0|PORT_PCR_MUX(1));
if(dir == 1)//output
{
GPIO_PDDR_REG(port) |= (1<<index);
if(data == 1)//output
GPIO_PDOR_REG(port) |= (1<<index);
else
GPIO_PDOR_REG(port) &= ~(1<<index);
}
else
GPIO_PDDR_REG(port) &= ~(1<<index);
}
//-------------------------------------------------------------------------*
//函数名: gpio_ctrl *
//功 能: 设置引脚状态 *
//参 数: port:端口名 *
// index:指定端口引脚 *
// data: 状态,0=低电平,1=高电平 *
//返 回: 无 *
//说 明: 无 *
//-------------------------------------------------------------------------*
void gpio_ctrl (GPIO_MemMapPtr port, int index, int data)
{
if(data == 1)//output
GPIO_PDOR_REG(port) |= (1<<index);
else
GPIO_PDOR_REG(port) &= ~(1<<index);
}
//-----------------------------------------------------------------------*
//函数名: gpio_reverse *
//功 能: 改变引脚状态 *
//参 数: port:端口名; *
// index:指定端口引脚 *
//返 回: 无 *
//说 明: 无 *
//-----------------------------------------------------------------------*
void gpio_reverse (GPIO_MemMapPtr port, int index)
{
GPIO_PDOR_REG(port) ^= (1<<index);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -