This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2530:CC2530

Guru**** 2551110 points
Other Parts Discussed in Thread: CC2530

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/756154/cc2530-cc2530

器件型号:CC2530

大家好、

我有一个问题需要您的帮助。

我使用具有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)"语句本应 变为无限 循环、因此器件不应发送信标。