微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > OSAL问题咨询

OSAL问题咨询

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

Hi! TI的技术支持:

      为了跟踪睡眠的问题,我在void osal_pwrmgr_powerconserve( void )中添加了点亮LED和关闭LED的代码。

if ( pwrmgr_attribute.pwrmgr_device != PWRMGR_ALWAYS_ON )//省电模式
{
HalLedSet(HAL_LED_2,HAL_LED_MODE_OFF);

...

}

else

{

HalLedSet(HAL_LED_2,HAL_LED_MODE_ON);//不省电模式

}

然后我在用户任务中调用void osal_pwrmgr_device(PWRMGR_ALWAYS_ON )。

按道理来说,系统电源会一直保持ALWAYS_ON,并且一直电量LED2.

但是,事实是,点亮一小段时间后就熄灭了。——(osal_pwrmgr_device()这个函数我只调用一次)。

也就是说,可能在其他不了解的地方,被熄灭了LED。

后来我屏蔽了const pTaskEventHandlerFn tasksArr[]中的任务及osalInitTasks();中对应的初始化任务。

发现是LL_ProcessEvent()任务造成的。我想了解下,为何这个任务会关闭我的LED呢?

我只要屏蔽这个任务,就正常了。。。

shaokai,

用的啥工程?

有连接还是没连接?

Yan

      我用的是simpleBLEPeripheral工程。上电即如此,没有连接。。。

      以下是我修改过的所有地方,其他不变:

1. uint16 SimpleBLEPeripheral_ProcessEvent( uint8 task_id, uint16 events )中

{

   ...

if ( events & SBP_START_DEVICE_EVT )
{

...

osal_pwrmgr_device(PWRMGR_ALWAYS_ON);

}

}

2. void osal_pwrmgr_powerconserve( void )中

{

if ( pwrmgr_attribute.pwrmgr_device != PWRMGR_ALWAYS_ON )
{
HalLedSet(HAL_LED_2,HAL_LED_MODE_OFF);

...

}

else

{

HalLedSet(HAL_LED_2,HAL_LED_MODE_ON);

}

}

希望你能帮我验证下,这对我们分配IO口很重要!谢谢。

又要沉了,不要沉啊,不要啊。。。

shaokai,

根据你的要求, 在main()里面,把 osal_pwrmgr_device(PWRMGR_BATTERY); 改成 osal_pwrmgr_device(PWRMGR_ALWAYS_ON);

Yan

      你确定有效吗?我没试出效果哦!

      而且我觉得也说不通啊,main()里的osal_pwrmgr_device()在前, uint16 SimpleBLEPeripheral_ProcessEvent( uint8 task_id, uint16 events )中

的 if ( events & SBP_START_DEVICE_EVT )在后。我在后面的处理事件里把它设为 osal_pwrmgr_device(PWRMGR_ALWAYS_ON);应该没啥不一样的。

shaokai,

系统有个机制,在每reset,或者从PM3 醒来后,等到32K 晶振稳定之后(这个过程需要几百毫秒,在你收到SBP_START_DEVICE_EVT 之后才完成),都会自动把模式设置成BATTERY 模式。

所以,建议你,系统初始化完成1秒之后,任何时间,当你需要UART的时候,启动一个timer, 不要让系统进入PM3 模式,然后再用POWER_ALSWAYS_ON,这样就不会存在从PM3 醒来,系统模式重新被设置的问题了。

当然,UART用完之后,记得停止那个Timer,能让系统再次进入PM3. 

不一定一次性成功哈,你先照我的方法多试试几种可能性。

Thanks Yan.

    昨天你的同事已经为我解答这个问题了,还是感谢你热心的解答。谢谢~

I will try again!

上一篇:关于蓝牙pcb图
下一篇:cc2540闪灯程序!

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

网站地图

Top