微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2540在进入PM3后,怎么正确唤醒

CC2540在进入PM3后,怎么正确唤醒

时间:10-02 整理:3721RD 点击:

各位大大们好:

    请问,在进入PM3后,已经可以通过按键重新唤醒MCU,但是,该怎么才能使射频正常工作啊~`(*∩_∩*)′

HAL_ISR_FUNCTION( halPort2Isr, P2INT_VECTOR )
{
  HAL_ENTER_ISR();
  uint8 value;
  if( P2IFG & 0x01 )
  {
    P2IFG &= ~BV(0);
    value = TRUE;
    GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof(uint8), &value); //开启广播
  }
  else
  {
    P2IFG = 0;
  }
  CLEAR_SLEEP_MODE();
  HAL_EXIT_ISR();
}

这是我P2.0中断的代码,在中断中,我恢复了 CC2540 的广播使能,发现能成功进入中断,但是运行完开启广播那一句之后,广播并没有开启。所以想问一下各位大大,我该怎么做才行,谢谢~`(*∩_∩*)′

Bob,

最好不要再这里直接调用应用层的这个函数。

建议你可以参考keyfob 工程里面的按键IO 中断触发唤醒PM3 直接进入广播的代码,有现成的。

Yan,

if( gapProfileState != GAPROLE_CONNECTED )
{
uint8 current_adv_enabled_status;
uint8 new_adv_enabled_status;

//Find the current GAP advertisement status
GAPRole_GetParameter( GAPROLE_ADVERT_ENABLED, &current_adv_enabled_status );

if( current_adv_enabled_status == FALSE )
{
new_adv_enabled_status = TRUE;
}
else
{
new_adv_enabled_status = FALSE;
}

//change the GAP advertisement status to opposite of current status
GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &new_adv_enabled_status );
}

这段代码可以唤醒PM2状态么?还有怎么能让蓝牙进入PM2。是用这个么osal_pwrmgr_device( PWRMGR_BATTERY );?还有我打开PowerSave之后为什么之前能给串口发送的数据现在貌似全都发不出去了?

我认为应该可以。你的那个问题,我想如果想是用那些外设设备,必须,将电池模式调成

osal_pwrmgr_device( PWRMGR_ALWAYS_ON );,不然设备休眠会影响外设工作。

还有,按照TI员工的回复,我认为,从中断中让设备进入正常状态的步骤应该是:

1.在中断函数中添加一个定时器任务:

XX_ISR( void )
{
	//其它函数
	..
	
	//使能一个定时器任务
	osal_set_event( simpleBLEPeripheral_TaskID, _My_DEVICE_START );
}

2.然后在定时器时间轮询函数" SimpleBLEPeripheral_ProcessEvent() "中添加具体的业务逻辑,调电池模式啊,开广播啊啥的:

uint16 SimpleBLEPeripheral_ProcessEvent( uint8 task_id, uint16 events )
{
	//其它事件轮询函数
	//..
	
	//中断事件的定时器任务
	if( events & _My_ISR_EVENT )
	{
		osal_pwrmgr_device( PWRMGR_BATTERY );
		GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, 1, TRUE );
		
		return (events ^ _My_ISR_EVENT )
	}
}

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

网站地图

Top