谁能帮我把这几段代码加上注释,给我稍微讲解一下?是串口的初始化代码 30
(1):voidpxa_gpio_mode(intmode){//mode=0x122intgpio=mode&GPIO_MD_MASK_NT;//gpio=0x22in...
(1):
void
pxa_gpio_mode(int mode){ //mode=0x122
int gpio = mode
& GPIO_MD_MASK_NT; //gpio=0x22
int fn = (mode
& GPIO-MD-MASK_FN) >>8; //FN=0x01
int gafr;
if (mode &
GPIO_MD_MASK_DIR) //if(0)
GPDR (gpio)|=GPIO_bit(gpio);
else
GPDR
(gpio) &=GPIO_bit(gpio);
……
return;
}
#define GPIO_MD_MASK_NR 0x07f
#define GPIO_MD_MASK_FN 0x300
#define GPIO_MD_MASK_DIR 0x080
(2):
void pxa_gpio_mode(int mode){ //mode=0x122
...... //
gpio=0x22 fn= 0x01
if
(mode & GPIO_MD_MASK_DIR) //if(0)
GPDR(gpio) |= GPIO_bit(gpio);
else
GPDR(gpio) &= ~GPIO_bit(gpio); //(GPDR1)&=~0x04
gafr = GAFR(gpio) & ~(0x3
<< (((gpio) & 0xf)*2));
GAFR(gpio) = gafr | (fn << (((gpio) & 0xf)*2));
return;
}
#define GPIO_bit(x) (1 << ((x) & 0x1f))
#define GPDR(x) (*((((x) & 0x7f) < 96) ? &_GPDR(x)
: &GPDR3))
#define _GPDR(x) __REG2(0x40E0000C, ((x) & 0x60)
>> 3)
# define __REG2(x,y) (*(volatile
unsigned long *)((unsigned long)(x) +
(y))) 展开
void
pxa_gpio_mode(int mode){ //mode=0x122
int gpio = mode
& GPIO_MD_MASK_NT; //gpio=0x22
int fn = (mode
& GPIO-MD-MASK_FN) >>8; //FN=0x01
int gafr;
if (mode &
GPIO_MD_MASK_DIR) //if(0)
GPDR (gpio)|=GPIO_bit(gpio);
else
GPDR
(gpio) &=GPIO_bit(gpio);
……
return;
}
#define GPIO_MD_MASK_NR 0x07f
#define GPIO_MD_MASK_FN 0x300
#define GPIO_MD_MASK_DIR 0x080
(2):
void pxa_gpio_mode(int mode){ //mode=0x122
...... //
gpio=0x22 fn= 0x01
if
(mode & GPIO_MD_MASK_DIR) //if(0)
GPDR(gpio) |= GPIO_bit(gpio);
else
GPDR(gpio) &= ~GPIO_bit(gpio); //(GPDR1)&=~0x04
gafr = GAFR(gpio) & ~(0x3
<< (((gpio) & 0xf)*2));
GAFR(gpio) = gafr | (fn << (((gpio) & 0xf)*2));
return;
}
#define GPIO_bit(x) (1 << ((x) & 0x1f))
#define GPDR(x) (*((((x) & 0x7f) < 96) ? &_GPDR(x)
: &GPDR3))
#define _GPDR(x) __REG2(0x40E0000C, ((x) & 0x60)
>> 3)
# define __REG2(x,y) (*(volatile
unsigned long *)((unsigned long)(x) +
(y))) 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询