1. 程式人生 > >ZigBee學習(1)——cc2530的時鐘模組

ZigBee學習(1)——cc2530的時鐘模組

學習CC2530 Zigbee協議時,首先需要了解時鐘系統概念,下面簡要介紹一下cc2530微控制器的時鐘系統。

工具/原料:cc2530 datasheet、IAR Embedded Workbench

一、晶振與時鐘

cc2530有一個內部系統時鐘,或者說是主時鐘。系統時鐘源是16Mhz的RC晶振或是32MHz晶體震盪器。利用CLKCONCMD特殊功能暫存器可以控制時鐘。

此外,晶片還有一個32KHz時鐘源可以是RC振盪器或是晶體振盪器,同樣也可以用CLKCONCMD暫存器控制。

其中只讀暫存器CLKCONSTA可以用來獲得當前時鐘狀態。高精度的晶體振盪器或是低功耗的RC振盪器都可以成為振盪器的選擇,需要注意的是:RF接收器要求使用32MHz晶體振盪器。如下圖所示即為時鐘結構圖:



二、晶體振盪器

在晶片內部,有2個高頻振盪器,一個是32MHz的晶體振盪器,另一個是16MHz的RC晶振。32MHz晶振的啟動時間對於某些應用顯得有些長,因此晶片可以先在16MHz RC晶振上執行,直到晶體振盪器穩定。16MHzd的RC振盪器比晶體振盪器消耗更少能量,但是精度而言比晶體振盪器差一些,並且不能作為RF傳輸的執行時鐘。

此外,晶片還有2個低頻振盪器分別是32KHz的晶體振盪器與32KHz的RC振盪器。其中,32KHz XOSC設計執行在32.768KHz頻率上,並且為需要時間準確的系統提供了一個穩定的時鐘訊號。校驗後,32KHz的RCOSC在32.753KHz頻率上執行。

需要注意的是校驗只能在32MHz XOSC使能的情況下才被允許。與32KHz XOSC 振盪器相比,2KHz的RC振盪器更適宜於較少成本與能耗。

請注意:這2個32KHz的振盪器不能同時使用。如下所示即為系統時鐘控制暫存器CLKCONCMD中部分控制位:


三、系統時鐘

系統時鐘來自於所選擇的系統時鐘源,可以是32MHz的XOSC(晶體振盪器)或者是16MHz的RCOSC(RC振盪器).暫存器CLKCONCMD中OSC位選擇系統時鐘源,需要指出的是,如果要用RF傳輸,那麼32MHz的晶體振盪器必須被選擇作為主時鐘並且穩定。

改變CLKCONCMD中的OSC位並不能立刻改變系統時鐘,只有當CLKCONSTA暫存器中的OSC位與CLKCONCMD中OSC位相同時才能起作用。這歸因於對擁有穩定的時鐘的需求優先於改變時鐘源。此外,CLKCONCMD中的CLKSPD位如同鏡子一樣反映CLKCONCMD.OSC位。

當32MHz XOSC晶振選為系統時鐘並且穩定之後,16MHz RC振盪器進行校驗,例如CLKCONSTA暫存器的OSC位從1變為0。


四、32KHz時鐘選擇

如上所述,在器件上有2個32KHz時鐘源,在復位之後預設會使能32KHz的RC振盪器,並作為32KHz的時鐘源,32KHz的RC振盪器能耗小,但與32KHz的晶體振盪器相比精度上差許多。被選擇的32KHz時鐘源用於驅動休眠時鐘,為看門狗產生滴答時鐘,並可以用作定時器TIM2的閘門(strobe)用來計算休眠定時器的休眠時間。定時器控制暫存器中OSC32K位用於選擇振盪器,作為32KHz的時鐘源。

CLKCONCMD暫存器的OSC32K位可以隨時寫入。振盪器在活躍的系統時鐘源之前是不會起作用的。當系統時鐘從16MHz改變為32MHz的晶體振盪器(CLKCONCMD.OSC從1到0)一旦32KHz RC振盪器被選中了它的的校驗就啟動了並且被執行。在校準期間,32MHz晶體振盪器的一個分頻量會被使用。32KHzRCOSC振盪器校準後的結果是它會工作在32.753kHz上。32kHz RC振盪器校準時間可能要2ms時間來完成。可以設定SLEEPCMD.OSC32K_CALDIS位設定為1的話,會關閉校準。在校準結束時,會在32KHz時鐘源上產生一個額外的脈衝,會導致睡眠定時器增加1。注意:當切換到32KHz晶體振盪器後和從32KHz晶體振盪器被設定的PM3模式喚醒時,振盪器穩定到準確頻率的時間在500 ms以上。睡眠定時器、看門狗定時器和時鐘損失探測器在32KHz晶體振盪器穩定之前不能使用。

原文連結:https://jingyan.baidu.com/article/7e440953e9d67b2fc1e2ef47.html