【位带操作对寄存器赋值】基于ADuCM4050的GPIO复用模式初始化
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))
#define GPIO0_MUL_Addr (ADI_GPIO0_BASE+0) //0x40020000
#define P0_M(n) BIT_ADDR(GPIO0_MUL_Addr,n)
#define GPIO1_MUL_Addr (ADI_GPIO1_BASE+0) //0x40020000
#define P1_M(n) BIT_ADDR(GPIO1_MUL_Addr,n)
#define GPIO2_MUL_Addr (ADI_GPIO2_BASE+0) //0x40020000
#define P2_M(n) BIT_ADDR(GPIO2_MUL_Addr,n)
#define GPIO3_MUL_Addr (ADI_GPIO3_BASE+0) //0x40020000
#define P3_M(n) BIT_ADDR(GPIO3_MUL_Addr,n)
void mux_GPIO(uint8_t ports,uint8_t pins,uint8_t mux)
{
uint8_t a,b;
a = pins*2-1;
b = pins*2;
uint8_t c,d;
c=mux>>1;
c=0x01 & c;
d=0x01 & mux;
if(ports == 0)
{
P0_M(a) = c;
P0_M(b) = d;
}
else if(ports == 1)
{
P1_M(a) = c;
P1_M(b) = d;
}
else if(ports == 2)
{
P2_M(a) = c;
P2_M(b) = d;
}
else if(ports == 3)
{
P3_M(a) = c;
P3_M(b) = d;
}
else{}
}