如何设置位?
P1OUT |= BIT3; //P1.3拉高
or
pTimer->control |= (1<<3)
如何清除位?
P1DIR &= ~BIT3; //配置为输入
or
pTimer->control &= ~(1<<3)
如何翻转位?
P1OUT ^= BIT0 ; //翻转位
or
pTimer->control ^= (1<<0)
如何使用位掩码?
#define TIMER_COMPLETE (0x08)
if(*pTimerStatus & TIMER_COMPLETE)
关于特殊寄存器?
有些寄存器或者寄存器中的位是只读或者只写的。对一个只写寄存器来说,不能进行“读-改-写”操作,诸如|=,&=,^=,<<=等操作。这种情况下通过一个中间变量来保存只写寄存器的当前状态。
uint32_t timerRegValue|=TIMER_ENABLE;
*pTimerReg=timerRegValue;
如何使用位域和联合体?
union
{
uint8_t byte;
struct
{
uint8_t bit0 :1;
uint8_t bit1 :1;
uint8_t bit2 :1;
uint8_t bit3 :1;
uint8_t nibble :4;
}bits;
}foo;
foo.byte=(TIMER_COMPLETE | TIMER_ENABLE);
如何采用结构体覆盖的方式定义寄存器?
typedef struct
{
uint32_t count; // offset 0x00
uint32_t maxcount; // offset 0x04
uint32_t _reserved1; // offset 0x08
uint32_t control; // offset 0x0D
}volatile timer_t;
timer_t *pTimer = (timer_t *)(0xabcd0120);
P1OUT |= BIT3; //P1.3拉高
or
pTimer->control |= (1<<3)
如何清除位?
P1DIR &= ~BIT3; //配置为输入
or
pTimer->control &= ~(1<<3)
如何翻转位?
P1OUT ^= BIT0 ; //翻转位
or
pTimer->control ^= (1<<0)
如何使用位掩码?
#define TIMER_COMPLETE (0x08)
if(*pTimerStatus & TIMER_COMPLETE)
{//your operate}
如何通过地址定义寄存器?
uint32_t volatile *pGPIO0Set = (uint32_t volatile *)(0x40E00018);
*pGPIO0Set=2; //when application
关于特殊寄存器?
有些寄存器或者寄存器中的位是只读或者只写的。对一个只写寄存器来说,不能进行“读-改-写”操作,诸如|=,&=,^=,<<=等操作。这种情况下通过一个中间变量来保存只写寄存器的当前状态。
uint32_t timerRegValue|=TIMER_ENABLE;
*pTimerReg=timerRegValue;
如何使用位域和联合体?
union
{
uint8_t byte;
struct
{
uint8_t bit0 :1;
uint8_t bit1 :1;
uint8_t bit2 :1;
uint8_t bit3 :1;
uint8_t nibble :4;
}bits;
}foo;
foo.byte=(TIMER_COMPLETE | TIMER_ENABLE);
foo.bits.bit2=1;
如何采用结构体覆盖的方式定义寄存器?
typedef struct
{
uint32_t count; // offset 0x00
uint32_t maxcount; // offset 0x04
uint32_t _reserved1; // offset 0x08
uint32_t control; // offset 0x0D
}volatile timer_t;
timer_t *pTimer = (timer_t *)(0xabcd0120);
pTimer->control |= 0x10;
如何使用函数指针?
void Square_Number(int, int*)
{
//code here
}
使用的时候
void Square_Number(int, int*); //声明函数原型
void (* pFn) (int, int*); //声明pFn变量作为fn的指针,fn带有int参数和int指针参数,返回为void;
pFn=Square_Number; //pFn存放Square_Number的地址
(*pFn)(b,&Result_b); //使用函数指针调用Square_Number函数