微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI无线射频设计 > CC1310 位操作HWREGBITW,进入busFault_handler

CC1310 位操作HWREGBITW,进入busFault_handler

时间:12-23 整理:3721RD 点击:

各位,求助一下!

运行环境 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

我也遇到了相同的问题,你的问题解决了吗?我的是在程序里打个断点,在全速运行就能正常运行了。

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

网站地图

Top