// 如果有位域,直接用位域地址做
// 如果没有位域,可以这样,只是个参考,编译器不同写法也要不同
typedef _IOBit
{
unsigned char* port; // 不同的编译器要对port加不同的修饰才能编译出正确的代码
unsigned char bitMask;
}IOBit;
const IOBit IOMap[8] =
{
{GPIOA, 1<<1},
{GPIOA, 1<<3},
{GPIOA, 1<<7},
{GPIOA, 1<<3},
{GPIOB, 1<<1},
{GPIOC, 1<<2},
{GPIOC, 1<<3},
{GPIOB, 1<<4},
};
#define SetBit(x) *IOMap[(x)].port |= IOMap[(x)].bitMask
#define ClearBit(x) *IOMap[(x)].port &= ~IOMap[(x)].bitMask
// 置1
for(int i=0;i<8;i++){
SetBit(i);
}
// 清零
for(int i=0;i<8;i++){
ClearBit(i);
} |