📄 gpio.c
字号:
#include "config.h"
#include "GPIO.h"
/*
void GPIO_Input(enum PORT_ID Port, U16 Mask, const RP16 pData)
{
REG32(Sel_Regs[Port]) |= Mask;
REG32(Dir_Regs[Port]) |= Mask;
*pData = REG32(Data_Regs[Port]) & Mask;
}
void GPIO_Output(enum PORT_ID Port, U16 Mask, U16 Data)
{
U32 temp;
REG32(Sel_Regs[Port]) |= Mask;
REG32(Dir_Regs[Port]) &= ~Mask;
temp = (REG32(Data_Regs[Port]) & (~Mask)) |(Data & Mask);
REG32(Data_Regs[Port]) = temp;
}*/
void ExINT_Enable(U32 ExINTNo, U32 TriggerMode)
{
U32 temp;
REG32(Dir_Regs[ ExInt2Ports[ExINTNo].Port ]) |= 1 << ExInt2Ports[ExINTNo].Bit;
REG32(Sel_Regs[ExInt2Ports[ExINTNo].Port] ) |= 1 << ExInt2Ports[ExINTNo].Bit;
temp = REG32(INTRCTL_Regs[ExInt2Ports[ExINTNo].Port]);
temp &= (~(0x03 << (2*ExInt2Ports[ExINTNo].Bit)));
temp |= TriggerMode << (2*ExInt2Ports[ExINTNo].Bit);
REG32(INTRCTL_Regs[ExInt2Ports[ExINTNo].Port]) = temp;
REG32(INCTL_Regs[ExInt2Ports[ExINTNo].Port]) |= 1 << ExInt2Ports[ExINTNo].Bit;
}
void GPIO_INIT(GPIOPortBit *pbit,BOOL InOrOut)
{ U32 Mask=1<<pbit->Bit;
*(volatile unsigned int *)(Sel_Regs[pbit->Port]) |= Mask;
if(InOrOut)
{ *(volatile unsigned int *)(Dir_Regs[pbit->Port]) |= Mask;
}
else
{ *(volatile unsigned int *)(Dir_Regs[pbit->Port]) &= ~Mask;
}
}
void GPIO_Write(GPIOPortBit *pbit,int data)
{ U32 Mask=1<<pbit->Bit;
if(data)
{ *(volatile unsigned int *)(Data_Regs[pbit->Port]) |= Mask;
}
else
{ *(volatile unsigned int *)(Data_Regs[pbit->Port]) &= ~Mask;
}
}
int GPIO_Read(GPIOPortBit *pbit)
{ U32 RegData=*(volatile unsigned int *)(Data_Regs[pbit->Port]);
return (RegData>>pbit->Bit)&0x01;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -