微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > cc2540 定时器1ms

cc2540 定时器1ms

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

各位:

我现在要每1ms处理一个事件。我不知道如何获取1ms时间。

请问:如果我使用void buzzerInit(void) timer3设置1ms中断一次的话。中断函数在哪里?

在从机代码中,频繁键入hal_sleep 的PM2模式,这时候timer3 的时钟源会被停止。这样会导致timer3不准确,而如果不频繁进入PM2 功耗又比较大?

请问还有其他方式能准确的获取到1ms么?

HI T_MAC:

    我尝试使用halSleep进入PM3模式,可是经过测试之后发现,程序并没有进入PM3模式,你能指导一下我怎么样控制程序运行在PM3或者

PM2模式吗?你的回复将是我无尚的荣幸。

    谢谢你

hi  :

1、你必须确保能在osal_run_system函数中调用如下红色代码。

#if defined( POWER_SAVING )
else // Complete pass through all task events with no activity?
{
osal_pwrmgr_powerconserve(); // Put the processor/system into sleep
}

#endif

2、在osal_pwrmgr_powerconserve中确保能执行到如下红色代码

{
uint32 next;
halIntState_t intState;

// Should we even look into power conservation
if ( pwrmgr_attribute.pwrmgr_device != PWRMGR_ALWAYS_ON )
{
// Are all tasks in agreement to conserve
if ( pwrmgr_attribute.pwrmgr_task_state == 0 )
{
// Hold off interrupts.
HAL_ENTER_CRITICAL_SECTION( intState );

// Get next time-out
next = osal_next_timeout();

// Re-enable interrupts.
HAL_EXIT_CRITICAL_SECTION( intState );

// Put the processor into sleep mode
OSAL_SET_CPU_INTO_SLEEP( next );
}
}
}
#endif /* POWER_SAVING */

3、如果能进入OSAL_SET_CPU_INTO_SLEEP( next );后,里面变量halPwrMgtMode 可设置进入PM2或Pm3.

Hi T_MAC,

osal_start_timerEx()  的单位就是1ms 的.

osal timer 的计数实际上用的是timer 2 的 记时值(通过轮询寄存器状态, 并非中断), 在PM2 模式下 timer 2 的记时功能照常工作, 所以如果只是1ms 事件的话, 用osal_start_timerEx() 就应该可以, 而且不费电.

HI T_MAC:

     非常感谢你的回复,我现在尝试按你的指导去验证一下代码,验证完成之后再向你请教,谢谢你。

hi T_MAC: 

     我调了一下我自己的代码,发现你所说的两个地方都是调到了的,#define OSAL_SET_CPU_INTO_SLEEP(m)  halSleep(m)   /* interface to HAL sleep */

我不是很清楚为什么在halSleep(m)里它问什么会调用LL_PowerOnReq( wakeForRF )这个函数?这个函数调用之后,定时器2就被打开了,程序也就不能进入

PM2或者PM3,请问你的代码里是不是也调用了这个函数?假如调用了,你测试出来的电流是0.04毫安吗?

   希望你能回复,谢谢

      

Hi ,

cc2540芯片资料上说,进入PM3后,要关闭所以的时钟,振荡器,然而进入PM3后打印的寄存器的值如下:

CLKCONSTA:0x0

CLKCONCMD:0x0

SLEEPCMD:0x7

SLEEPSTA:0x4D

在设置成PM3后,所以的时钟与振荡器是不是自动关闭,还是程序来手动关闭,如果是程序来关闭的话,这么关闭啊

hi

LL_PowerOnReq控制RF射频开关,这函数在Pm2、PM3唤醒后才调用的。

HI YAN:

我试过用osal_start_timerEx设置1ms 定周期,功耗挺大的,不适用我这项目。请问还有其他能准确获取1ms 定周期,而且功耗影响不大的么?

我之前自己写了一个timer3的,结果也是功耗比较大

我也需要在睡眠状态下的1ms的定时器,用于计算脉冲间隔,但是PM2不是数字部分已经被关掉了吗,那除了睡眠定时器外的其他定时器应该不能工作了吧?

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

网站地图

Top