CC1310 位操作HWREGBITW,进入busFault_handler
各位,求助一下!
运行环境 iar8.11.2,自己写的简单裸跑测试IO的代码, 刚进入debug时,使用GPIO_setOutputEnableDio( IOID_7, GPIO_OUTPUT_ENABLE );里面有调HWREGBITW,位操作,停住后,发现进入busFault_handler错误,点击reset按钮后,继续点运行,代码运行正常。停止时可以查看0x40022000
用studio烧录也功能不正常,应该也进busFault_handler。
代码如下:
#include <stdint.h>
#include <ti/devices/cc13x0/driverlib/aon_ioc.h>
#include <ti/devices/cc13x0/driverlib/ioc.h>
#include <ti/devices/cc13x0/driverlib/gpio.h>
#include <ti/devices/cc13x0/driverlib/watchdog.h>
#include <ti/devices/cc13x0/driverlib/prcm.h>
/*
通过硬件测试
*/
void delayms(uint32_t ms)
{
uint32_t units;
for(;ms != 0;ms--)
{
for(units = 9695;units != 0;units--);
}
}
int main(void)
{
// uint16_t i ;
#if 1
PRCMLoadSet();
PRCMPowerDomainOn(PRCM_DOMAIN_PERIPH|PRCM_DOMAIN_TIMER);
PRCMPeripheralRunEnable(PRCM_PERIPH_GPIO);
GPIO_setOutputEnableDio( IOID_7, GPIO_OUTPUT_ENABLE );
IOCPortConfigureSet(IOID_7, IOC_PORT_GPIO,
IOC_STD_OUTPUT);
// for(i = 0;i < 1000;i++)
while(1)
{
GPIO_toggleDio(IOID_7);
delayms(500);
}
#endif
// while(1);
}
补充一下:
// Bit-band access to address x bit number b using word access (32 bit)
#define HWREGBITW(x, b) \
HWREG(((unsigned long)(x) & 0xF0000000) | 0x02000000 | \
(((unsigned long)(x) & 0x000FFFFF) << 5) | ((b) << 2))
__STATIC_INLINE void
GPIO_setOutputEnableDio( uint32_t dioNumber, uint32_t outputEnableValue )
{
// Check the arguments.
ASSERT( dioNumberLegal( dioNumber ));
ASSERT(( outputEnableValue == GPIO_OUTPUT_DISABLE ) ||
( outputEnableValue == GPIO_OUTPUT_ENABLE ) );
// Update the output enable bit for the specified DIO.
HWREGBITW( GPIO_BASE + GPIO_O_DOE31_0, dioNumber ) = outputEnableValue;
}
请问我改如何操作才不会busFault_handler,还有为啥我按reset复位cpu,功能又正常了,不会再busFault_handler
我也遇到了相同的问题,你的问题解决了吗?我的是在程序里打个断点,在全速运行就能正常运行了。