微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2640读写寄存器宏HWREG(x)一个匪夷所思的问题

CC2640读写寄存器宏HWREG(x)一个匪夷所思的问题

时间:10-02 整理:3721RD 点击:

首先,库自带的宏定义:

#define HWREG(x)       (*((volatile unsigned long *)(x)))

 

然后调用库函数TimerConfigure,其中有这么一句:

HWREG(ui32Base + GPT_O_CTL) &= ~(GPT_CTL_TAEN | GPT_CTL_TBEN);

每次运行到这里,就卡死了,这条语句怎么都运行不过去,跑飞了。

然后我改成直接赋值:

HWREG(ui32Base + GPT_O_CTL)  = ~(GPT_CTL_TAEN | GPT_CTL_TBEN);

运行就通过了。

 

再接着,把上面各种位操作,拆分成几条语句,加入好几个中间变量:

但一旦运行到读取寄存器:

temp = HWREG(ui32Base + GPT_O_CTL);

就会出现卡死的情况,运行不过去,跑飞了。

 

求大神帮忙解答!

 HWREG(0x40001030) &= 0x01;

这条语句放在main函数中运行,一样导致系统跑飞。只要改成赋值就没问题。

HWREG(0x40001030) = 0x01;

算了,等不到回复了,发10个帖子,估计最多一个帖子会得到TI工作人员的回复。

售后服务啊~ 没什么好说的

应该是内存映射问题,你不能直接向4GB的扩展内存中读写数据,你HWREG()调用的地址应该不属于芯片的地址空间吧!所以要设置芯片的内存映射寄存器才能正确的读写数据,否则,访问就出现了溢出现象,直接执行到代码的最后了,然后显示错误!我也是刚开始学,希望能帮到你!

准确的说直接赋值也是错误的,只是没有显示错误,不知道你用的是啥芯片,可以看一下有没有AUX_SMPH寄存器!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top