我在系统启动时初始化P0.3和P0.4为输出0,并一直保持。但是发现系统初始化的过程中,P0.3和P0.4不到一秒钟短暂的输出1,又恢复输出0。
进而在MAIN函数中打断点,在while(1),while(2),while(3)处分别死循环测试,发现在while(1),while(2)处死循环,都不会出现短暂的输出1的现象。到while(3)处死循环,就发现短暂的输出1的现象。
看来是osal_init_system()调用里面有对GPIO的操作,但是进入进去却又找不到相关代码。特来求助,谢谢帮助!
下面是预设值和代码:
INT_HEAP_LEN=3072
HALNODEBUG
OSAL_CBTIMER_NUM_TASKS=1
HAL_AES_DMA=TRUE
HAL_DMA=TRUE
xPOWER_SAVING
xPLUS_BROADCASTER
xHAL_LCD=FALSE
xHAL_LED=FALSE
xHAL_UART=FALSE
int main(void)
{
/* Set to 16Mhz to set 32kHz OSC, then back to 32MHz */
START_HSOSC_XOSC();
SET_OSC_TO_HSOSC();
SET_32KHZ_OSC();
SET_OSC_TO_XOSC();
STOP_HSOSC();
/* Turn on cache prefetch mode */
PREFETCH_ENABLE();
// Interrupts off
HAL_DISABLE_INTERRUPTS();
P0DIR |= BV(3)|BV(4);
P0 &= ~(BV(3)|BV(4));
/* Initialze the HAL driver */
HalDriverInit();
//while(1);
/* Initialize NV system */
osal_snv_init();
//while(2);
/* Initialize LL */
/* Initialize the operating system */
osal_init_system();
while(3);
/* Enable interrupts */
HAL_ENABLE_INTERRUPTS();
#if defined ( POWER_SAVING )
osal_pwrmgr_device( PWRMGR_BATTERY );
#else
osal_pwrmgr_device(PWRMGR_ALWAYS_ON);
#endif
/* Start OSAL */
osal_start_system(); // No Return from here
return 0;
}
wenzhong shen:
osal_init_system() 不是循环的函数,且只调用一次,不会更改GPIO的状态。你可以查看一下GPIO你是否配置了P0.3 0.4 为输出,并且保证P0SEL配置成普通IO
Steven Chen:
回复 wenzhong shen:
用单步调试发现以下在simpleBLEPeripheral.c文件中的这两个调用对P0.3和P0.4有影响,导致管脚电平跳变。但是这个是库函数,没有代码了,不知道TI官方是如何处理的???
// Initialize GATT attributes GGS_AddService( GATT_ALL_SERVICES ); // GAP GATTServApp_AddService( GATT_ALL_SERVICES ); // GATT attributes