宏定义寄存器设置函数
来源:互联网 发布:origin8软件 编辑:程序博客网 时间:2024/05/18 02:17
本文讲述了如何通过宏定义的方法来新建设置CPLD寄存器类的函数。并且采用了位段的方法来更新寄存器的某几位。测试结果表明,结构体上面的成员变量,对应字节低位。结构体下面的成员变量,对应字节高位。使用时,最好在自己的环境上测试好。
#include#include static unsigned char RegBuf[5] = {0};typedef struct Reg1Struct{ unsigned char func10:6;unsigned char func11:2;}Reg1;typedef struct Reg2Struct{ unsigned char func20:1;unsigned char func21:7;}Reg2;typedef struct Reg3Struct{ unsigned char func30:3;unsigned char func31:5;}Reg3;typedef struct Reg4Struct{ unsigned char func40:4;unsigned char func41:4;}Reg4;typedef struct Reg5Struct{ unsigned char func5:8;}Reg5;int regRead(int addr, unsigned char *data){*data = RegBuf[addr]; return 0;}int regWrite(int addr, unsigned char *data){RegBuf[addr] = *data;printf("%s:write %x to reg %x \n", __FUNCTION__, *data, addr); return 0;}#define REG_SET_FUNC(regNum, bitMember) \unsigned char reg_set_##bitMember(unsigned char memVal)\{\ Reg##regNum *pReg;\unsigned char regValue = 0;\regRead(regNum, ®Value);\pReg = (Reg##regNum *)®Value;\ pReg->bitMember = memVal;\ regWrite(regNum, ®Value);\ return pReg->bitMember;\}REG_SET_FUNC(1,func10)REG_SET_FUNC(1,func11)REG_SET_FUNC(2,func20)REG_SET_FUNC(2,func21)REG_SET_FUNC(3,func30)REG_SET_FUNC(3,func31)REG_SET_FUNC(4,func40)REG_SET_FUNC(4,func41)REG_SET_FUNC(5,func5)int main(void){reg_set_func10(1);reg_set_func11(1);reg_set_func20(1);reg_set_func21(1);reg_set_func30(1);reg_set_func31(1);reg_set_func40(1);reg_set_func41(1);reg_set_func5(1);return 0;}
sunxk@146:~> ./func
regWrite:write 1 to reg 1
regWrite:write 41 to reg 1
regWrite:write 1 to reg 2
regWrite:write 3 to reg 2
regWrite:write 1 to reg 3
regWrite:write 9 to reg 3
regWrite:write 1 to reg 4
regWrite:write 11 to reg 4
regWrite:write 1 to reg 5
阅读全文
1 0
- 宏定义寄存器设置函数
- 寄存器定义
- 寄存器定义
- 寄存器定义,分类
- 寄存器定义,分类
- ARM寄存器的定义
- ARM编程寄存器定义
- ARM编程:关于ARM寄存器的宏定义
- ARM编程:关于ARM寄存器的宏定义
- ARM编程:关于ARM寄存器的宏定义
- 并口SPP模式寄存器定义
- 关于寄存器的定义__REG
- msp430 看门狗寄存器定义方式
- CCS中寄存器定义方法
- STM32外设寄存器地址定义
- 对寄存器某位设置
- DMA寄存器设置
- 单片机寄存器设置
- 巧妙的邻接表(数组实现)
- android 6.0动态权限添加
- 仿知乎EditText 输入@+用户名效果
- 如何生成二维码?
- swift网络请求封装
- 宏定义寄存器设置函数
- makefile伪目标
- 国庆将至,教你一招过国庆
- Hibernate SQL
- Kotlin之let,apply,with,run函数区别
- 汉字和笔画数
- 正确使用MySQL JDBC setFetchSize()方法解决JDBC处理大结果集 java.lang.OutOfMemoryEr
- Android:自定义Dialog上面的黑框或者说是Title怎么去掉
- oracle 9i与11g 服务端tnsping与sqlplus命令的使用的一些差异