小函数
打印功能
print_int(“value:”,12344,‘D’);
void print_int(char *str, unsigned int ivalue, char format)
{
char buf[11] = {
0};
unsigned int range ,i ,temp_val;
printf("%s", str);
if (ivalue == 0) {
printf("0x00\n");
return;
}
switch (format) {
case 'D' :
range = 1000000000;
i = 0;
for(;;)
{
temp_val = ivalue/ range;
if (temp_val != 0) {
break;
}
ivalue = ivalue % range;
range = range / 10;
}
for(;;)
{
temp_val = ivalue/ range;
buf[i++] = temp_val + '0';
if (range == 1) {
break;
}
ivalue = ivalue % range;
range = range / 10;
}
break;
case 'X' :
range = 0x10000000;
i = 0;
for(;;)
{
temp_val = ivalue/ range;
if (temp_val != 0) {
break;
}
ivalue = ivalue % range;
range = range / 16;
}
for(;;)
{
temp_val = ivalue/ range;
if (temp_val > 9) {
buf[i++] = temp_val % 10 + 'A';
} else {
buf[i++] = temp_val + '0';
}
if (range == 1) {
break;
}
ivalue = ivalue % range;
range = range / 16;
}
printf("0X");
break;
default:
printf("errp\n");
}
printf("%s\n", buf);
}
定义内核的寄存器结构
通过union访问其比特位
struct pwm_reg_info {
union{
unsigned int pwm_ctr;
struct {
unsigned int cycle:16;
unsigned int type:1;
unsigned int ms_dir:1;
unsigned int reserve1:2;
unsigned int ms_threshold_en:1;
unsigned int reserve2:3;
unsigned int ms_threshold_val:7;
unsigned int reserve3:1;
}ctr_bit;
};
unsigned int pwm_period;
};
struct pwm_info {
unsigned int __iomem *pwm_reg_base;
struct pwm_reg_info *pwm_n_reg;
};