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寄存器!