




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第4章CC2530基礎(chǔ)開發(fā)1本章目標掌握I/O的使用理解存儲器以及映射的關(guān)系掌握ADC的使用方法掌握串口和DMA的使用方法掌握定時器的使用2本章目標掌握I/O的使用理解存儲器以及映射的關(guān)系掌握ADC的使用方法掌握串口和DMA的使用方法掌握定時器的使用3高性能、低功耗的8051微控制器內(nèi)核。適應2.4GHzIEEE802.15.4的RF收發(fā)器。極高的接收靈敏度和抗干擾性。32KB/64KB/128KB/256KB閃存。8KBSRAM,具備各種供電方式下的數(shù)據(jù)保持能力。強大的DMA功能。只需極少的外接元件,即可形成一個簡單應用系統(tǒng)。只需一個晶振,即可滿足網(wǎng)狀型網(wǎng)絡(luò)系統(tǒng)的需要。4.1概述CC2530芯片特征4低功耗,主動模式RX(CPU空閑):24mA;主動模式TX在1dB(CPU空閑):29mA;供電模式1(4us喚醒):0.2mA;供電模式2(睡眠定時器運行):1uA;供電模式3(外部中斷):0.4uA;寬電源電壓范圍(2V-3.6V)。硬件支持CSMA/CA。支持數(shù)字化的接收信號強度指示器/鏈路質(zhì)量指示(RSSI/LQI)。具有8路輸入8位~14位ADC。高級加密標準AES協(xié)處理器。具有看門狗和2個支持多種串行通信協(xié)議的USART。1個通用的16位定時器和2個8位定時器,1個IEEE802.15.4MAC定時器。21個通用I/O引腳。4.1概述CC2530芯片特征54.2CC2530結(jié)構(gòu)框架6CC2530包含一個“增強型”工業(yè)標準的8位8051微控制器內(nèi)核,運行時鐘32MHz,具有8倍的標準8051內(nèi)核的性能增強型8051內(nèi)核使用標準的8051指令集,并且每個指令周期是一個時鐘周期,而標準的8051每個指令周期是12個時鐘周期,因此增強型8051消除了總線狀態(tài)的浪費,指令執(zhí)行比標準的8051更快4.2.1CC2530CPU7內(nèi)核代碼:CC2530的“增強型8051”內(nèi)核的“目標代碼”兼容“標準8051”內(nèi)核的“目標代碼”,即CC2530的8051內(nèi)核的“目標代碼”可以使用“標準8051”的編譯器或匯編器進行編譯。微控制器:由于CC2530的“增強型8051”內(nèi)核使用了不同于“標準8051”的指令時鐘,因此“增強型8051”在編譯時與“標準8051”代碼編譯時略有不同,例如“標準8051”的微控制器包含的“外設(shè)單元寄存器”的指令代碼在CC2530的“增強型8051”不能正確運行。4.2.1CC2530CPUCC2530的“增強型8051內(nèi)核”與“標準的8051微控制器”相比,除了速度改進之外,使用時要注意以下兩點:84.2.2CC2530存儲器及映射
CC2530物理存儲器CC2530存儲空間映射存儲器仲裁94.2.2CC2530存儲器及映射物理存儲器SRAM上電時,SRAM的內(nèi)容未定義,在供電的情況下,SRAM的內(nèi)容被保留FLASH片上閃存存儲器,主要為了保存程序和常量數(shù)據(jù)。FLASH由一組2KB的頁面組成
信息頁面信息頁面是一個2KB的只讀區(qū)域,它的主要作用是存儲全球唯一的IEEE地址
104.2.2CC2530存儲器及映射物理存儲器SFR控制8051CPU內(nèi)核或外設(shè)的一些功能
XREG
是SFR的擴展寄存器,比如射頻寄存器,訪問速度比SFR要慢
114.2.2CC2530存儲器及映射存儲空間CODE程序存儲器,只讀存儲空間,用于存放程序代碼和一些常量,有16根地址總線,尋址范圍為0x0000~0xFFFF共64KB
DATA數(shù)據(jù)存儲器,可讀/寫的數(shù)據(jù)存儲空間,用于存放程序運行過程中的數(shù)據(jù)。有8根地址總線,因此尋址空間為0x00~0xFF,共256個字節(jié)
XDATA外部數(shù)據(jù)存儲器,可讀/寫的數(shù)據(jù)存儲空間,主要用于DMA尋址。有16根地址總線,尋址空間是0x0000~0xFFFF共64KB
SFR特殊功能寄存器,可讀/寫的寄存器存儲空間,共有128字節(jié)。對于地址是被8整除的SFR寄存器,每一位還可以單獨尋址
124.2.2CC2530存儲器及映射物理存儲器與存儲空間的關(guān)系存儲空間只是4種不同的尋址方式概念,并不代表物理具體上的存儲設(shè)備,只是存儲空間的概念;而FLASH、SRAM、EEPROM等是具體的物理存儲設(shè)備。他們兩者之間的關(guān)系是通過映射來聯(lián)系起來的。例如FLASH或者EEPROM都可以作為物理存儲媒介映射到CODE上。134.2.2CC2530存儲器及映射映射映射就是將CC2530的物理存儲器映射到其存儲空間上,有兩個作用:
方便DMA訪問存儲設(shè)備
可在CODE區(qū)執(zhí)行FLASH或SRAM中的代碼
144.2.2CC2530存儲器及映射映射的兩種形式CODE存儲器映射
XDATA存儲器映射154.2.2CC2530存儲器及映射CODE存儲器映射CODE存儲器映射具有兩個功能:一是將FLASH映射至CODE存儲空間;二是執(zhí)行來自SRAM的代碼(將SRAM映射至CODE存儲空間)
164.2.2CC2530存儲器及映射FLASH映射CODE的尋址空間為64KB,而對于CC2530F256設(shè)備來說FLASH的存儲空間為256KB?首先要解決存儲空間不對稱的問題
CC2530將FLASH存儲器分為幾個bank,每個bank的大小是32KB。對于CC2530F256設(shè)備來說,它有8個bank,分別為bank0~bank7。通過操作寄存器FMAP.MAP[2:0]來控制將哪個編號的bank映射到CODE區(qū)域
只針對CC2530F32這款芯片,因為這款芯片的的FLASH只有32KB雖然這里有bank0區(qū)域,但是映射的時候bank0總映射的根部的低32KB區(qū)域174.2.2CC2530存儲器及映射SRAM映射為了便于在SRAM中執(zhí)行代碼,可以將SRAM映射到CODE存儲空間的0x8000~(0x8000+SRAM_SIZE-1)的區(qū)域
雖然程序從SRAM中運行代碼,但是并不代表程序是從SRAM中啟動的。程序仍舊是從CODE的普通區(qū)域0x0000開始執(zhí)行,當程序執(zhí)行到0x8000時,將執(zhí)行SRAM中的代碼
184.2.2CC2530存儲器及映射SRAM映射為了方便DMA控制器能訪問所有的物理存儲空間,CC2530把所有的物理存儲器以及寄存器都映射到XDATA上,包括CODE和SFR部分存儲空間
。194.2.2CC2530存儲器及映射XDATA包含了所有物理存儲器的映射,包括8KB的SRAM存儲器、XREG、SFR、信息頁面和FLASH存儲器
SRAM映射的地址范圍是0x0000到SRAM_SIZE-1。其中SRAM較高的256字節(jié)映射到DATA存儲空間8位地址區(qū)域,即地址范圍從SRAM_SIZE-256到SRAM_SIZE-1
XREG區(qū)域映射到1KB地址區(qū)域0x6000-0x63FF
SFR寄存器映射到地址區(qū)域0x7080-0x70FF。128個條目的硬件寄存器區(qū)域是通過這一存儲空間訪問的。閃存信息頁面2KB映射到地址區(qū)域0x7800-0x7FFF。這是一個只讀區(qū)域,包含有關(guān)設(shè)備的各種信息信息頁面映射到地址區(qū)域0x7800~0x7FFF
XBANK為CODE存儲空間的bank0~7區(qū)域的映射,其地址仍然是0x8000~0xFFFF。可以配置存儲器控制寄存器MEMCTR.XBANK[2:0](詳見存儲器仲裁)決定選擇映射bank0~bank7之間的哪個區(qū)域,比如MEMCTR.XBANK=001,則映射bank1區(qū)域204.2.2CC2530存儲器及映射存儲器仲裁
主要功能是解決CPU與DMA訪問所有物理存儲器(除了CPU內(nèi)部寄存器)之間的沖突問題。當CPU和DMA之間發(fā)生沖突時,“存儲器仲裁”停止CPU或DMA的總線
存儲器仲裁主要有兩個寄存器:存儲器仲裁控制寄存器MEMCTR和閃存區(qū)映射寄存器FMAP,這兩個寄存器用于控制存儲器子系統(tǒng)的各個方面214.2.2CC2530存儲器及映射存儲器仲裁控制寄存器MEMCTR
MEMCTR.XMAP必須設(shè)置以使得程序從SRAM執(zhí)行;MEMCTR.XBANK決定XDATA的高32KB映射CODE存儲空間的哪個bank區(qū)域
位名稱復位R/W描述7:4--0000R0保留3XMAP0R/WXDATA映射到代碼,當設(shè)置了這一位,SRAMXDATA區(qū)域從0x0000到(SRAM_SIZE)映射到CODE區(qū)域的(0x8000+SRAM_SIZE-1)這使得程序代碼從RAM執(zhí)行。0:SRAM映射到CODE功能禁用1:SRAM映射到CODE功能使能2:0XBANK000R/WXDATA區(qū)選擇,控制物理閃存存儲器的哪個代碼區(qū)域映射到XDATA區(qū)域(0x8000-0xFFFF)。當設(shè)置為0,映射到根底部。有效設(shè)置取決于設(shè)備的閃存大小。寫一個無效設(shè)置被忽略,即不會更新XBANK[2:0]32KB版本只能是0(即總是映射到根底部)64KB版本:0-1128KB版本:0-3256KB版本:0-7224.2.2CC2530存儲器及映射閃存區(qū)映射寄存器FMAP
閃存區(qū)映射寄存器FMAP控制物理32KB代碼區(qū)映射到CODE存儲空間的程序地址區(qū)域0x8000-0xFFFF
位名稱復位R/W描述7:3--00000R0保留2:0MAP[2:0]001R/W閃存區(qū)域映射,控制物理閃存存儲器的哪個代碼映射到XDATA區(qū)域(0x8000-0xFFFF)。當設(shè)置為0,映射到根部區(qū)。有效設(shè)置取決于設(shè)備的閃存大小。寫一個無效設(shè)置被忽略,即不會更新MAP[2:0]32KB版本只能是0(即總是映射到根底部)64KB版本:0-1128KB版本:0-3256KB版本:0-7即最底部的32KB區(qū)域(0x0000~0x7FFF)234.3CC2530編程基礎(chǔ)CC2530軟件開發(fā)平臺使用IARIAR對CC2530編程操作提供了良好的C語言支持
CC2530編程包括頭文件、運行庫以及中斷編程等
244.3.1寄存器和匯編指令CC2530的CPU寄存器與標準的8051的CPU寄存器相同,都包括8組寄存器R0~R7、程序狀態(tài)字PSW、累加器ACC、B寄存器和堆棧指針SP等CC2530的CPU指令與標準的8051的指令集相同
254.3.2編程基礎(chǔ)CC2530編程的風格基本上與普通的基于8051的C語言編程相同
頭文件初始化函數(shù)主函數(shù)其他中斷函數(shù)
264.3.2編程基礎(chǔ)頭文件
在C語言中頭文件以“XXX.h”的格式存在,其中“XXX”為文件名,在頭文件中一般定義程序需要的變量或函數(shù)的聲明等。一般頭文件在源程序的一開始使用“包含命令”將頭文件包含在源程序中,以便源程序調(diào)用頭文件中的變量等。頭文件“包含命令”使用“#include”命令
274.3.2編程基礎(chǔ)頭文件
在一個工程里面還會有其他的頭文件,比如要控制CC2530開發(fā)板的LED,一般由用戶新建一個頭文件,此頭文件可以由用戶命名,例如“LED.h”
在用戶編寫的頭文件中,也需要將“ioCC2530.h”包含在內(nèi),那么在主函數(shù)文件中只需要包含“LED.h”文件即可284.3.2編程基礎(chǔ)初始化函數(shù)
在一個項目工程中為了增強程序的可移植性和可維護性,一般將一些初始化配置信息編寫成一個函數(shù),稱作初始化函數(shù)。在一個工程中可以有多個初始化函數(shù)
294.3.2編程基礎(chǔ)主函數(shù)
與常規(guī)的C語言程序一樣,IAR下的CC2530程序依然將main()函數(shù)設(shè)定為程序的入口函數(shù),也稱主函數(shù)。當程序比較大時,在主函數(shù)內(nèi)一般不直接編寫與程序相關(guān)的業(yè)務算法,而是調(diào)用其他子函數(shù)(如用庫函數(shù)、戶編寫的硬件初始化函數(shù)和業(yè)務算法或其他功能函數(shù)等)來實現(xiàn)整個程序的邏輯,使主函數(shù)看起來簡單明了并且易于程序的維護
304.3.2編程基礎(chǔ)其他子函數(shù)
在一個程序中,為了程序的可維護性,除了初始化函數(shù)之外,還需要將某個業(yè)務算法或功能封裝成一個函數(shù),稱為子函數(shù)
314.3.2編程基礎(chǔ)中斷函數(shù)
當需要中斷處理時,需要編寫中斷處理函數(shù),中斷處理函數(shù)是當有中斷發(fā)生時,需要處理的事件324.3.2中斷的使用CC2530的中斷系統(tǒng)是為了讓CPU對內(nèi)部或外部的突發(fā)事件及時地作出響應,并執(zhí)行相應的中斷程序。中斷由中斷源引起,中斷源由相應的寄存器來控制。當需要使用中斷時,需配置相應的中斷寄存器來開啟中斷,當中斷發(fā)生時將跳入中斷服務函數(shù)中執(zhí)行此中斷所需要處理的事件。334.3.3中斷的使用中斷源與中斷向量
CC2530有18個中斷源,每個中斷源都可以產(chǎn)生中斷請求,中斷請求可以通過設(shè)置中斷使能SFR寄存器的中斷使能位IEN0、IEN1或IEN2使能或禁止中斷。344.3.3中斷的使用中斷號碼描述中斷名稱中斷向量中斷屏蔽中斷標志0RFTXRFIO下溢或RXFIFO溢出RFERR03HIEN0.RFERRIETCON.RFERRIF1ADC轉(zhuǎn)換結(jié)束ADC0BHIEN0.ADCIETCON.ADCIF2USART0RX完成URX013HIEN0.URX0IETCON.URX0IF3USART1RX完成URX11BHIEN0.URX1IETCON.URX1IF4AES加密/解密完成ENC23HIEN0.ENCIES0CON.ENCIF5睡眠計時器比較ST2BHIEN0.STIEIRCON.STIF6端口2輸入/USBP2INT33HIEN2.P2IEIRCON2.P2IF7USART0TX完成UTX03BHIEN2.UTX0IEIRCON2.UTX0IF8DMA傳送完成DMA43HIEN1.DMAIEIRCON.DMAIF9定時器1(16位)捕獲/比較/溢出T14BHIEN1.T1IEIRCON.T1IF10定時器2T253HIEN1.T2IEIRCON.T2IF11定時器3(8位)捕獲/比較/溢出T35BHIEN1.T3IEIRCON.T3IF12定時器4(8位)捕獲/比較/溢出T463HIEN1.T4IEIRCON.T4IF13端口0輸入P0INT6BHIEN1.P0IEIRCON.P0IF14USART1TX完成UTX173HIEN2.UTXIEIRCON2.UTX1IF15端口1輸入P1INT7BHIEN2.P1IEIRCON2.P1IF16RF通用中斷RF83HIEN2.RFIES1CON.RFIF17看門狗定時器溢出WDT8BHIEN2.WDTIEIRCON.WDTIF354.3.3中斷的使用中斷源與中斷向量
當相應的中斷源使能并發(fā)生時,中斷標志位將自動置1,然后程序跳往中斷服務程序的入口地址執(zhí)行中斷服務程序。待中斷服務程序處理完畢后,由硬件清除中斷標志位
中斷服務程序的入口地址即中斷向量,CC2530的18個中斷源對應了18個中斷向量,中斷向量定義在頭文件“ioCC2530.h”中364.3.3中斷的使用中斷優(yōu)先級
中斷優(yōu)先級將決定中斷響應的先后順序,在CC2530中分為六個中斷優(yōu)先組,即IPG0~IPG5,每一組中斷優(yōu)先組中有三個中斷源
組中斷IPG0RFERRRFDMAIPG1ADCT1P2INTIPG2URX0T2UTX0IPG3URX1T3UTX1IPG4ENCT4P1INTIPG5STP0INTWDT374.3.3中斷的使用中斷優(yōu)先級
中斷優(yōu)先組的優(yōu)先級設(shè)定由寄存器IP0和IP1來設(shè)置。CC2530的優(yōu)先級有4級,即0~3級,其中0級的優(yōu)先級最低,3級的優(yōu)先級最高。
IP1_XIP0_X優(yōu)先級000(優(yōu)先級別最低)011102113(優(yōu)先級別最高)其中X為六個中斷優(yōu)先組IPG0~IPG5中的任何一個
。
設(shè)置IPG0優(yōu)先級最高IP1_IPG0=1;IP0_IPG0=1;384.3.3中斷的使用中斷優(yōu)先級
如果同時收到相同優(yōu)先級或同一優(yōu)先級組中的中斷請求時,將采用輪流檢測順序來判斷中斷優(yōu)先級別的響應
394.3.3中斷的使用中斷優(yōu)先級
中斷向量編號中斷名稱優(yōu)先級排序0RFERR輪流探測順序為自上向下優(yōu)先級依次降低16RF8DMA1ADC9T12URX010T23URX111T34ENC12T45ST13P0INT6P2INT7UTX014UTX115P1INT17WDT例如:在中斷優(yōu)先級組IPG0中的中斷RFERR、RF和DMA的中斷優(yōu)先級是相同的,如果同時使用這三個中斷,就需要使用輪流探測順序來判斷哪一優(yōu)先級最高。由輪流探測順序表查得RFERR中斷優(yōu)先級最高,RF中斷次之,DMA中斷與其他兩個中斷相比中斷優(yōu)先級最低
404.3.3中斷的使用中斷處理過程
中斷發(fā)生時,CC2530硬件自動完成以下處理中斷申請:中斷源向CPU發(fā)出中斷請求信號(中斷申請一般需要在程序初始化中配置相應的中斷寄存器開啟中斷)
中斷響應:CPU檢測中斷申請,把主程序中斷的地址保存到堆棧,轉(zhuǎn)入中斷向量入口地址
中斷處理:按照中斷向量中設(shè)定好的地址,轉(zhuǎn)入相應的中斷服務程序
中斷返回:中斷服務程序執(zhí)行完畢后,CPU執(zhí)行中斷返回指令,把堆棧中保存的數(shù)據(jù)從堆棧彈出,返回原來程序
414.3.3中斷的使用中斷編程
中斷編程的一般過程如下:中斷設(shè)置:根據(jù)外設(shè)的不同,具體的設(shè)置是不同的,一般至少包含啟用中斷
中斷函數(shù)編寫;這是中斷編程的主要工作,需要注意的是,中斷函數(shù)盡可能的減少耗時或不進行耗時操作
以CC2530的外部中斷為例
//P0中斷標志清0P0IFG|=0x00;//P0.4有上拉、下拉能力
P0INP&=~0X30;//P0.4和P0.5中斷使能
P0IEN|=0x30;//P0.4和P0.5,下降沿觸發(fā)
PICTL|=0X01;//開中斷
EA=1;//端口0中斷使能
IEN1|=0X20;424.3.3中斷的使用中斷編程
中斷編程的一般過程如下:CC2530所使用的編譯器為IAR,在IAR編譯器中用關(guān)鍵字__interrupt來定義一個中斷函數(shù)。使用#progmavector來提供中斷函數(shù)的入口地址,并且中斷函數(shù)沒有返回值,沒有函數(shù)參數(shù)
#pragmavector=P0INT_VECTOR__interruptvoidP0_ISR
(void){//中斷程序代碼}434.3.3中斷的使用中斷編程
在中斷函數(shù)編寫中,當程序進入中斷服務程序之后,需要執(zhí)行以下幾個步驟
:將對應的中斷關(guān)掉(不是必須的,需要根據(jù)具體情況來處理);如果需要判斷具體的中斷源,則根據(jù)中斷標志位進行判斷(例如所有I/O中斷共用1個中斷向量,需要通過中斷標志區(qū)分是哪個引腳引起的中斷)清中斷標志(不是必須的,CC2530中中斷發(fā)生后由硬件自動清中斷標志位)處理中斷事件,此過程要盡可能的少耗時最后如果在第一步中關(guān)閉了相應的中斷源,需要在退出中斷服務程序之前打開對應的中斷//中斷函數(shù)入口地址#pragmavector=P0INT_VECTOR//定義一個中斷函數(shù)
__interruptvoidP0_ISR(void){//關(guān)端口P0.4、P0.5中斷
P0IEN&=~0x30;//判斷中斷發(fā)生
if(P0IFG>0)
{//清中斷標志P0IFG=0;/**中斷事件的處理**/...........................}//開中斷
P0IEN|=0x30;}444.4I/OCC2530包括3個8位輸入/輸出(I/O)端口,分別是P0、P1和P2。其中P0和P1有8個引腳,P2有5個引腳,共21個數(shù)字I/O引腳
,具有以下功能:通用I/O外設(shè)I/O外部中斷源輸入口弱上拉輸入或推拉輸出454.4.1通用I/O用作通用I/O時,引腳可以組成3個8位端口,端口0、端口1和端口2,三個端口分別用P0、P1和P2來表示所有的端口均可以通過SFR寄存器P0、P1和P2進行位尋址和字節(jié)尋址
每個端口引腳都可以單獨設(shè)置為通用I/O或外部設(shè)備I/O
其中P1.0和P1.1具備20mA的輸出驅(qū)動能力,其他所有的端口只具備4mA的輸出驅(qū)動能力
464.4.1通用I/O通用I/O配置寄存器(其中x表示0,1,2)功能寄存器PxSEL方向寄存器PxDIR工作模式寄存器PxINP474.4.1通用I/O配置寄存器PxSEL(其中x表示0,1,2)寄存器PxSEL用來設(shè)置端口的每個引腳為通用I/O或者是外部設(shè)備I/O(復位之后,所有的數(shù)字輸入、輸出引腳都設(shè)置為通用輸入引腳)以P0SEL為例講解位名稱復位R/W描述7:0SELP0[7:0]0x00R/WP0.7~P0.0功能選擇0:通用I/O1:外設(shè)I/O//P0.4和P0.5設(shè)置為普通的I/O口P0SEL&=~0x30;//P0.4和P0.5設(shè)置為外設(shè)的I/O口P0SEL|=0x30;484.4.1通用I/O配置寄存器PxDIR(其中x表示0,1,2)如果需要改變端口引腳方向,需要使用寄存器PxDIR來設(shè)置每個端口引腳的輸入和輸出
以P0DIR為例講解//P0.4和P0.5設(shè)為輸入P0DIR&=~0x30;//P0.4和P0.5設(shè)置為輸出低電平P0_4=0;P0_5=0;//P1.0和P1.1設(shè)置為輸出P1DIR|=0x03;//P1.0和P1.1設(shè)置為輸出高電平P1_0=1;P1_1=1;位名稱復位R/W描述7:0DIRP0[7:0]0x00R/WP0.7~P0.0的I/O方向選擇0:輸入1:輸出494.4.1通用I/O配置寄存器PxINP(其中x表示0,1,2)復位之后,所有的端口均設(shè)置為帶上拉的輸入。用作輸入時,通用I/O端口引腳可以設(shè)置為上拉、下拉或三態(tài)操作模式。其中P1.0和P1.1端口沒有上拉和下拉功能。上拉、下拉或三態(tài)操作模式寄存器由PxINP設(shè)置以P0INP為例講解//P0.4和P0.5設(shè)置為三態(tài)P0INP|=0x30;//P2.0和P2.1設(shè)置上拉狀態(tài)P2INP&=~0x03;位名稱復位R/W描述7:0MDP0[7:0]0x00R/WP0.7~P0.0的I/O輸入模式功能選擇0:上拉/下拉1:三態(tài)504.4.1通用I/O注意寄存器P2INP可以配置P0、P1和P2端口為上拉或下拉。//P0端口為上拉輸入P2INP|=0x80;位名稱復位R/W描述7PDUP20R/W端口2上拉/下拉選擇,對所有的端口2引腳設(shè)置為上拉/下拉輸入0:上拉1:下拉6PDUP10R/W端口1上拉/下拉選擇,對所有的端口1引腳設(shè)置為上拉/下拉輸入0:上拉1:下拉5PDUP00R/W端口0上拉/下拉選擇,對所有的端口0引腳設(shè)置為上拉/下拉輸入0:上拉1:下拉4:0MDP2[4:0]00000R/WP2.4~P2.0的I/O輸入模式功能選擇0:上拉/下拉1:三態(tài)514.4.1通用I/O任務描述4.D.1,通過掃描方式實現(xiàn)按鍵觸發(fā)LED亮滅。利用按鍵SW5和按鍵SW6控制LED1和LED2。當按下SW5時,LED1狀態(tài)改變;當按下SW6時,LED2狀態(tài)改變
按鍵SW5由P0.4控制,按鍵SW6由P0.5控制;LED1和LED2分別由P1.0和P1.1控制
按鍵的初始化:將P0.4和P0.5設(shè)為普通I/O口,并且設(shè)置為輸入狀態(tài)
LED初始化:將P1.0和P1.1設(shè)置為輸出且將LED1和LED2關(guān)閉采用按鍵檢測的方法來控制LED狀態(tài)的改變:當檢測到SW5按下時,LED1狀態(tài)改變;當檢測到SW6按下時,LED2狀態(tài)改變
524.4.1通用I/O#include<ioCC2530.h>#defineuintunsignedint#defineucharunsignedchar/*LED狀態(tài)*///0代表打開#defineON0//1代表關(guān)閉#defineOFF1//定義控制燈的端口//定義LED1為P11口控制#defineLED1P1_0 //定義LED2為P10口控制#defineLED2P1_1 #defineSW6P0_4#defineSW5P0_5//函數(shù)聲明//延時函數(shù)voidDelay(uint); //初始化P0口voidInitial(void);//初始化按鍵voidInitKey(void);//掃描按鍵,讀鍵值ucharKeyScan(void);宏定義以及函數(shù)的初始化53/*按鍵初始化函數(shù)*/voidInitKey(void){//P0.4,P0.5設(shè)為通用I/O輸出
P0SEL&=~0x30;//按鍵在P04,P05設(shè)為輸入
P0DIR&=~0x30;//P0.4,P0.5為三態(tài)
P0INP|=0x30;}/*LED初始化*/voidInitial(void){//P10、P11定義為輸出P1DIR|=0x03;//關(guān)LED1LED1=OFF;//關(guān)LED2LED2=OFF;}4.4.1通用I/O按鍵初始化函數(shù)和LED初始化函數(shù)544.4.1通用I/O/*****************************延時1.5us*****************************/voidDelay(uintn){ uinttt; for(tt=0;tt<n;tt++);
for(tt=0;tt<n;tt++); for(tt=0;tt<n;tt++); for(tt=0;tt<n;tt++); for(tt=0;tt<n;tt++);}延時函數(shù)CC2530執(zhí)行一條語句的時間是0.3us554.4.1通用I/O/******************************************按鍵掃描*****************************************/ucharKeyScan(void){//檢測SW6是否為低電平,低電平有效
if(SW6==0){Delay(100);//檢測到按鍵
if(SW6==0){//直到松開按鍵
while(!SW6);//返回值為1return(1);}}
//檢測SW5是否為低電平,低電平有效
if(SW5==0){Delay(100);//檢測到按鍵
if(SW5==0){//檢測到按鍵
while(!SW5);//返回值為2return(2);}}return(0);}去抖操作564.4.1通用I/O/**********************************main()函數(shù)*********************************/voidmain(void){//按鍵標志位ucharKeyvalue=0;Delay(10);//調(diào)用初始化函數(shù)Initial();InitKey();while(1){//給按鍵標志位賦值
Keyvalue=KeyScan();//如果按鍵為SW6if(Keyvalue==1)
{//LED切換狀態(tài)
LED1=!LED1;//清除鍵值
Keyvalue=0;}//檢測按鍵為SW5if(Keyvalue==2){//LED2切換狀態(tài)
LED2=!LED2;//清除鍵值
Keyvalue=0;}
Delay(10); }}
574.4.2通用I/O中斷在設(shè)置I/O口的中斷時必須要將其設(shè)置為輸入狀態(tài),通過外部信號的上升或下降沿觸發(fā)中斷。通用I/O的所有的外部中斷共用一個中斷向量,根據(jù)中斷標志位來判斷是哪個引腳發(fā)生中斷
通用I/O中斷寄存器有三類:中斷使能寄存器、中斷狀態(tài)標志寄存器和中斷控制寄存器中斷使能寄存器包括IENx和PxIEN(其中x代表0、1、2),其功能是使I/O口進行中斷使能中斷狀態(tài)標志寄存器包括PxIFG,其功能是當發(fā)生中斷時,I/O口所對應的中斷狀態(tài)標志將自動置1。中斷控制寄存器為PICTL,其功能是控制I/O口的中斷觸發(fā)方式。584.4.2通用I/O中斷中斷使能寄存器IENx(其中x為0,1,2)
IENx寄存器包括三個八位寄存器:IEN0、IEN1和IEN2。IENx中斷主要是配置總中斷和P0~2端口的使能
IEN1.P0IE:P0端口中斷使能。IEN2.P1IE:P1端口中斷使能。IEN2.P2IE:P2端口中斷使能。594.4.2通用I/O中斷IEN0寄存器的第7位可以控制CC2530所有中斷的使能。IEN0的其他位控制定時器、串口、RF等外設(shè)功能中斷
位名稱復位R/W描述7EA0R/W禁止所有中斷0:無中斷被確認1:通過設(shè)置對應的使能位將每個中斷源分別使能和禁止6--0R0保留5STIE0R/W睡眠定時器中斷使能0:中斷禁止1:中斷使能4ENCIE0R/WAES加密/解密中斷使能0:中斷禁止1:中斷使能3URX1IE0R/WUSART1RX中斷使能0:中斷禁止1:中斷使能2URX0IE0R/WUSART0RX中斷使能0:中斷禁止1:中斷使能1ADCIE0R/WADC中斷使能0:中斷禁止1:中斷使能0RFERRIE0R/WRFTX/RXFIFO中斷使能0:中斷禁止1:中斷使能604.4.2通用I/O中斷IEN1寄存器的第5位控制P0口的中斷,當設(shè)置IEN1.P0IE時,將設(shè)置P0端口所有引腳的中斷使能,即P0.0~P0.7引腳全部中斷使能
位名稱復位R/W描述7:6--00R0保留5P0IE0R/W端口0中斷使能0:中斷禁止1:中斷使能4T4IE0R/W定時器4中斷使能0:中斷禁止1:中斷使能3T3IE0R/W定時器3中斷使能0:中斷禁止1:中斷使能2T2IE0R/W定時器2中斷使能0:中斷禁止1:中斷使能1T1IE0R/W定時器1中斷使能0:中斷禁止1:中斷使能0DMAIE0R/WDMA中斷使能0:中斷禁止1:中斷使能//端口0中斷使能IEN1|=0x20;614.4.2通用I/O中斷IEN2寄存器的第4位和第1位分別控制P1端口和P2端口的中斷,當設(shè)置IEN2.P1IE和IEN2.P2IE時,將設(shè)置P1端口和P2端口所有引腳的中斷使能,即P1.0~P1.7引腳和P2.0~P2.4引腳全部中斷使能
位名稱復位R/W描述7:6--00R0保留5WDTIE0R/W看門狗定時器中斷使能0:中斷禁止1:中斷使能4P1IE0R/W端口1中斷使能0:中斷禁止1:中斷使能3UTX1IE0R/WUSART1TX中斷使能0:中斷禁止1:中斷使能2UTX0IE0R/WUSART2TX中斷使能0:中斷禁止1:中斷使能1P2IE0R/W端口2中斷使能0:中斷禁止1:中斷使能0RFIE0R/WRF一般中斷使能0:中斷禁止1:中斷使能//端口1中斷使能IEN2|=0x10;//端口0中斷使能IEN2|=0x02;624.4.2通用I/O中斷中斷使能寄存器PxIEN(其中x為0,1,2)PxIEN寄存器是設(shè)置端口的某一個引腳中斷使能,PxIEN有三個寄存器P0IEN、P1IEN和P2IEN
以P0IEN為例講解位名稱復位R/W描述7:0P0IEN[7:0]0x00R/W端口0P0.7~P0.0中斷使能0:中斷禁止1:中斷使能//P0.4、P0.5中斷使能P0IEN|=0x30;634.4.2通用I/O中斷中斷狀態(tài)標志寄存器PxIFG
(其中x為0,1,2)PxIFG寄存器是中斷狀態(tài)標志寄存器,由于CC2530的外部中斷共用一個中斷向量,因此需要判斷是哪個引腳發(fā)生中斷,通過判斷PxIFG寄存中的中斷狀態(tài)標志位可以判斷哪個引腳發(fā)生中斷。PxIFG寄存器有三個,分別是P0IFG、P1IFG和P2IFG以P0IFG為例講解//判斷端口0是否有中斷標志發(fā)生if(P0IFG>0){...}位名稱復位R/W描述7:0P0IF[7:0]0x00R/W端口0P0.7~P0.0中斷狀態(tài)標志0:未發(fā)生中斷1:發(fā)生中斷644.4.2通用I/O中斷中斷控制寄存器PICTL
(其中x為0,1,2)I/O口發(fā)生中斷除了配置中斷使能之外,還需要配置中斷觸發(fā)方式。中斷觸發(fā)方式可由端口中斷控制寄存器PICTL設(shè)置。I/O中斷觸發(fā)方式分為輸入的上升沿觸發(fā)和輸入的下降沿觸發(fā)//P0.4和P0.5為下降沿觸發(fā)中斷PICTL|=0x01;位名稱復位R/W描述7PADSC00R0控制I/O引腳在輸出模式下的驅(qū)動能力,選擇輸出驅(qū)動能力來補償引腳DVDD的低I/O電壓(為了確保在較低的電壓下的驅(qū)動能力和較高電壓下的驅(qū)動能力相同)。0:最小驅(qū)動能力增強,DVDD1/2等于或大于2.6V1:最大驅(qū)動能力增強,DVDD1/2小于2.6V6:4--000R0保留3P2ICON0R/W端口2的P2.4~P2.0輸入模式下的中斷配置,該位為所有端口2的輸入P2.4~P2.0選擇中斷請求條件0:輸入的上升沿引起中斷1:輸入的下降沿引起中斷2P1ICONH0R/W端口1的P1.7~P1.4輸入模式下的中斷配置,該位為所有端口1的輸入P1.7~P1.4選擇中斷請求條件0:輸入的上升沿引起中斷1:輸入的下降沿引起中斷1P1ICONL0R/W端口1的P1.4~P1.0輸入模式下的中斷配置,該位為所有端口1的輸入P1.4~P1.0選擇中斷請求條件0:輸入的上升沿引起中斷1:輸入的下降沿引起中斷0P0ICON0R/W端口0的P0.7~P0.0輸入模式下的中斷配置,該位為所有端口0的輸入P0.7~P0.0選擇中斷請求條件0:輸入的上升沿引起中斷1:輸入的下降沿引起中斷654.4.2通用I/O中斷中斷配置為了使能任一中斷,應該采取以下步驟:設(shè)置需要發(fā)生中斷的I/O口為輸入方式。清除中斷標志,即將需要設(shè)置中斷的引腳所對應的寄存器PxIFG狀態(tài)標志位置0。設(shè)置具體的I/O引腳中斷使能,即設(shè)置中斷的引腳所對應的寄存器PxIEN的中斷使能位為1。設(shè)置I/O口的中斷觸發(fā)方式。設(shè)置寄存器IEN1和IEN2中對應引腳的端口的中斷使能位為1。設(shè)置IEN0中的EA位為1使能全局中斷。編寫中斷服務程序。664.4.2通用I/O中斷LED初始化:關(guān)閉四個LED。外部中斷初始化:清空P0中斷標志位,開啟P0口中斷以及總中斷。中斷處理函數(shù)的編寫。下述內(nèi)容用于實現(xiàn)任務描述4.D.2,通過外部中斷改變LED1亮滅。利用按鍵SW5和SW6觸發(fā)P0.4和P0.5下降沿發(fā)生中斷控制LED1的亮滅。即當按下SW5或者SW6時,LED1燈的狀態(tài)發(fā)生改變,解決問題的步驟如下:674.4.1通用I/O#include<ioCC2530.h>#defineuintunsignedint#defineLED1P1_0#defineLED2P1_1#defineLED3P1_2#defineLED4P1_3
/*****************************LED初始化****************************/voidInitLED(void){//P1為普通I/O口
P1SEL=0x00;//P1.0P1.1P1.2P1.3輸出
P1DIR=0x0F;//關(guān)閉LED1LED1=1;
//關(guān)閉LED2LED2=1;//關(guān)閉LED3LED3=1;//關(guān)閉LED4LED4=1;
}頭文件及宏定義684.4.1通用I/O/*io及外部中斷初始化*/voidInitIO(void){
//P0中斷標志清0P0IFG|=0x00;//P0.4有上拉、下拉能力
P0INP&=~0X30;//P0.4和P0.5中斷使能
P0IEN|=0x30;//P0.4和P0.5,下降沿觸發(fā)
PICTL|=0X01;//開中斷
EA=1;//端口0中斷使能
IEN1|=0X20;
};694.4.1通用I/O/*********************************main()函數(shù)*********************************/voidmain(void){//LED初始化
InitLED();//IO及外部中斷初始化
InitIO();//等待中斷
Delay(100);while(1);}704.4.1通用I/O/********************************中斷服務子程序********************************/#pragmavector=P0INT_VECTOR__interruptvoidP0_ISR(void){//關(guān)中斷P0IEN&=~0x30;//判斷按鍵中斷
if(P0IFG>0){//清中斷標志
P0IFG=0;//LED1改變狀態(tài)
LED1=!LED1;}//開中斷
P0IEN|=0x30;}714.4.3外設(shè)I/O外設(shè)I/O是I/O的第二功能,當I/O配置為外設(shè)I/O時,可以通過軟件配置連接到ADC、串口、定時器和調(diào)試接口等。當設(shè)置為外設(shè)I/O時,需要將對應的寄存器位PxSEL置1,每個外設(shè)單元對應兩組可以選擇的I/O引腳,即“外設(shè)位置1”和“外設(shè)位置2”,如表4-26所示。例如USART在SPI模式下,“外設(shè)位置1”為P0.2~P0.5,“外設(shè)位置2”為P1.2~P1.5
外設(shè)功能P0P1P2765432107654321043210ADCA7A6A5A4A3A2A1A0TUSART0(SPI)CSSM0M1M0M1CSSUSART0(UART)RTCTTXRXTXRXRTCT72USART1(SPI)M1M0CSSM1M0CSSUSART1(UART)RXTXRTCTRXTXRTCTTIMEIMER31010TIMER4101032KHzxoscQ1Q2DEBUGDCDD734.4.3外設(shè)I/O外設(shè)I/O位置的選擇使用寄存器PERCFG來控制,PERCFG是外設(shè)控制寄存器,用來選擇外設(shè)使用哪一個I/O端口
位名稱復位R/W描述7--0R0保留6T1CFG0R/W定時器1I/O控制0:外設(shè)位置11:外設(shè)位置25T3CFG0R/W定時器3I/O控制0:外設(shè)位置11:外設(shè)位置24T4CFG0R/W定時器4I/O控制0:外設(shè)位置11:外設(shè)位置23:2--0R0保留1U1CFG0R/WUSART1I/O控制0:外設(shè)位置11:外設(shè)位置20U0CFG0R/WUSART0I/O控制0:外設(shè)位置11:外設(shè)位置2//設(shè)置USART0為外設(shè)位置1PERCFG|=0x00;744.4.3外設(shè)I/O如果I/O映射有沖突,可以在有沖突的組合之間設(shè)置優(yōu)先級。優(yōu)先級的設(shè)置是通過寄存器P2SEL和P2DIR來設(shè)置
位名稱復位R/W描述7--0R0保留6PRI3P10R/W端口1外設(shè)優(yōu)先級控制,當模塊被指派到相同的引腳的時候,確定哪個優(yōu)先0:USART0優(yōu)先1:USART1優(yōu)先5PRI2P10R/W端口1外設(shè)優(yōu)先級控制,當PERCFG分配USART1和定時器3到相同引腳的時候,確定優(yōu)先次序0:USART1優(yōu)先1:定時器3優(yōu)先4PRI1P10R/W端口1外設(shè)優(yōu)先級控制。當PECFG分配定時器1和定時器4到相同引腳的時候,確定優(yōu)先次序0:定時器1優(yōu)先1:定時器4優(yōu)先3PRI0P10R/W端口1外設(shè)優(yōu)先級控制,當PERCFG分配USART0和定時器1到相同引腳的時候,確定優(yōu)先次序0:USART0優(yōu)先1:定時器1優(yōu)先2:0端口2功能選擇(詳見4.3.1節(jié))P2SEL設(shè)置754.4.3外設(shè)I/O如果I/O映射有沖突,可以在有沖突的組合之間設(shè)置優(yōu)先級。優(yōu)先級的設(shè)置是通過寄存器P2SEL和P2DIR來設(shè)置
P2DIR設(shè)置位名稱復位R/W描述7:6PRIP000R/W端口0外設(shè)優(yōu)先級控制。當PERCFG分配給一些外設(shè)到相同引腳的時候,這些位將確定優(yōu)先級詳細優(yōu)先級列表00第1優(yōu)先級:USART0第2優(yōu)先級:USART1第3優(yōu)先級:定時器101第1優(yōu)先級:USART1第2優(yōu)先級:USART0第3優(yōu)先級:定時器110第1優(yōu)先級:定時器1通道0-1第2優(yōu)先級:USART1第3優(yōu)先級:USART0第4優(yōu)先級:定時器1通道2-311第1優(yōu)先級:定時器1通道2-3第2優(yōu)先級:USART0第3優(yōu)先級:USART1第4優(yōu)先級:定時器1通道0-15--0R0保留4:0端口2方向選擇(詳見4.3.1節(jié))764.4.3外設(shè)I/OADC
整個P0口可作為ADC使用,因此可以使用多達8個ADC輸入引腳。此時P0引腳必須配置為ADC輸入。APCFG寄存器(ADC模擬外設(shè)I/O配置寄存器)可以配置P0的某個引腳為一個ADC輸入,且相應的位必須設(shè)置為1位名稱復位R/W描述7:0APCFG[7:0]0x00R/W模擬外設(shè)I/O配置,APCFG[7:0]選擇P0.7~P0.0作為模擬I/O0:模擬I/O禁止1:模擬I/O使能//設(shè)置P0.7為ADC輸入PICTL|=0x80;774.4.3外設(shè)I/O串口
USART0和USART1均有兩種模式,分別是異步UART模式或同步SPI模式,并且每種模式下所對應的外設(shè)引腳有兩種,即外設(shè)位置1和外設(shè)位置2
P2SEL.PRI3P1和P2SEL.PRI0P1為端口1指派外設(shè)優(yōu)先順序,當兩者都設(shè)置為0時,USART0優(yōu)先784.4.3外設(shè)I/O定時器1
PERCFG.T1CFG用于設(shè)置定時器1是使用外設(shè)位置1還是外設(shè)位置2,定時器1的外設(shè)信息對應如下
0:通道0捕獲/比較引腳。1:通道1捕獲/比較引腳。2:通道2捕獲/比較引腳。3:通道3捕獲/比較引腳。4:通道4捕獲/比較引腳。
794.4.3外設(shè)I/O定時器
3PERCFG.T3CFG用于設(shè)置定時器3是使用外設(shè)位置1還是外設(shè)位置2
0:通道0比較引腳。1:通道1比較引腳。804.4.3外設(shè)I/O調(diào)試接口端口P2.1和P2.2分別用于調(diào)試數(shù)據(jù)和時鐘信號。即DD調(diào)試數(shù)據(jù)和DC調(diào)試時鐘。當處于調(diào)試模式,調(diào)試接口控制這些引腳的方向,并且在這些引腳上禁用上拉和下拉。814.5振蕩器和時鐘CC2530共有四個振蕩器,它們?yōu)橄到y(tǒng)時鐘提供時鐘源
824.5.1振蕩器CC2530的四個振蕩器分別是32MHz外部晶振、16MHz內(nèi)部RC振蕩器、32KHz外部晶振和32KHz內(nèi)部RC振蕩器。其中32MHz晶振和16MHz內(nèi)部RC振蕩器是兩個高頻振蕩器;32KHz晶振和32KHz內(nèi)部RC振蕩器是兩個低頻振蕩器32MHz外部晶振(簡稱32MHz晶振)除了為內(nèi)部時鐘提供時鐘源之外,主要用于RF收發(fā)器。16MHzRC內(nèi)部振蕩器(簡稱16MHzRC振蕩器)也可以為內(nèi)部時鐘提供時鐘源,但是16MHzRC振蕩器不能用于RF收發(fā)器操作。對于一些應用程序來說32MHz晶振的啟動時間較長,設(shè)備可以采用先運行16MHzRC振蕩器,直到32MHz晶振穩(wěn)定。32KHz外部晶振(簡稱32KHz晶振)運行在32.768KHz上,為系統(tǒng)需要的時間精度提供一個穩(wěn)定的時鐘信號。32KHZRC內(nèi)部振蕩器(簡稱32KHZRC振蕩器)運行在32.753KHz上,當系統(tǒng)時鐘需要校準時使用此振蕩器,校準只能發(fā)生在系統(tǒng)時鐘工作由16MHzRC震蕩器轉(zhuǎn)到32MHz晶振的時候。需要注意的是32KHz晶振和32KHzRC振蕩器不能同時使用834.5.2系統(tǒng)時鐘及寄存器CC2530內(nèi)部有一個內(nèi)部系統(tǒng)時鐘和一個主時鐘。在CC2530中系統(tǒng)時鐘源是從所選的主系統(tǒng)時鐘源獲得的,主時鐘一般由32MHz晶振或16MHzRC振蕩器提供。由于32MHz晶振啟動時間比較長,因此當選用32MHz晶振作為主時鐘源時,內(nèi)部首先選擇16MHzRC振蕩器使系統(tǒng)運轉(zhuǎn)起來,當32MHz晶振穩(wěn)定之后才使用32MHz晶振作為主時鐘源
可以通過操作時鐘寄存器選擇使用哪個時鐘源。時鐘寄存器主要有兩個寄存器:時鐘控制命令寄存器CLKCONCMD和時鐘控制狀態(tài)寄存器CLKCONSTA
844.5.2系統(tǒng)時鐘及寄存器CLKONCMD時鐘控制命令寄存器
位名稱復位R/W描述7OSC32K1R/W32KHz時鐘振蕩器選擇。設(shè)置該位只能發(fā)起一個時鐘源改變。要改變該位,必須選擇16MHzRCOSC作為系統(tǒng)時鐘。0:32KHzXOSC1:32KHzRCOSC6OSC1R/W系統(tǒng)時鐘源選擇。設(shè)置該位只能發(fā)起一個時鐘源改變。0:32MHzXOSC1:16MHzRCOSC5:3TICKSPD001R/W定時器標記輸出設(shè)置。不能高于通過OSC位設(shè)置的系統(tǒng)時鐘設(shè)置。000:32MHz001:16MHz010:8MHz011:4MHz100:2MHz101:1MHz110:500KHz111:250KHz注:CLKCONCMD.TICKSPD可以設(shè)置為任意值,但是結(jié)果受CLKCONCMD.OSC設(shè)置的限制,即如果CLKCONCMD.OSC=1不管TICKSPD是多少,實際的TICKSPD是16MHz2:0CLKSPD001R/W時鐘速度。不能高于通過OSC位設(shè)置的系統(tǒng)時鐘設(shè)置。標識當前系統(tǒng)時鐘頻率。000:32MHz001:16MHz010:8MHz011:4MHz100:2MHz101:1MHz110:500KHz111:250KHz注:CLKCONCMD.TICKSPD可以設(shè)置為任意值,但是結(jié)果受CLKCONCMD.OSC設(shè)置的限制,即如果CLKCONCMD.OSC=1不管TICKSPD是多少,實際的TICKSPD是16MHz//設(shè)置時鐘晶振為32MHZCLKCONCMD&=~0x40;854.5.2系統(tǒng)時鐘及寄存器CLKCONSTA時鐘控制狀態(tài)寄存器
位名稱復位R/W描述7OSC32K1R/W當前選擇的32KHz時鐘源0:32KHz晶振1:32KHzRCOSC6OSC1R/W當前選擇系統(tǒng)時鐘。0:32MHzXOSC1:16MHzRCOSC5:3TICKSPD001R/W當前設(shè)定定時器標記輸出000:32MHz001:16MHz010:8MHz011:4MHz100:2MHz101:1MHz110:500KHz111:250KHz2:0CLKSPD001R/W當前時鐘速度000:32MHz001:16MHz010:8MHz011:4MHz100:2MHz101:1MHz110:500KHz111:250KHz//設(shè)置當前時鐘為32MHz晶振CLKCONSTA&=~0x40;864.5.2系統(tǒng)時鐘及寄存器主時鐘源的選擇通過CLKCONCMD和CLKCONSTA共同操作完成的,比如要改變時鐘源,需要使CLKCONSTA.OSC的設(shè)置與CLKCONCMD.OSC的設(shè)置相同才可以改變時鐘源。//設(shè)置系統(tǒng)時鐘為32MHz晶振CLKCONCMD&=~0x40;CLKCONSTA&=~0x40;874.6電源管理和復位CC2530提供多種供電模式,不同的工作方式需要在相應的供電模式下進行,因此CC2530在工作時首先要選擇供電模式
884.6.1供電模式CC2530的供電模式有五種:主動模式空閑模式PM1、PM2和PM3其中主動模式又稱一般模式或完全功能模式。不同的供電模式對系統(tǒng)運行的影響不同供電模式高頻振蕩器低頻振蕩器穩(wěn)壓器(數(shù)字)主動模式32MHz晶振或16MHzRC振蕩器32KHz晶振或32KHzRC振蕩器ON空閑模式32MHz晶振或16MHzRC振蕩器32KHz晶振或32KHzRC振蕩器ONPM1無32KHz晶振或32KHzRC振蕩器ONPM2無32KHz晶振或32KHzRC振蕩器OFFPM3無無OFF894.6.1供電模式主動模式:完全功能模式。穩(wěn)壓器的數(shù)字內(nèi)核開啟;高頻振蕩器32MHz晶振或16MHzRC振蕩器運行,或者兩者都運行;低頻振蕩器的32KHz晶振或32KHzRC振蕩器運行。在此模式下CPU、外設(shè)和RF收發(fā)器都是活動的,可以通過操作寄存器使CPU內(nèi)核停止運行,進入空閑模式。也可以通過復位、外部中斷或睡眠定時器到期喚醒空閑模式??臻e模式:當CPU內(nèi)核停止運行時即空閑,當CPU處于工作狀態(tài)時與主動模式相同。可以通過復位、外部中斷或睡眠定時器到期喚醒進入主動模式。PM1:在PM1模式下,穩(wěn)壓器的數(shù)字部分開啟;高頻振蕩器的32MHz晶振或16MHzRC振蕩器都不運行;低頻振蕩器的32KHz晶振或32KHzRC振蕩器運行。當發(fā)生復位、外部中斷或睡眠定時器到期時系統(tǒng)將轉(zhuǎn)到主動模式。當系統(tǒng)運行在此模式下時,將運行一個掉電序列。由于PM1模式使用的上電和掉電序列較快,此模式適合用于等待喚醒事件的時間小于3ms的情況下。904.6.1供電模式PM2:穩(wěn)壓器的數(shù)字部分關(guān)閉,高頻振蕩器的32MHz晶振或16MHzRC振蕩器都不運行;低頻振蕩器的32KHz晶振或32KHzRC振蕩器運行。當發(fā)生復位、外部中斷或睡眠定時器到期時系統(tǒng)將轉(zhuǎn)到主動模式。當睡眠時間超過3ms時使用此模式。PM3:穩(wěn)壓器數(shù)字部分關(guān)閉,所有的振蕩器都不運行。當發(fā)生復位和外部中斷時系統(tǒng)將轉(zhuǎn)到主動模式運行。PM3用于系統(tǒng)最低功耗的運行模式。914.6.2電源管理寄存器電源管理即管理和選擇供電模式,供電模式的管理是通過電源管理寄存器來實現(xiàn)的。CC2530的電源管理寄存器有3個,分別是PCON、SLEEPCMD和SLEEPSTA。PCON為供電模式控制寄存器;SLEEPCND為睡眠模式控制器;SLEEPSTA為睡眠模式控制狀態(tài)寄存器924.6.2電源管理寄存器PCON為供電模式控制寄存器位名稱復位R/W描述7:1--000000R0保留0IDLE0R/WH0供電模式控制。1:強制設(shè)備進入SLEEP.MODE設(shè)置供電模式。如果SLEEP.MODE=0x00且IDLE=1將停止CPU內(nèi)核活動。中斷可以清除此位。934.6.2電源管理寄存器SLEEPCND為睡眠模式控制器位名稱復位R/W描述7OSC32K_CALDIS0R/W禁用32KHzRC振蕩器校準0:使能32KHzRC振蕩器校準1:禁用32KHzRC振蕩器校準此設(shè)置可以在任何時間寫入,但是在芯片沒有運行在16MHz高頻RC振蕩器時不起作用6:3--0000R0保留2--1R/W總為1,關(guān)閉不用的RC振蕩器1:0MODE[1:0]00R/W供電模式設(shè)置。00:主動/空閑模式01:PM110:PM211:PM3
//關(guān)閉不用的RC振蕩器SLEEPCMD|=0x04;944.6.2電源管理寄存器SLEEPSTA為睡眠模式控制狀態(tài)寄存器
位名稱復位R/W描述7OSC32K_CALDIS0R/W禁用32KHzRC振蕩器校準0:使能32KHzRC振蕩器校準1:禁用32KHzRC振蕩器校準此設(shè)置可以在任何時間寫入,但是在芯片沒有運行在16MHz高頻RC振蕩器時不起作用6XOSC_STB0R32MHz晶振穩(wěn)定狀態(tài)0:32MHz晶振上電不穩(wěn)定1:32MHz晶振上電穩(wěn)定5--0R保留4:3RST[1:0]XXR狀態(tài)位,表示上一次復位的原因,00:上電復位和掉電探測01:外部復位10:看門狗定時器復位11:時鐘丟失復位2:1--00R保留0CLK32K0R32KHz時鐘信號(與系統(tǒng)時鐘同步)CC2530數(shù)據(jù)手冊上這部分有錯誤
//等待晶振穩(wěn)定
while(!(SLEEPSTA&0x40));
954.6.2電源管理寄存器實現(xiàn)任務描述4.D.3,初始化系統(tǒng)時鐘。選擇外部32MHz晶振作為主時鐘源。上電后,由于外部32MHz晶振不穩(wěn)定,因此CC2530芯片內(nèi)部先啟用內(nèi)部16MHzRC振蕩器。等待外部穩(wěn)定之后,才開始使用外部32MHz晶振
964.6.2電源管理寄存器voidInitClock(void){//選擇32MHz晶振
CLKCONCMD&=~0x40;//等待晶振穩(wěn)定
while(!(SLEEPSTA&0x40));//TICHSPD128分頻,CLKSPD不分頻
CLKCONCMD&=~0x47;//關(guān)閉不用的RC振蕩器SLEEPCMD|=0x04;}974.6.3復位CC2530的復位源有5個,這5個復位源分別是:強制RESET_N輸入引腳為低電平復位,這一復位經(jīng)常用于復位按鍵。上電復位,在設(shè)備上電期間提供正確的初始化值。布朗輸出復位,只能運行在1.8V數(shù)字電壓,此復位是通過布朗輸出探測器來進行的。布朗輸出探測器在電壓變化期間檢測到的電壓低于布朗輸出探測器所規(guī)定的最低電壓電壓時,導致復位??撮T狗定時復位,當使能看門狗定時器,且定時器溢出時產(chǎn)生復位。時鐘丟失復位,此復位條件是通過時鐘丟失探測器來進行的。時鐘丟失探測器用于檢測時鐘源,當時鐘源損壞時,系統(tǒng)自動使能時鐘丟失探測器,導致復位。984.6.3復位CC2530在復位之后初始狀態(tài)如下
:I/O引腳配置為帶上拉的輸入。CPU程序計數(shù)器在0x0000,并且程序從這個地址開始。所有外設(shè)寄存器初始化為各自復位值。看門狗定時器禁用。時鐘丟失探測器禁用。994.7串口USA
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中性合同范本
- 單位購買物品合同范本
- 北京麥田房產(chǎn)合同范本
- 寫紅木合同范本
- 個人居家養(yǎng)老服務合同范本
- 勞務合同范本護士
- 企業(yè)裝飾房子合同范本
- 勞務電氣安裝合同范本
- 戰(zhàn)隊經(jīng)紀合同范本
- 協(xié)議貨車出售合同范本
- 物品移交接收單(模板)
- 肺透明膜病課件
- 護理學基礎(chǔ)期末試卷及答案
- IMS攪拌樁施工方案
- 我的家鄉(xiāng)廣西南寧宣傳簡介
- 變廢為寶-小學科學高段活動案例
- 四川省政府采購專家考試試題
- 證明無親子關(guān)系證明模板
- 消防工程擬投入主要施工設(shè)備機具表
- 4年級寫景類文章閱讀課件
- 《戰(zhàn)國策》教學講解課件
評論
0/150
提交評論