这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » TI » CC2541之P04口变高即复位问题求教

共2条 1/1 1 跳转至

CC2541之P04口变高即复位问题求教

高工
2016-07-27 11:27:10     打赏
 

最近搞开发遇到个问题:当我的POWER_SAVING宏定义开启时,如果程序中出现P04变为高电平,即出现复位现象。

我解决问题的过程是这样的是如下这样的:

我用CC2541控制所有的IO口,配置的关键情况如下:

蓝牙低功耗宏定义设置

我查到了不相干的解答,网上有说出现下面的问题的:

编译时出现警告“Warning[w52]: More than one definition for the byte at address 0x6b in common segment INTVEC. It is defined in  module "hal_uart" as well as in module "hal_key"”

答:原因是IAR中包含了POWER_SAVING的宏之后,串口唤醒就需要用到IO中断,而协议栈中串口唤醒的默认IO口是P04脚。因此在_hal_uart_dma.c中包含了的P0中断服务函数就与Hal_key.c中包含的P0中断服务函数相冲突。

详情代码如下:

1)当IAR中包含了POWER_SAVING的宏之后,会定义一个DMA_PM的宏(_hal_uart_dma.c中)

#if !defined( DMA_PM )
#if defined POWER_SAVING
#define DMA_PM                     1
#else
#define DMA_PM                     0
#endif // POWER_SAVING
#endif // !DMA_PM

  

2)一旦有了DMA_PM这个宏,_hal_uart_dma.c中就会包含P0的中断服务函数


#if DMA_PM  
#if (HAL_UART_DMA == 1)  
HAL_ISR_FUNCTION(port0Isr, P0INT_VECTOR)  
#else  
HAL_ISR_FUNCTION(port1Isr, P1INT_VECTOR)  
#endif  
{  
  HAL_ENTER_ISR();    

PxIFG = 0;  
  PxIF = 0;    dmaRdyIsr = 1;  

  CLEAR_SLEEP_MODE();  
  HAL_EXIT_ISR();  
}  

3IAR设置中包含HAL_KEY=TRUE时,Hal_key.c中就会包含P0的中断服务函数

HAL_ISR_FUNCTION( halKeyPort0Isr, P0INT_VECTOR )  
{  
  HAL_ENTER_ISR();  
  
#if defined ( CC2540_MINIDK )  
  if ((HAL_KEY_SW_1_PXIFG & HAL_KEY_SW_1_BIT) || (HAL_KEY_SW_2_PXIFG & HAL_KEY_SW_2_BIT))  
#else  
  if (HAL_KEY_SW_6_PXIFG & HAL_KEY_SW_6_BIT)  
#endif  
  {  
    halProcessKeyInterrupt();  
  }  

各位,问一个问题:就是板子主控芯片是CC2541F256,程序用的OSAL操作系统,与手机通过Simple GATT Profile进行连接传输数据;我的程序中需要用P04口作为普通IO,程序中没有调用串口相关程序,当我用手机端发送数据控制IO变化时,其他的都可以正常翻转IOP04口上电默认是低电平,一旦让P04口由低电平变为高电平时,手机便会与板子断开连接(所谓单片机死机)。重新启动,仍然可以继续连接到手机。

有一个现象,当我参照上图中,把POWER_SAVING变成xPOWER_SAVING时,问题得到解决,所谓手机能够正常连接板子,让P04引脚正常翻转IO,而不出现死机。想知道其中到底发生了什么,这与POWER_SAVING有什么关系吗?




关键词: CC2541 P04高电平导致单片机复位    

高工
2016-07-27 11:41:21     打赏
2楼

这是所有的Defined Symbols

INT_HEAP_LEN=3072
HALNODEBUG
OSAL_CBTIMER_NUM_TASKS=1
HAL_AES_DMA=TRUE
HAL_DMA=TRUE
xPOWER_SAVING
xPLUS_BROADCASTER
HAL_LCD=FALSE
HAL_UART=FALSE
HAL_LED=FALSE


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]