版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
-1-第四章CC2530基礎(chǔ)(jīchǔ)開發(fā)共二百三十二頁-2-本章(běnzhānɡ)目標(biāo)掌握I/O的使用理解存儲器以及(yǐjí)映射的關(guān)系掌握ADC的使用方法掌握串口和DMA的使用方法掌握定時(shí)器的使用共二百三十二頁-3-本章(běnzhānɡ)目標(biāo)掌握I/O的使用理解存儲器以及映射的關(guān)系(guānxì)掌握ADC的使用方法掌握串口和DMA的使用方法掌握定時(shí)器的使用共二百三十二頁-4-高性能、低功耗的8051微控制器內(nèi)核。適應(yīng)2.4GHzIEEE802.15.4的RF收發(fā)器。極高的接收靈敏度和抗干擾性。32KB/64KB/128KB/256KB閃存。8KBSRAM,具備各種供電方式下的數(shù)據(jù)保持能力。強(qiáng)大的DMA功能。只需極少的外接元件,即可形成一個(gè)簡單應(yīng)用(yìngyòng)系統(tǒng)。只需一個(gè)晶振,即可滿足網(wǎng)狀型網(wǎng)絡(luò)系統(tǒng)的需要。4.1概述(ɡàishù)CC2530芯片特征共二百三十二頁-5-低功耗,主動模式RX(CPU空閑):24mA;主動模式TX在1dB(CPU空閑):29mA;供電模式1(4us喚醒):0.2mA;供電模式2(睡眠定時(shí)器運(yùn)行):1uA;供電模式3(外部中斷):0.4uA;寬電源電壓范圍(2V-3.6V)。硬件支持CSMA/CA。支持?jǐn)?shù)字化的接收信號強(qiáng)度指示器/鏈路質(zhì)量指示(RSSI/LQI)。具有8路輸入(shūrù)8位~14位ADC。高級加密標(biāo)準(zhǔn)AES協(xié)處理器。具有看門狗和2個(gè)支持多種串行通信協(xié)議的USART。1個(gè)通用的16位定時(shí)器和2個(gè)8位定時(shí)器,1個(gè)IEEE802.15.4MAC定時(shí)器。21個(gè)通用I/O引腳。4.1概述(ɡàishù)CC2530芯片特征共二百三十二頁-6-4.2CC2530結(jié)構(gòu)(jiégòu)框架共二百三十二頁-7-CC2530包含一個(gè)“增強(qiáng)型”工業(yè)標(biāo)準(zhǔn)的8位8051微控制器內(nèi)核,運(yùn)行時(shí)鐘32MHz,具有8倍的標(biāo)準(zhǔn)8051內(nèi)核的性能增強(qiáng)型8051內(nèi)核使用標(biāo)準(zhǔn)的8051指令(zhǐlìng)集,并且每個(gè)指令(zhǐlìng)周期是一個(gè)時(shí)鐘周期,而標(biāo)準(zhǔn)的8051每個(gè)指令周期是12個(gè)時(shí)鐘周期,因此增強(qiáng)型8051消除了總線狀態(tài)的浪費(fèi),指令執(zhí)行比標(biāo)準(zhǔn)的8051更快4.2.1CC2530CPU共二百三十二頁-8-內(nèi)核代碼(dàimǎ):CC2530的“增強(qiáng)型8051”內(nèi)核的“目標(biāo)代碼”兼容“標(biāo)準(zhǔn)8051”內(nèi)核的“目標(biāo)代碼”,即CC2530的8051內(nèi)核的“目標(biāo)代碼”可以使用“標(biāo)準(zhǔn)8051”的編譯器或匯編器進(jìn)行編譯。微控制器:由于CC2530的“增強(qiáng)型8051”內(nèi)核使用了不同于“標(biāo)準(zhǔn)8051”的指令時(shí)鐘,因此“增強(qiáng)型8051”在編譯時(shí)與“標(biāo)準(zhǔn)8051”代碼編譯時(shí)略有不同,例如“標(biāo)準(zhǔn)8051”的微控制器包含的“外設(shè)單元寄存器”的指令代碼在CC2530的“增強(qiáng)型8051”不能正確運(yùn)行。4.2.1CC2530CPUCC2530的“增強(qiáng)型8051內(nèi)核”與“標(biāo)準(zhǔn)的8051微控制器”相比,除了速度改進(jìn)之外,使用時(shí)要注意(zhùyì)以下兩點(diǎn):共二百三十二頁-9-4.2.2CC2530存儲器及映射(yìngshè)
CC2530物理(wùlǐ)存儲器CC2530存儲空間映射存儲器仲裁共二百三十二頁-10-4.2.2CC2530存儲器及映射(yìngshè)物理(wùlǐ)存儲器SRAM上電時(shí),SRAM的內(nèi)容未定義,在供電的情況下,SRAM的內(nèi)容被保留FLASH片上閃存存儲器,主要為了保存程序和常量數(shù)據(jù)。FLASH由一組2KB的頁面組成
信息頁面信息頁面是一個(gè)2KB的只讀區(qū)域,它的主要作用是存儲全球唯一的IEEE地址
共二百三十二頁-11-4.2.2CC2530存儲器及映射(yìngshè)物理(wùlǐ)存儲器SFR控制8051CPU內(nèi)核或外設(shè)的一些功能
XREG
是SFR的擴(kuò)展寄存器,比如射頻寄存器,訪問速度比SFR要慢
共二百三十二頁-12-4.2.2CC2530存儲器及映射(yìngshè)存儲空間CODE程序存儲器,只讀存儲空間,用于存放程序代碼和一些(yīxiē)常量,有16根地址總線,尋址范圍為0x0000~0xFFFF共64KB
DATA數(shù)據(jù)存儲器,可讀/寫的數(shù)據(jù)存儲空間,用于存放程序運(yùn)行過程中的數(shù)據(jù)。有8根地址總線,因此尋址空間為0x00~0xFF,共256個(gè)字節(jié)
XDATA外部數(shù)據(jù)存儲器,可讀/寫的數(shù)據(jù)存儲空間,主要用于DMA尋址。有16根地址總線,尋址空間是0x0000~0xFFFF共64KB
SFR特殊功能寄存器,可讀/寫的寄存器存儲空間,共有128字節(jié)。對于地址是被8整除的SFR寄存器,每一位還可以單獨(dú)尋址
共二百三十二頁-13-4.2.2CC2530存儲器及映射(yìngshè)物理(wùlǐ)存儲器與存儲空間的關(guān)系存儲空間只是4種不同的尋址方式概念,并不代表物理具體上的存儲設(shè)備,只是存儲空間的概念;而FLASH、SRAM、EEPROM等是具體的物理存儲設(shè)備。他們兩者之間的關(guān)系是通過映射來聯(lián)系起來的。例如FLASH或者EEPROM都可以作為物理存儲媒介映射到CODE上。共二百三十二頁-14-4.2.2CC2530存儲器及映射(yìngshè)映射(yìngshè)映射就是將CC2530的物理存儲器映射到其存儲空間上,有兩個(gè)作用:
方便DMA訪問存儲設(shè)備
可在CODE區(qū)執(zhí)行FLASH或SRAM中的代碼
共二百三十二頁-15-4.2.2CC2530存儲器及映射(yìngshè)映射(yìngshè)的兩種形式CODE存儲器映射
XDATA存儲器映射共二百三十二頁-16-4.2.2CC2530存儲器及映射(yìngshè)CODE存儲器映射(yìngshè)CODE存儲器映射具有兩個(gè)功能:一是將FLASH映射至CODE存儲空間;二是執(zhí)行來自SRAM的代碼(將SRAM映射至CODE存儲空間)
共二百三十二頁-17-4.2.2CC2530存儲器及映射(yìngshè)FLASH映射(yìngshè)CODE的尋址空間為64KB,而對于CC2530F256設(shè)備來說FLASH的存儲空間為256KB?首先要解決存儲空間不對稱的問題
CC2530將FLASH存儲器分為幾個(gè)bank,每個(gè)bank的大小是32KB。對于CC2530F256設(shè)備來說,它有8個(gè)bank,分別為bank0~bank7。通過操作寄存器FMAP.MAP[2:0]來控制將哪個(gè)編號的bank映射到CODE區(qū)域
只針對CC2530F32這款芯片,因?yàn)檫@款芯片的的FLASH只有32KB雖然這里有bank0區(qū)域,但是映射的時(shí)候bank0總映射的根部的低32KB區(qū)域共二百三十二頁-18-4.2.2CC2530存儲器及映射(yìngshè)SRAM映射(yìngshè)為了便于在SRAM中執(zhí)行代碼,可以將SRAM映射到CODE存儲空間的0x8000~(0x8000+SRAM_SIZE-1)的區(qū)域
雖然程序從SRAM中運(yùn)行代碼,但是并不代表程序是從SRAM中啟動的。程序仍舊是從CODE的普通區(qū)域0x0000開始執(zhí)行,當(dāng)程序執(zhí)行到0x8000時(shí),將執(zhí)行SRAM中的代碼
共二百三十二頁-19-4.2.2CC2530存儲器及映射(yìngshè)SRAM映射(yìngshè)為了方便DMA控制器能訪問所有的物理存儲空間,CC2530把所有的物理存儲器以及寄存器都映射到XDATA上,包括CODE和SFR部分存儲空間
。共二百三十二頁-20-4.2.2CC2530存儲器及映射(yìngshè)XDATA包含了所有物理存儲器的映射,包括(bāokuò)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個(gè)條目的硬件寄存器區(qū)域是通過這一存儲空間訪問的。閃存信息頁面2KB映射到地址區(qū)域0x7800-0x7FFF。這是一個(gè)只讀區(qū)域,包含有關(guān)設(shè)備的各種信息信息頁面映射到地址區(qū)域0x7800~0x7FFF
XBANK為CODE存儲空間的bank0~7區(qū)域的映射,其地址仍然是0x8000~0xFFFF。可以配置存儲器控制寄存器MEMCTR.XBANK[2:0](詳見存儲器仲裁)決定選擇映射bank0~bank7之間的哪個(gè)區(qū)域,比如MEMCTR.XBANK=001,則映射bank1區(qū)域共二百三十二頁-21-4.2.2CC2530存儲器及映射(yìngshè)存儲器仲裁(zhòngcái)
主要功能是解決CPU與DMA訪問所有物理存儲器(除了CPU內(nèi)部寄存器)之間的沖突問題。當(dāng)CPU和DMA之間發(fā)生沖突時(shí),“存儲器仲裁”停止CPU或DMA的總線
存儲器仲裁主要有兩個(gè)寄存器:存儲器仲裁控制寄存器MEMCTR和閃存區(qū)映射寄存器FMAP,這兩個(gè)寄存器用于控制存儲器子系統(tǒng)的各個(gè)方面共二百三十二頁-22-4.2.2CC2530存儲器及映射(yìngshè)存儲器仲裁(zhòngcái)控制寄存器MEMCTR
MEMCTR.XMAP必須設(shè)置以使得程序從SRAM執(zhí)行;MEMCTR.XBANK決定XDATA的高32KB映射CODE存儲空間的哪個(gè)bank區(qū)域
位名稱復(fù)位R/W描述7:4--0000R0保留3XMAP0R/WXDATA映射到代碼,當(dāng)設(shè)置了這一位,SRAMXDATA區(qū)域從0x0000到(SRAM_SIZE)映射到CODE區(qū)域的(0x8000+SRAM_SIZE-1)這使得程序代碼從RAM執(zhí)行。0:SRAM映射到CODE功能禁用1:SRAM映射到CODE功能使能2:0XBANK000R/WXDATA區(qū)選擇,控制物理閃存存儲器的哪個(gè)代碼區(qū)域映射到XDATA區(qū)域(0x8000-0xFFFF)。當(dāng)設(shè)置為0,映射到根底部。有效設(shè)置取決于設(shè)備的閃存大小。寫一個(gè)無效設(shè)置被忽略,即不會更新XBANK[2:0]32KB版本只能是0(即總是映射到根底部)64KB版本:0-1128KB版本:0-3256KB版本:0-7共二百三十二頁-23-4.2.2CC2530存儲器及映射(yìngshè)閃存區(qū)映射(yìngshè)寄存器FMAP
閃存區(qū)映射寄存器FMAP控制物理32KB代碼區(qū)映射到CODE存儲空間的程序地址區(qū)域0x8000-0xFFFF
位名稱復(fù)位R/W描述7:3--00000R0保留2:0MAP[2:0]001R/W閃存區(qū)域映射,控制物理閃存存儲器的哪個(gè)代碼映射到XDATA區(qū)域(0x8000-0xFFFF)。當(dāng)設(shè)置為0,映射到根部區(qū)。有效設(shè)置取決于設(shè)備的閃存大小。寫一個(gè)無效設(shè)置被忽略,即不會更新MAP[2:0]32KB版本只能是0(即總是映射到根底部)64KB版本:0-1128KB版本:0-3256KB版本:0-7即最底部的32KB區(qū)域(0x0000~0x7FFF)共二百三十二頁-24-4.3CC2530編程基礎(chǔ)(jīchǔ)CC2530軟件開發(fā)平臺使用IARIAR對CC2530編程操作提供了良好的C語言支持
CC2530編程包括頭文件、運(yùn)行庫以及(yǐjí)中斷編程等
共二百三十二頁-25-4.3.1寄存器和匯編(huìbiān)指令CC2530的CPU寄存器與標(biāo)準(zhǔn)的8051的CPU寄存器相同(xiānɡtónɡ),都包括8組寄存器R0~R7、程序狀態(tài)字PSW、累加器ACC、B寄存器和堆棧指針SP等CC2530的CPU指令與標(biāo)準(zhǔn)的8051的指令集相同
共二百三十二頁-26-4.3.2編程基礎(chǔ)(jīchǔ)CC2530編程的風(fēng)格(fēnggé)基本上與普通的基于8051的C語言編程相同
頭文件初始化函數(shù)主函數(shù)其他中斷函數(shù)
共二百三十二頁-27-4.3.2編程基礎(chǔ)(jīchǔ)頭文件
在C語言中頭文件以“XXX.h”的格式存在,其中“XXX”為文件名,在頭文件中一般定義程序(chéngxù)需要的變量或函數(shù)的聲明等。一般頭文件在源程序(chéngxù)的一開始使用“包含命令”將頭文件包含在源程序(chéngxù)中,以便源程序(chéngxù)調(diào)用頭文件中的變量等。頭文件“包含命令”使用“#include”命令
共二百三十二頁-28-4.3.2編程基礎(chǔ)(jīchǔ)頭文件
在一個(gè)工程里面還會有其他的頭文件,比如要控制(kòngzhì)CC2530開發(fā)板的LED,一般由用戶新建一個(gè)頭文件,此頭文件可以由用戶命名,例如“LED.h”
在用戶編寫的頭文件中,也需要將“ioCC2530.h”包含在內(nèi),那么在主函數(shù)文件中只需要包含“LED.h”文件即可共二百三十二頁-29-4.3.2編程基礎(chǔ)(jīchǔ)初始化函數(shù)(hánshù)
在一個(gè)項(xiàng)目工程中為了增強(qiáng)程序的可移植性和可維護(hù)性,一般將一些初始化配置信息編寫成一個(gè)函數(shù),稱作初始化函數(shù)。在一個(gè)工程中可以有多個(gè)初始化函數(shù)
共二百三十二頁-30-4.3.2編程基礎(chǔ)(jīchǔ)主函數(shù)(hánshù)
與常規(guī)的C語言程序一樣,IAR下的CC2530程序依然將main()函數(shù)設(shè)定為程序的入口函數(shù),也稱主函數(shù)。當(dāng)程序比較大時(shí),在主函數(shù)內(nèi)一般不直接編寫與程序相關(guān)的業(yè)務(wù)算法,而是調(diào)用其他子函數(shù)(如用庫函數(shù)、戶編寫的硬件初始化函數(shù)和業(yè)務(wù)算法或其他功能函數(shù)等)來實(shí)現(xiàn)整個(gè)程序的邏輯,使主函數(shù)看起來簡單明了并且易于程序的維護(hù)
共二百三十二頁-31-4.3.2編程基礎(chǔ)(jīchǔ)其他(qítā)子函數(shù)
在一個(gè)程序中,為了程序的可維護(hù)性,除了初始化函數(shù)之外,還需要將某個(gè)業(yè)務(wù)算法或功能封裝成一個(gè)函數(shù),稱為子函數(shù)
共二百三十二頁-32-4.3.2編程基礎(chǔ)(jīchǔ)中斷(zhōngduàn)函數(shù)
當(dāng)需要中斷處理時(shí),需要編寫中斷處理函數(shù),中斷處理函數(shù)是當(dāng)有中斷發(fā)生時(shí),需要處理的事件共二百三十二頁-33-4.3.2中斷(zhōngduàn)的使用CC2530的中斷系統(tǒng)是為了讓CPU對內(nèi)部或外部的突發(fā)事件及時(shí)地作出響應(yīng),并執(zhí)行相應(yīng)的中斷程序。中斷由中斷源引起,中斷源由相應(yīng)的寄存器來控制。當(dāng)需要使用中斷時(shí),需配置(pèizhì)相應(yīng)的中斷寄存器來開啟中斷,當(dāng)中斷發(fā)生時(shí)將跳入中斷服務(wù)函數(shù)中執(zhí)行此中斷所需要處理的事件。共二百三十二頁-34-4.3.3中斷(zhōngduàn)的使用中斷(zhōngduàn)源與中斷(zhōngduàn)向量
CC2530有18個(gè)中斷源,每個(gè)中斷源都可以產(chǎn)生中斷請求,中斷請求可以通過設(shè)置中斷使能SFR寄存器的中斷使能位IEN0、IEN1或IEN2使能或禁止中斷。共二百三十二頁-35-4.3.3中斷(zhōngduàn)的使用中斷號碼描述中斷名稱中斷向量中斷屏蔽中斷標(biāo)志0RFTXRFIO下溢或RXFIFO溢出RFERR03HIEN0.RFERRIETCON.RFERRIF1ADC轉(zhuǎn)換結(jié)束ADC0BHIEN0.ADCIETCON.ADCIF2USART0RX完成URX013HIEN0.URX0IETCON.URX0IF3USART1RX完成URX11BHIEN0.URX1IETCON.URX1IF4AES加密/解密完成ENC23HIEN0.ENCIES0CON.ENCIF5睡眠計(jì)時(shí)器比較ST2BHIEN0.STIEIRCON.STIF6端口2輸入/USBP2INT33HIEN2.P2IEIRCON2.P2IF7USART0TX完成UTX03BHIEN2.UTX0IEIRCON2.UTX0IF8DMA傳送完成DMA43HIEN1.DMAIEIRCON.DMAIF9定時(shí)器1(16位)捕獲/比較/溢出T14BHIEN1.T1IEIRCON.T1IF10定時(shí)器2T253HIEN1.T2IEIRCON.T2IF11定時(shí)器3(8位)捕獲/比較/溢出T35BHIEN1.T3IEIRCON.T3IF12定時(shí)器4(8位)捕獲/比較/溢出T463HIEN1.T4IEIRCON.T4IF13端口0輸入P0INT6BHIEN1.P0IEIRCON.P0IF14USART1TX完成UTX173HIEN2.UTXIEIRCON2.UTX1IF15端口1輸入P1INT7BHIEN2.P1IEIRCON2.P1IF16RF通用中斷RF83HIEN2.RFIES1CON.RFIF17看門狗定時(shí)器溢出WDT8BHIEN2.WDTIEIRCON.WDTIF共二百三十二頁-36-4.3.3中斷(zhōngduàn)的使用中斷(zhōngduàn)源與中斷(zhōngduàn)向量
當(dāng)相應(yīng)的中斷源使能并發(fā)生時(shí),中斷標(biāo)志位將自動置1,然后程序跳往中斷服務(wù)程序的入口地址執(zhí)行中斷服務(wù)程序。待中斷服務(wù)程序處理完畢后,由硬件清除中斷標(biāo)志位
中斷服務(wù)程序的入口地址即中斷向量,CC2530的18個(gè)中斷源對應(yīng)了18個(gè)中斷向量,中斷向量定義在頭文件“ioCC2530.h”中共二百三十二頁-37-4.3.3中斷(zhōngduàn)的使用中斷(zhōngduàn)優(yōu)先級
中斷優(yōu)先級將決定中斷響應(yīng)的先后順序,在CC2530中分為六個(gè)中斷優(yōu)先組,即IPG0~IPG5,每一組中斷優(yōu)先組中有三個(gè)中斷源
組中斷IPG0RFERRRFDMAIPG1ADCT1P2INTIPG2URX0T2UTX0IPG3URX1T3UTX1IPG4ENCT4P1INTIPG5STP0INTWDT共二百三十二頁-38-4.3.3中斷(zhōngduàn)的使用中斷(zhōngduàn)優(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為六個(gè)中斷優(yōu)先組IPG0~IPG5中的任何一個(gè)
。
設(shè)置IPG0優(yōu)先級最高IP1_IPG0=1;IP0_IPG0=1;共二百三十二頁-39-4.3.3中斷(zhōngduàn)的使用中斷(zhōngduàn)優(yōu)先級
如果同時(shí)收到相同優(yōu)先級或同一優(yōu)先級組中的中斷請求時(shí),將采用輪流檢測順序來判斷中斷優(yōu)先級別的響應(yīng)
共二百三十二頁-40-4.3.3中斷(zhōngduàn)的使用中斷(zhōngduàn)優(yōu)先級
中斷向量編號中斷名稱優(yōu)先級排序0RFERR輪流探測順序?yàn)樽陨舷蛳聝?yōu)先級依次降低16RF8DMA1ADC9T12URX010T23URX111T34ENC12T45ST13P0INT6P2INT7UTX014UTX115P1INT17WDT例如:在中斷優(yōu)先級組IPG0中的中斷RFERR、RF和DMA的中斷優(yōu)先級是相同的,如果同時(shí)使用這三個(gè)中斷,就需要使用輪流探測順序來判斷哪一優(yōu)先級最高。由輪流探測順序表查得RFERR中斷優(yōu)先級最高,RF中斷次之,DMA中斷與其他兩個(gè)中斷相比中斷優(yōu)先級最低
共二百三十二頁-41-4.3.3中斷(zhōngduàn)的使用中斷(zhōngduàn)處理過程
中斷發(fā)生時(shí),CC2530硬件自動完成以下處理中斷申請:中斷源向CPU發(fā)出中斷請求信號(中斷申請一般需要在程序初始化中配置相應(yīng)的中斷寄存器開啟中斷)
中斷響應(yīng):CPU檢測中斷申請,把主程序中斷的地址保存到堆棧,轉(zhuǎn)入中斷向量入口地址
中斷處理:按照中斷向量中設(shè)定好的地址,轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序
中斷返回:中斷服務(wù)程序執(zhí)行完畢后,CPU執(zhí)行中斷返回指令,把堆棧中保存的數(shù)據(jù)從堆棧彈出,返回原來程序
共二百三十二頁-42-4.3.3中斷(zhōngduàn)的使用中斷(zhōngduàn)編程
中斷編程的一般過程如下:中斷設(shè)置:根據(jù)外設(shè)的不同,具體的設(shè)置是不同的,一般至少包含啟用中斷
中斷函數(shù)編寫;這是中斷編程的主要工作,需要注意的是,中斷函數(shù)盡可能的減少耗時(shí)或不進(jìn)行耗時(shí)操作
以CC2530的外部中斷為例
//P0中斷標(biāo)志清0P0IFG|=0x00;//P0.4有上拉、下拉能力
P0INP&=~0X30;//P0.4和P0.5中斷使能
P0IEN|=0x30;//P0.4和P0.5,下降沿觸發(fā)
PICTL|=0X01;//開中斷
EA=1;//端口0中斷使能
IEN1|=0X20;共二百三十二頁-43-4.3.3中斷(zhōngduàn)的使用中斷(zhōngduàn)編程
中斷編程的一般過程如下:CC2530所使用的編譯器為IAR,在IAR編譯器中用關(guān)鍵字__interrupt來定義一個(gè)中斷函數(shù)。使用#progmavector來提供中斷函數(shù)的入口地址,并且中斷函數(shù)沒有返回值,沒有函數(shù)參數(shù)
#pragmavector=P0INT_VECTOR__interruptvoidP0_ISR
(void){//中斷程序代碼}共二百三十二頁-44-4.3.3中斷(zhōngduàn)的使用中斷(zhōngduàn)編程
在中斷函數(shù)編寫中,當(dāng)程序進(jìn)入中斷服務(wù)程序之后,需要執(zhí)行以下幾個(gè)步驟
:將對應(yīng)的中斷關(guān)掉(不是必須的,需要根據(jù)具體情況來處理);如果需要判斷具體的中斷源,則根據(jù)中斷標(biāo)志位進(jìn)行判斷(例如所有I/O中斷共用1個(gè)中斷向量,需要通過中斷標(biāo)志區(qū)分是哪個(gè)引腳引起的中斷)清中斷標(biāo)志(不是必須的,CC2530中中斷發(fā)生后由硬件自動清中斷標(biāo)志位)處理中斷事件,此過程要盡可能的少耗時(shí)最后如果在第一步中關(guān)閉了相應(yīng)的中斷源,需要在退出中斷服務(wù)程序之前打開對應(yīng)的中斷//中斷函數(shù)入口地址#pragmavector=P0INT_VECTOR//定義一個(gè)中斷函數(shù)
__interruptvoidP0_ISR(void){//關(guān)端口P0.4、P0.5中斷
P0IEN&=~0x30;//判斷中斷發(fā)生
if(P0IFG>0)
{//清中斷標(biāo)志P0IFG=0;/**中斷事件的處理**/...........................}//開中斷
P0IEN|=0x30;}共二百三十二頁-45-4.4I/OCC2530包括3個(gè)8位輸入(shūrù)/輸出(I/O)端口,分別是P0、P1和P2。其中P0和P1有8個(gè)引腳,P2有5個(gè)引腳,共21個(gè)數(shù)字I/O引腳
,具有以下功能:通用I/O外設(shè)I/O外部(wàibù)中斷源輸入口弱上拉輸入或推拉輸出共二百三十二頁-46-4.4.1通用(tōngyòng)I/O用作通用I/O時(shí),引腳可以組成3個(gè)8位端口,端口0、端口1和端口2,三個(gè)端口分別用P0、P1和P2來表示(biǎoshì)所有的端口均可以通過SFR寄存器P0、P1和P2進(jìn)行位尋址和字節(jié)尋址
每個(gè)端口引腳都可以單獨(dú)設(shè)置為通用I/O或外部設(shè)備I/O
其中P1.0和P1.1具備20mA的輸出驅(qū)動能力,其他所有的端口只具備4mA的輸出驅(qū)動能力
共二百三十二頁-47-4.4.1通用(tōngyòng)I/O通用I/O配置寄存器(其中x表示0,1,2)功能寄存器PxSEL方向(fāngxiàng)寄存器PxDIR工作模式寄存器PxINP共二百三十二頁-48-4.4.1通用(tōngyòng)I/O配置寄存器PxSEL(其中(qízhōng)x表示0,1,2)寄存器PxSEL用來設(shè)置端口的每個(gè)引腳為通用I/O或者是外部設(shè)備I/O(復(fù)位之后,所有的數(shù)字輸入、輸出引腳都設(shè)置為通用輸入引腳)以P0SEL為例講解位名稱復(fù)位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;共二百三十二頁-49-4.4.1通用(tōngyòng)I/O配置寄存器PxDIR(其中x表示0,1,2)如果(rúguǒ)需要改變端口引腳方向,需要使用寄存器PxDIR來設(shè)置每個(gè)端口引腳的輸入和輸出
以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;位名稱復(fù)位R/W描述7:0DIRP0[7:0]0x00R/WP0.7~P0.0的I/O方向選擇0:輸入1:輸出共二百三十二頁-50-4.4.1通用(tōngyòng)I/O配置寄存器PxINP(其中x表示0,1,2)復(fù)位之后,所有的端口均設(shè)置為帶上拉的輸入。用作輸入時(shí),通用I/O端口引腳可以設(shè)置為上拉、下拉或三態(tài)操作模式。其中P1.0和P1.1端口沒有上拉和下拉功能(gōngnéng)。上拉、下拉或三態(tài)操作模式寄存器由PxINP設(shè)置以P0INP為例講解//P0.4和P0.5設(shè)置為三態(tài)P0INP|=0x30;//P2.0和P2.1設(shè)置上拉狀態(tài)P2INP&=~0x03;位名稱復(fù)位R/W描述7:0MDP0[7:0]0x00R/WP0.7~P0.0的I/O輸入模式功能選擇0:上拉/下拉1:三態(tài)共二百三十二頁-51-4.4.1通用(tōngyòng)I/O注意(zhùyì)寄存器P2INP可以配置P0、P1和P2端口為上拉或下拉。//P0端口為上拉輸入P2INP|=0x80;位名稱復(fù)位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)共二百三十二頁-52-4.4.1通用(tōngyòng)I/O任務(wù)(rènwu)描述4.D.1,通過掃描方式實(shí)現(xiàn)按鍵觸發(fā)LED亮滅。利用按鍵SW5和按鍵SW6控制LED1和LED2。當(dāng)按下SW5時(shí),LED1狀態(tài)改變;當(dāng)按下SW6時(shí),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)的改變:當(dāng)檢測到SW5按下時(shí),LED1狀態(tài)改變;當(dāng)檢測到SW6按下時(shí),LED2狀態(tài)改變
共二百三十二頁-53-4.4.1通用(tōngyòng)I/O#include<ioCC2530.h>#defineuintunsignedint#defineucharunsignedchar/*LED狀態(tài)*///0代表打開#defineON0//1代表關(guān)閉#defineOFF1//定義控制(kòngzhì)燈的端口//定義LED1為P11口控制#defineLED1P1_0 //定義LED2為P10口控制#defineLED2P1_1 #defineSW6P0_4#defineSW5P0_5//函數(shù)聲明//延時(shí)函數(shù)voidDelay(uint); //初始化P0口voidInitial(void);//初始化按鍵voidInitKey(void);//掃描按鍵,讀鍵值ucharKeyScan(void);宏定義以及函數(shù)的初始化共二百三十二頁-54-/*按鍵初始化函數(shù)*/voidInitKey(void){//P0.4,P0.5設(shè)為通用I/O輸出
P0SEL&=~0x30;//按鍵在P04,P05設(shè)為輸入(shūrù)
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通用(tōngyòng)I/O按鍵初始化函數(shù)和LED初始化函數(shù)共二百三十二頁-55-4.4.1通用(tōngyòng)I/O/*****************************延時(shí)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í)函數(shù)CC2530執(zhí)行一條(yītiáo)語句的時(shí)間是0.3us共二百三十二頁-56-4.4.1通用(tōngyòng)I/O/******************************************按鍵掃描*****************************************/ucharKeyScan(void){//檢測(jiǎncè)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);}去抖操作共二百三十二頁-57-4.4.1通用(tōngyòng)I/O/**********************************main()函數(shù)*********************************/voidmain(void){//按鍵標(biāo)志位ucharKeyvalue=0;Delay(10);//調(diào)用(diàoyòng)初始化函數(shù)Initial();InitKey();while(1){//給按鍵標(biāo)志位賦值
Keyvalue=KeyScan();//如果按鍵為SW6if(Keyvalue==1)
{//LED切換狀態(tài)
LED1=!LED1;//清除鍵值
Keyvalue=0;}//檢測按鍵為SW5if(Keyvalue==2){//LED2切換狀態(tài)
LED2=!LED2;//清除鍵值
Keyvalue=0;}
Delay(10); }}
共二百三十二頁-58-4.4.2通用(tōngyòng)I/O中斷在設(shè)置I/O口的中斷時(shí)必須要將其設(shè)置為輸入狀態(tài),通過外部信號的上升或下降沿觸發(fā)中斷。通用I/O的所有的外部中斷共用一個(gè)中斷向量,根據(jù)中斷標(biāo)志位來判斷是哪個(gè)引腳發(fā)生(fāshēng)中斷
通用I/O中斷寄存器有三類:中斷使能寄存器、中斷狀態(tài)標(biāo)志寄存器和中斷控制寄存器中斷使能寄存器包括IENx和PxIEN(其中x代表0、1、2),其功能是使I/O口進(jìn)行中斷使能中斷狀態(tài)標(biāo)志寄存器包括PxIFG,其功能是當(dāng)發(fā)生中斷時(shí),I/O口所對應(yīng)的中斷狀態(tài)標(biāo)志將自動置1。中斷控制寄存器為PICTL,其功能是控制I/O口的中斷觸發(fā)方式。共二百三十二頁-59-4.4.2通用(tōngyòng)I/O中斷中斷使能寄存器IENx(其中x為0,1,2)
IENx寄存器包括三個(gè)八位寄存器:IEN0、IEN1和IEN2。IENx中斷主要(zhǔyào)是配置總中斷和P0~2端口的使能
IEN1.P0IE:P0端口中斷使能。IEN2.P1IE:P1端口中斷使能。IEN2.P2IE:P2端口中斷使能。共二百三十二頁-60-4.4.2通用(tōngyòng)I/O中斷IEN0寄存器的第7位可以(kěyǐ)控制CC2530所有中斷的使能。IEN0的其他位控制定時(shí)器、串口、RF等外設(shè)功能中斷
位名稱復(fù)位R/W描述7EA0R/W禁止所有中斷0:無中斷被確認(rèn)1:通過設(shè)置對應(yīng)的使能位將每個(gè)中斷源分別使能和禁止6--0R0保留5STIE0R/W睡眠定時(shí)器中斷使能0:中斷禁止1:中斷使能4ENCIE0R/WAES加密/解密中斷使能0:中斷禁止1:中斷使能3URX1IE0R/WUSART1RX中斷使能0:中斷禁止1:中斷使能2URX0IE0R/WUSART0RX中斷使能0:中斷禁止1:中斷使能1ADCIE0R/WADC中斷使能0:中斷禁止1:中斷使能0RFERRIE0R/WRFTX/RXFIFO中斷使能0:中斷禁止1:中斷使能共二百三十二頁-61-4.4.2通用(tōngyòng)I/O中斷IEN1寄存器的第5位控制(kòngzhì)P0口的中斷,當(dāng)設(shè)置IEN1.P0IE時(shí),將設(shè)置P0端口所有引腳的中斷使能,即P0.0~P0.7引腳全部中斷使能
位名稱復(fù)位R/W描述7:6--00R0保留5P0IE0R/W端口0中斷使能0:中斷禁止1:中斷使能4T4IE0R/W定時(shí)器4中斷使能0:中斷禁止1:中斷使能3T3IE0R/W定時(shí)器3中斷使能0:中斷禁止1:中斷使能2T2IE0R/W定時(shí)器2中斷使能0:中斷禁止1:中斷使能1T1IE0R/W定時(shí)器1中斷使能0:中斷禁止1:中斷使能0DMAIE0R/WDMA中斷使能0:中斷禁止1:中斷使能//端口0中斷使能IEN1|=0x20;共二百三十二頁-62-4.4.2通用(tōngyòng)I/O中斷IEN2寄存器的第4位和第1位分別控制(kòngzhì)P1端口和P2端口的中斷,當(dāng)設(shè)置IEN2.P1IE和IEN2.P2IE時(shí),將設(shè)置P1端口和P2端口所有引腳的中斷使能,即P1.0~P1.7引腳和P2.0~P2.4引腳全部中斷使能
位名稱復(fù)位R/W描述7:6--00R0保留5WDTIE0R/W看門狗定時(shí)器中斷使能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;共二百三十二頁-63-4.4.2通用(tōngyòng)I/O中斷中斷使能寄存器PxIEN(其中(qízhōng)x為0,1,2)PxIEN寄存器是設(shè)置端口的某一個(gè)引腳中斷使能,PxIEN有三個(gè)寄存器P0IEN、P1IEN和P2IEN
以P0IEN為例講解位名稱復(fù)位R/W描述7:0P0IEN[7:0]0x00R/W端口0P0.7~P0.0中斷使能0:中斷禁止1:中斷使能//P0.4、P0.5中斷使能P0IEN|=0x30;共二百三十二頁-64-4.4.2通用(tōngyòng)I/O中斷中斷狀態(tài)標(biāo)志寄存器PxIFG
(其中x為0,1,2)PxIFG寄存器是中斷狀態(tài)標(biāo)志寄存器,由于CC2530的外部中斷共用一個(gè)中斷向量,因此需要判斷是哪個(gè)引腳發(fā)生中斷,通過判斷PxIFG寄存中的中斷狀態(tài)標(biāo)志位可以(kěyǐ)判斷哪個(gè)引腳發(fā)生中斷。PxIFG寄存器有三個(gè),分別是P0IFG、P1IFG和P2IFG以P0IFG為例講解//判斷端口0是否有中斷標(biāo)志發(fā)生if(P0IFG>0){...}位名稱復(fù)位R/W描述7:0P0IF[7:0]0x00R/W端口0P0.7~P0.0中斷狀態(tài)標(biāo)志0:未發(fā)生中斷1:發(fā)生中斷共二百三十二頁-65-4.4.2通用(tōngyòng)I/O中斷中斷控制寄存器PICTL
(其中x為0,1,2)I/O口發(fā)生中斷除了配置中斷使能之外,還需要配置中斷觸發(fā)方式。中斷觸發(fā)方式可由端口中斷控制寄存器PICTL設(shè)置。I/O中斷觸發(fā)方式分為輸入(shūrù)的上升沿觸發(fā)和輸入(shūrù)的下降沿觸發(fā)//P0.4和P0.5為下降沿觸發(fā)中斷PICTL|=0x01;位名稱復(fù)位R/W描述7PADSC00R0控制I/O引腳在輸出模式下的驅(qū)動能力,選擇輸出驅(qū)動能力來補(bǔ)償引腳DVDD的低I/O電壓(為了確保在較低的電壓下的驅(qū)動能力和較高電壓下的驅(qū)動能力相同)。0:最小驅(qū)動能力增強(qiáng),DVDD1/2等于或大于2.6V1:最大驅(qū)動能力增強(qiáng),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:輸入的下降沿引起中斷共二百三十二頁-66-4.4.2通用(tōngyòng)I/O中斷中斷配置為了使能任一中斷,應(yīng)該采取(cǎiqǔ)以下步驟:設(shè)置需要發(fā)生中斷的I/O口為輸入方式。清除中斷標(biāo)志,即將需要設(shè)置中斷的引腳所對應(yīng)的寄存器PxIFG狀態(tài)標(biāo)志位置0。設(shè)置具體的I/O引腳中斷使能,即設(shè)置中斷的引腳所對應(yīng)的寄存器PxIEN的中斷使能位為1。設(shè)置I/O口的中斷觸發(fā)方式。設(shè)置寄存器IEN1和IEN2中對應(yīng)引腳的端口的中斷使能位為1。設(shè)置IEN0中的EA位為1使能全局中斷。編寫中斷服務(wù)程序。共二百三十二頁-67-4.4.2通用(tōngyòng)I/O中斷LED初始化:關(guān)閉四個(gè)LED。外部中斷初始化:清空P0中斷標(biāo)志位,開啟(kāiqǐ)P0口中斷以及總中斷。中斷處理函數(shù)的編寫。下述內(nèi)容用于實(shí)現(xiàn)任務(wù)描述4.D.2,通過外部中斷改變LED1亮滅。利用按鍵SW5和SW6觸發(fā)P0.4和P0.5下降沿發(fā)生中斷控制LED1的亮滅。即當(dāng)按下SW5或者SW6時(shí),LED1燈的狀態(tài)發(fā)生改變,解決問題的步驟如下:共二百三十二頁-68-4.4.1通用(tōngyòng)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輸出(shūchū)
P1DIR=0x0F;//關(guān)閉LED1LED1=1;
//關(guān)閉LED2LED2=1;//關(guān)閉LED3LED3=1;//關(guān)閉LED4LED4=1;
}頭文件及宏定義共二百三十二頁-69-4.4.1通用(tōngyòng)I/O/*io及外部中斷初始化*/voidInitIO(void){
//P0中斷標(biāo)志清0P0IFG|=0x00;//P0.4有上拉、下拉能力(nénglì)
P0INP&=~0X30;//P0.4和P0.5中斷使能
P0IEN|=0x30;//P0.4和P0.5,下降沿觸發(fā)
PICTL|=0X01;//開中斷
EA=1;//端口0中斷使能
IEN1|=0X20;
};共二百三十二頁-70-4.4.1通用(tōngyòng)I/O/*********************************main()函數(shù)*********************************/voidmain(void){//LED初始化
InitLED();//IO及外部中斷(zhōngduàn)初始化
InitIO();//等待中斷
Delay(100);while(1);}共二百三十二頁-71-4.4.1通用(tōngyòng)I/O/********************************中斷服務(wù)子程序********************************/#pragmavector=P0INT_VECTOR__interruptvoidP0_ISR(void){//關(guān)中斷P0IEN&=~0x30;//判斷按鍵(ànjiàn)中斷
if(P0IFG>0){//清中斷標(biāo)志
P0IFG=0;//LED1改變狀態(tài)
LED1=!LED1;}//開中斷
P0IEN|=0x30;}共二百三十二頁-72-4.4.3外設(shè)I/O外設(shè)I/O是I/O的第二功能,當(dāng)I/O配置為外設(shè)I/O時(shí),可以通過軟件配置連接到ADC、串口、定時(shí)器和調(diào)試接口等。當(dāng)設(shè)置為外設(shè)I/O時(shí),需要將對應(yīng)的寄存器位PxSEL置1,每個(gè)外設(shè)單元對應(yīng)兩組可以選擇的I/O引腳,即“外設(shè)位置1”和“外設(shè)位置2”,如表4-26所示。例如(lìrú)USART在SPI模式下,“外設(shè)位置1”為P0.2~P0.5,“外設(shè)位置2”為P1.2~P1.5
外設(shè)功能P0P1P2765432107654321043210ADCA7A6A5A4A3A2A1A0TUSART0(SPI)CSSM0M1M0M1CSSUSART0(UART)RTCTTXRXTXRXRTCT共二百三十二頁-73-USART1(SPI)M1M0CSSM1M0CSSUSART1(UART)RXTXRTCTRXTXRTCTTIMEIMER31010TIMER4101032KHzxoscQ1Q2DEBUGDCDD共二百三十二頁-74-4.4.3外設(shè)I/O外設(shè)I/O位置的選擇(xuǎnzé)使用寄存器PERCFG來控制,PERCFG是外設(shè)控制寄存器,用來選擇外設(shè)使用哪一個(gè)I/O端口
位名稱復(fù)位R/W描述7--0R0保留6T1CFG0R/W定時(shí)器1I/O控制0:外設(shè)位置11:外設(shè)位置25T3CFG0R/W定時(shí)器3I/O控制0:外設(shè)位置11:外設(shè)位置24T4CFG0R/W定時(shí)器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è)置(shèzhì)USART0為外設(shè)位置1PERCFG|=0x00;共二百三十二頁-75-4.4.3外設(shè)I/O如果I/O映射有沖突,可以(kěyǐ)在有沖突的組合之間設(shè)置優(yōu)先級。優(yōu)先級的設(shè)置是通過寄存器P2SEL和P2DIR來設(shè)置
位名稱復(fù)位R/W描述7--0R0保留6PRI3P10R/W端口1外設(shè)優(yōu)先級控制,當(dāng)模塊被指派到相同的引腳的時(shí)候,確定哪個(gè)優(yōu)先0:USART0優(yōu)先1:USART1優(yōu)先5PRI2P10R/W端口1外設(shè)優(yōu)先級控制,當(dāng)PERCFG分配USART1和定時(shí)器3到相同引腳的時(shí)候,確定優(yōu)先次序0:USART1優(yōu)先1:定時(shí)器3優(yōu)先4PRI1P10R/W端口1外設(shè)優(yōu)先級控制。當(dāng)PECFG分配定時(shí)器1和定時(shí)器4到相同引腳的時(shí)候,確定優(yōu)先次序0:定時(shí)器1優(yōu)先1:定時(shí)器4優(yōu)先3PRI0P10R/W端口1外設(shè)優(yōu)先級控制,當(dāng)PERCFG分配USART0和定時(shí)器1到相同引腳的時(shí)候,確定優(yōu)先次序0:USART0優(yōu)先1:定時(shí)器1優(yōu)先2:0端口2功能選擇(詳見4.3.1節(jié))P2SEL設(shè)置(shèzhì)共二百三十二頁-76-4.4.3外設(shè)I/O如果I/O映射有沖突,可以(kěyǐ)在有沖突的組合之間設(shè)置優(yōu)先級。優(yōu)先級的設(shè)置是通過寄存器P2SEL和P2DIR來設(shè)置
P2DIR設(shè)置(shèzhì)位名稱復(fù)位R/W描述7:6PRIP000R/W端口0外設(shè)優(yōu)先級控制。當(dāng)PERCFG分配給一些外設(shè)到相同引腳的時(shí)候,這些位將確定優(yōu)先級詳細(xì)優(yōu)先級列表00第1優(yōu)先級:USART0第2優(yōu)先級:USART1第3優(yōu)先級:定時(shí)器101第1優(yōu)先級:USART1第2優(yōu)先級:USART0第3優(yōu)先級:定時(shí)器110第1優(yōu)先級:定時(shí)器1通道0-1第2優(yōu)先級:USART1第3優(yōu)先級:USART0第4優(yōu)先級:定時(shí)器1通道2-311第1優(yōu)先級:定時(shí)器1通道2-3第2優(yōu)先級:USART0第3優(yōu)先級:USART1第4優(yōu)先級:定時(shí)器1通道0-15--0R0保留4:0端口2方向選擇(詳見4.3.1節(jié))共二百三十二頁-77-4.4.3外設(shè)I/OADC
整個(gè)P0口可作為ADC使用,因此可以使用多達(dá)8個(gè)ADC輸入引腳。此時(shí)P0引腳必須配置為ADC輸入。APCFG寄存器(ADC模擬外設(shè)I/O配置寄存器)可以配置P0的某個(gè)引腳為一個(gè)(yīɡè)ADC輸入,且相應(yīng)的位必須設(shè)置為1位名稱復(fù)位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è)置(shèzhì)P0.7為ADC輸入PICTL|=0x80;共二百三十二頁-78-4.4.3外設(shè)I/O串口
USART0和USART1均有兩種模式,分別是異步UART模式或同步SPI模式,并且每種模式下所對應(yīng)的外設(shè)引腳有兩種,即外設(shè)位置1和外設(shè)位置2
P2SEL.PRI3P1和P2SEL.PRI0P1為端口1指派外設(shè)優(yōu)先順序(shùnxù),當(dāng)兩者都設(shè)置為0時(shí),USART0優(yōu)先共二百三十二頁-79-4.4.3外設(shè)I/O定時(shí)器1
PERCFG.T1CFG用于設(shè)置定時(shí)器1是使用外設(shè)位置1還是(háishi)外設(shè)位置2,定時(shí)器1的外設(shè)信息對應(yīng)如下
0:通道(tōngdào)0捕獲/比較引腳。1:通道1捕獲/比較引腳。2:通道2捕獲/比較引腳。3:通道3捕獲/比較引腳。4:通道4捕獲/比較引腳。
共二百三十二頁-80-4.4.3外設(shè)I/O定時(shí)器
3PERCFG.T3CFG用于設(shè)置定時(shí)器3是使用(shǐyòng)外設(shè)位置1還是外設(shè)位置2
0:通道(tōngdào)0比較引腳。1:通道1比較引腳。共二百三十二頁-81-4.4.3外設(shè)I/O調(diào)試(diàoshì)接口端口P2.1和P2.2分別用于調(diào)試(diàoshì)數(shù)據(jù)和時(shí)鐘信號。即DD調(diào)試數(shù)據(jù)和DC調(diào)試時(shí)鐘。當(dāng)處于調(diào)試模式,調(diào)試接口控制這些引腳的方向,并且在這些引腳上禁用上拉和下拉。共二百三十二頁-82-4.5振蕩器和時(shí)鐘(shízhōng)CC2530共有四個(gè)振蕩器,它們(tāmen)為系統(tǒng)時(shí)鐘提供時(shí)鐘源
共二百三十二頁-83-4.5.1振蕩器CC2530的四個(gè)振蕩器分別是32MHz外部(wàibù)晶振、16MHz內(nèi)部RC振蕩器、32KHz外部晶振和32KHz內(nèi)部RC振蕩器。其中32MHz晶振和16MHz內(nèi)部RC振蕩器是兩個(gè)高頻振蕩器;32KHz晶振和32KHz內(nèi)部RC振蕩器是兩個(gè)低頻振蕩器32MHz外部(wàibù)晶振(簡稱32MHz晶振)除了為內(nèi)部時(shí)鐘提供時(shí)鐘源之外,主要用于RF收發(fā)器。16MHzRC內(nèi)部振蕩器(簡稱16MHzRC振蕩器)也可以為內(nèi)部時(shí)鐘提供時(shí)鐘源,但是16MHzRC振蕩器不能用于RF收發(fā)器操作。對于一些應(yīng)用程序來說32MHz晶振的啟動時(shí)間較長,設(shè)備可以采用先運(yùn)行16MHzRC振蕩器,直到32MHz晶振穩(wěn)定。32KHz外部晶振(簡稱32KHz晶振)運(yùn)行在32.768KHz上,為系統(tǒng)需要的時(shí)間精度提供一個(gè)穩(wěn)定的時(shí)鐘信號。32KHZRC內(nèi)部振蕩器(簡稱32KHZRC振蕩器)運(yùn)行在32.753KHz上,當(dāng)系統(tǒng)時(shí)鐘需要校準(zhǔn)時(shí)使用此振蕩器,校準(zhǔn)只能發(fā)生在系統(tǒng)時(shí)鐘工作由16MHzRC震蕩器轉(zhuǎn)到32MHz晶振的時(shí)候。需要注意的是32KHz晶振和32KHzRC振蕩器不能同時(shí)使用共二百三十二頁-84-4.5.2系統(tǒng)(xìtǒng)時(shí)鐘及寄存器CC2530內(nèi)部有一個(gè)內(nèi)部系統(tǒng)時(shí)鐘和一個(gè)主時(shí)鐘。在CC2530中系統(tǒng)時(shí)鐘源是從所選的主系統(tǒng)時(shí)鐘源獲得的,主時(shí)鐘一般由32MHz晶振或16MHzRC振蕩器提供。由于32MHz晶振啟動時(shí)間比較長,因此當(dāng)選用32MHz晶振作為主時(shí)鐘源時(shí),內(nèi)部首先選擇16MHzRC振蕩器使系統(tǒng)運(yùn)轉(zhuǎn)起來,當(dāng)32MHz晶振穩(wěn)定(wěndìng)之后才使用32MHz晶振作為主時(shí)鐘源
可以通過操作時(shí)鐘寄存器選擇使用哪個(gè)時(shí)鐘源。時(shí)鐘寄存器主要有兩個(gè)寄存器:時(shí)鐘控制命令寄存器CLKCONCMD和時(shí)鐘控制狀態(tài)寄存器CLKCONSTA
共二百三十二頁-85-4.5.2系統(tǒng)(xìtǒng)時(shí)鐘及寄存器CLKONCMD時(shí)鐘控制(kòngzhì)命令寄存器
位名稱復(fù)位R/W描述7OSC32K1R/W32KHz時(shí)鐘振蕩器選擇。設(shè)置該位只能發(fā)起一個(gè)時(shí)鐘源改變。要改變該位,必須選擇16MHzRCOSC作為系統(tǒng)時(shí)鐘。0:32KHzXOSC1:32KHzRCOSC6OSC1R/W系統(tǒng)時(shí)鐘源選擇。設(shè)置該位只能發(fā)起一個(gè)時(shí)鐘源改變。0:32MHzXOSC1:16MHzRCOSC5:3TICKSPD001R/W定時(shí)器標(biāo)記輸出設(shè)置。不能高于通過OSC位設(shè)置的系統(tǒng)時(shí)鐘設(shè)置。000:32MHz001:16MHz010:8MHz011:4MHz100:2MHz101:1MHz110:500KHz111:250KHz注:CLKCONCMD.TICKSPD可以設(shè)置為任意值,但是結(jié)果受CLKCONCMD.OSC設(shè)置的限制,即如果CLKCONCMD.OSC=1不管TICKSPD是多少,實(shí)際的TICKSPD是16MHz2:0CLKSPD001R/W時(shí)鐘速度。不能高于通過OSC位設(shè)置的系統(tǒng)時(shí)鐘設(shè)置。標(biāo)識當(dāng)前系統(tǒng)時(shí)鐘頻率。000:32MHz001:16MHz010:8MHz011:4MHz100:2MHz101:1MHz110:500KHz111:250KHz注:CLKCONCMD.TICKSPD可以設(shè)置為任意值,但是結(jié)果受CLKCONCMD.OSC設(shè)置的限制,即如果CLKCONCMD.OSC=1不管TICKSPD是多少,實(shí)際的TICKSPD是16MHz//設(shè)置時(shí)鐘晶振為32MHZCLKCONCMD&=~0x40;共二百三十二頁-86-4.5.2系統(tǒng)(xìtǒng)時(shí)鐘及寄存器CLKCONSTA時(shí)鐘控制(kòngzhì)狀態(tài)寄存器
位名稱復(fù)位R/W描述7OSC32K1R/W當(dāng)前選擇的32KHz時(shí)鐘源0:32KHz晶振1:32KHzRCOSC6OSC1R/W當(dāng)前選擇系統(tǒng)時(shí)鐘。0:32MHzXOSC1:16MHzRCOSC5:3TICKSPD001R/W當(dāng)前設(shè)定定時(shí)器標(biāo)記輸出000:32MHz001:16MHz010:8MHz011:4MHz100:2MHz101:1MHz110:500KHz111:250KHz2:0CLKSPD001R/W當(dāng)前時(shí)鐘速度000:32MHz001:16MHz010:8MHz011:4MHz100:2MHz101:1MHz110:500KHz111:250KHz//設(shè)置當(dāng)前時(shí)鐘為32MHz晶振CLKCONSTA&=~0x40;共二百三十二頁-87-4.5.2系統(tǒng)(xìtǒng)時(shí)鐘及寄存器主時(shí)鐘源的選擇通過(tōngguò)CLKCONCMD和CLKCONSTA共同操作完成的,比如要改變時(shí)鐘源,需要使CLKCONSTA.OSC的設(shè)置與CLKCONCMD.OSC的設(shè)置相同才可以改變時(shí)鐘源。//設(shè)置系統(tǒng)時(shí)鐘為32MHz晶振CLKCONCMD&=~0x40;CLKCONSTA&=~0x40;共二百三十二頁
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年物業(yè)出租合同模板(含綠化養(yǎng)護(hù))3篇
- 二零二五版電力設(shè)備維修與保養(yǎng)承包合同3篇
- 2025年上半年鄭州市第二批事業(yè)單位招考工作人員(141名)易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年上半年邵陽市隆回縣審計(jì)局招考易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年上半年遼寧遼陽燈塔市事業(yè)單位招考易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年上半年遼寧省遼陽市事業(yè)單位招聘考試(537人)易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年上半年遼寧省大連高校畢業(yè)生基層服務(wù)崗招募929人易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年上半年遼寧沈陽市大東區(qū)招錄殘疾人工作專職干事8人重點(diǎn)基礎(chǔ)提升(共500題)附帶答案詳解-1
- 2025年上半年贛州市贛南醫(yī)學(xué)院招考教師易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年上半年貴州黔東南州部分直屬事業(yè)單位招聘人員易考易錯模擬試題(共500題)試卷后附參考答案
- 衡水市出租車駕駛員從業(yè)資格區(qū)域科目考試題庫(全真題庫)
- 護(hù)理安全用氧培訓(xùn)課件
- 《三國演義》中人物性格探析研究性課題報(bào)告
- 注冊電氣工程師公共基礎(chǔ)高數(shù)輔導(dǎo)課件
- 土方勞務(wù)分包合同中鐵十一局
- 乳腺導(dǎo)管原位癌
- 冷庫管道應(yīng)急預(yù)案
- 司法考試必背大全(涵蓋所有法律考點(diǎn))
- 公共部分裝修工程 施工組織設(shè)計(jì)
- 《學(xué)習(xí)教育重要論述》考試復(fù)習(xí)題庫(共250余題)
- 裝飾裝修施工及擔(dān)保合同
評論
0/150
提交評論