对于做驱动的来说,IO操作,就是家常便饭。如果没有一个良好的技巧,这种针线活可不好做。这里介绍一些常用的技巧函数,也算是一个汇总:
1:BITCSET
#define BITCSET(X, CMASK, SMASK)
( (X) = ((((unsigned int)(X)) & ~((unsigned int)(CMASK))) | ((unsigned int)(SMASK))) )
//意义:把值X上的CMASK对已的值设置为SMASK的值。一般CMASK的位置和SMASK的位置是一样的,否则很容易引起歧义。
分析: X &~CMASK:得到CMSK位置的位置设置为0。
| SMASK :把上述结果的SMASK的为一的位置再置为1。
2:BITSCLR
#define BITSCLR(X, SMASK, CMASK) ( (X) =
((((unsigned int)(X)) | ((unsigned int)(SMASK))) & ~((unsigned int)(CMASK))) )
//意义:把值X上的指定位SMASK清空。一般SMASK和CMASK的位置也是一样的。
3:BITSET
#ifndef BITSET
#define BITSET(X, MASK) ( (X) |= (unsigned int)(MASK) )
//意义:把X的指定MASK位标志位1。
4:BITCLR
BITCLR
#define BITCLR(X, MASK) ( (X) &= ~((unsigned int)(MASK)) )
//意义:把X的指定位置置为0。
实际过程中用的最多的还是后面两个,BITSET,BITCLR,前面的只是后面的两种融合,也不建议使用前面的2种,让人理解不是很干脆。后面的两种简单易懂。