微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2541 外部中断唤醒后广播问题

CC2541 外部中断唤醒后广播问题

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

CC2541用内部32K,除连接有时会断线外((这个就是用了外部32K导致的),其它一切正常;当改为外部32K后,中断唤醒后有时无法广播,查资料说进入PM3后,32K停振,当唤醒时32K启动需要0。5S时间,是不是因为这个引起的。因为在外部中断唤醒后没有做延时处理,由于振荡不稳定所致;

贴上你的32K初始化代码

#define EXTERNAL_CRYSTAL_OSC          0x00  // external 32kHz XOSC

 #define INTERNAL_RC_OSC               0x80  // internal 32kHz RCOSC

#define OSC_32KHZ                     EXTERNAL_CRYSTAL_OSC

// switch to the 16MHz HSOSC and wait until it is stable #define SET_OSC_TO_HSOSC()                                                     \ {                                                                              \   CLKCONCMD = (CLKCONCMD & 0x80) | CLKCONCMD_16MHZ;                            \   while ( (CLKCONSTA & ~0x80) != CLKCONCMD_16MHZ );                            \ }

// switch to the 32MHz XOSC and wait until it is stable #define SET_OSC_TO_XOSC()                                                      \ {                                                                              \   CLKCONCMD = (CLKCONCMD & 0x80) | CLKCONCMD_32MHZ;                            \   while ( (CLKCONSTA & ~0x80) != CLKCONCMD_32MHZ );                            \ }

// set 32kHz OSC and wait until it is stable #define SET_32KHZ_OSC()                                                        \ {                                                                              \   CLKCONCMD = (CLKCONCMD & ~0x80) | OSC_32KHZ;                                 \   while ( (CLKCONSTA & 0x80) != OSC_32KHZ );                                   \ }

#define START_HSOSC_XOSC()                                                     \ {                                                                              \   SLEEPCMD &= ~OSC_PD;            /* start 16MHz RCOSC & 32MHz XOSC */         \   while (!(SLEEPSTA & XOSC_STB)); /* wait for stable 32MHz XOSC */             \ } #define STOP_HSOSC()                                                           \ {                                                                              \   SLEEPCMD |= OSC_PD;             /* stop 16MHz RCOSC */                       \ } /* Board Initialization */

#if defined ( CC2540_MINIDK )

#define HAL_BOARD_INIT()                                                       \ {                                                                              \   /* 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();                                                                \                                                             \                                                                                \   /* Enable cache prefetch mode. */                                            \   PREFETCH_ENABLE();                                                           \   /* Set LED GPIOs to outputs. */                                              \   LED1_DDR |= LED1_BV;                                                         \   LED2_DDR |= LED2_BV;                                                         \ }

 

就是在这个宏定义中的,只是把32K定为外部晶振而己,其它没变,把P2SEL设为外设功能也还是一样的

用内部的RC 32K的校准时间大概2ms,用外部的32K,就最多需要500ms

你先测试下,唤醒后校准需要的时间,然后稳定后,延迟100ms再广播

你好!

1.意思是中断唤醒后先关闭广播(之前是中断唤醒后就开始广播了),然后再测量看32K稳定的时间,等到稳定后再延时100ms,再启动广播,对吗?如果是这样子,那就是手机连接的时间还是会比较长,要超过1S钟对吗?(之前用内部32KRC是很快的)

 

2.看了其它的贴子,是说32KRC做低功耗会出现连接后有时会断线,是不是就是因为32KRC有误差导致的?

 

谢谢!

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

网站地图

Top