大家好、
我有一个问题需要您的帮助。
我使用具有32MHz XOSC 振荡器 且无32kHz XOSC 的 CC2530。 但我忘记将 OSC32K_crystal_installed 设置为 false、在代码中、 32kHz 时钟源选择 32kHz XOSC (实际上、该外部晶体振荡器不焊接到电路板)。
让我感到困惑的是、它起作用了! 该模块可以发出 信标并可以加入网络。
根据我的理解、 由于32kHz XOSC 不存在、 macMcuInit (void)中的"MAC_radio_timer_WAKE_UP ();"一句 将变为 无限 循环。因为"CC2530_user's guide"-222.4.2中描述的内容
"
22.4.3计时器同步启动
当定时器处于空闲模式时、通过在时向 T2CTRL.RUN 写入1来同步启动定时器
T2CTRL.SYNC 为1。 在 T2CTRL.run 设置为1后、计时器将保持空闲模式、直到
检测到32kHz 时钟上升沿。 发生这种情况时、定时器首先计算16位的新值
计时器值和24位计时器溢出计数、基于当前和存储的睡眠计时器值
和当前的16位计时器值。 新的定时器2和溢出计数值被加载到定时器中、
计时器进入运行模式。 T2CTRL.STATE = 1表示模块正在运行。 这种情况
从32kHz 时钟上升沿开始、同步启动过程需要86个时钟周期
采样高电平。 同步启动和停止功能要求系统时钟频率为
选择为32MHz。 如果选择了16MHz 时钟、则会在新的计算值中添加一个偏移量。
"
(
在代码中:
#define MAC_RADIO_TIMER_WAKE_UP () st (st( while (CLKCONSTA!=(CLKCONCMD_32MHz | OSC_32kHz)););\
T2CTRL |=(TIMER2_RUN | TIMER2_SYNC);\
while (!(T2CTRL & TIMER2_STATE));)
)
那么、它是如何工作的?
由于32kHz xosc 不存在并且我选择在代码中使用32kHz xosc、因此无法检测32kHz 时钟上升沿。 由于没有上升沿、"while (!(T2CTRL & TIMER2_STATE)"语句本应 变为无限 循环、因此器件不应发送信标。