版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1.1人工智能(AI)簡介1.2AI語音及人臉識(shí)別的開發(fā)套件1.3開發(fā)環(huán)境的搭建1.1人工智能(AI)簡介人工智能(ArtificialIntelligence,AI)作為計(jì)算機(jī)科學(xué)的一個(gè)分支,它試圖了解智能的實(shí)質(zhì),并生產(chǎn)出一種新的、能以與人類智能相似的方式做出反應(yīng)的智能機(jī)器。該領(lǐng)域的研究包括機(jī)器人、語音識(shí)別、圖像識(shí)別、自然語言處理和專家系統(tǒng)等。人工智能自誕生以來,隨著理論和技術(shù)的日益成熟,應(yīng)用領(lǐng)域也在不斷擴(kuò)大。人工智能可以實(shí)現(xiàn)對(duì)人的意識(shí)和思維信息過程進(jìn)行模擬。圖1.1-1所示為人工智能技術(shù)涉及的領(lǐng)域。1.2AI語音及人臉識(shí)別的開發(fā)套件對(duì)于AI的開發(fā),其中最常見的就是圖像和語音識(shí)別。構(gòu)成圖像和語音識(shí)別需要配合軟件和硬件。AI語音及人臉識(shí)別功能是基于同一套硬件底板完成的:當(dāng)做AI語音識(shí)別功能實(shí)驗(yàn)時(shí),外接語音識(shí)別小板卡;當(dāng)做AI人臉識(shí)別功能實(shí)驗(yàn)時(shí),外接攝像頭小板卡。圖1.2-1所示為AI語音及人臉識(shí)別開發(fā)套件的底板。圖1.2-1中1為攝像頭模組接口,可用于AI人臉識(shí)別實(shí)驗(yàn);2為單總線接口,可用于掛載單總線設(shè)備;3為語音板卡插槽,可用于AI語音識(shí)別實(shí)驗(yàn);4為OLED接口,可接市面上通用的OLED;5為SD卡插槽,可用于存儲(chǔ)數(shù)據(jù);6為MPU6050接口;7為LED+按鍵部分,包括三個(gè)LED和兩個(gè)按鍵,其中LED由三個(gè)NPN型三極管隔離開來,當(dāng)GPIO端口向三極管的基極輸出一個(gè)高電平時(shí)LED便會(huì)被點(diǎn)亮。AI語音及人臉識(shí)別開發(fā)板采用的是經(jīng)典的“底板+核心板”形式。底板位置8處為核心板的插槽,插槽的兩端為CC3200所有的GPIO口引出,這樣一來可以大大地方便用戶進(jìn)行拓展開發(fā);同樣,為了更加便于用戶開發(fā)調(diào)試,底板位置9處還預(yù)留了TI(TexasInstruments,德州儀器)官方仿真調(diào)試器TIStellaris的接口,便于用戶使用TIStellaris進(jìn)行固件的下載、燒寫或程序的調(diào)試等。開發(fā)者在調(diào)試時(shí)必不可少的環(huán)節(jié)是串口打印,位置10是一路USB接口,該接口通過USB轉(zhuǎn)TTL芯片CH340G,與CC3200的串口相連接。此外,考慮到下載啟動(dòng)的方式需要切換及端口需要復(fù)用,在底板上加入了4個(gè)撥碼開關(guān)。底板位置11處的撥碼開關(guān),為切換調(diào)試下載的方式;底板位置12處的撥碼開關(guān),為切換CC3200的啟動(dòng)方式;底板位置13處的撥碼開關(guān),為USB連接的串口選擇;底板位置14處的撥碼開關(guān),可作為板載資源切換開關(guān)。1.3開發(fā)環(huán)境的搭建1.3.1IAR安裝開發(fā)每一款芯片之前都需要安裝與之相匹配的開發(fā)環(huán)境。常見的有兩種,一種是使用TI官方的開發(fā)環(huán)境CodeComposerStudio,另一種是使用IAR。IAR是一款著名的C編譯器,支持眾多知名半導(dǎo)體公司的微處理器。IAR針對(duì)不同的硬件有多種版本,如IARforARM、IARforstm8等。由于CC3200屬于ARMCortexM4內(nèi)核,這里選擇IARforARM。IAR的安裝步驟如下:(1)雙擊打開exe文件,出現(xiàn)IAR安裝選擇界面。(2)首先,點(diǎn)擊“InstallIAREmbeddedWorkbench”,開始開發(fā)環(huán)境的安裝。接著,進(jìn)入安裝向?qū)Ы缑妗?3)點(diǎn)擊“Next”,進(jìn)入許可協(xié)議界面。選擇“Iacceptthetermsofthelicenseagreement”,然后點(diǎn)擊“Next”。(4)進(jìn)入安裝路徑選擇界面,打開“Change”,選擇一個(gè)安裝路徑(即英文路徑)。在這里安裝到D盤下新建的“IarforArm”。(5)點(diǎn)擊“Next”,進(jìn)入驅(qū)動(dòng)選擇安裝界面,如圖1.3-6所示。因?yàn)槿蘸罂赡軙?huì)用到各種不同的調(diào)試接口,所以這里默認(rèn)選擇全部。(6)在此界面內(nèi)點(diǎn)擊“Next”,進(jìn)入IAR名稱設(shè)置界面,默認(rèn)選擇即可。(7)再次點(diǎn)擊“Next”,進(jìn)入正式安裝界面。點(diǎn)擊“Install”,開始安裝。(8)等待進(jìn)度條示意完成安裝,其間會(huì)跳出USB驅(qū)動(dòng)安裝界面,選擇“是”即可,如圖1.3-9所示。(9)而后會(huì)安裝USB的驅(qū)動(dòng),待USB驅(qū)動(dòng)安裝完成后,表明已完成了整個(gè)IARforARM的安裝,如圖1.3-10所示。(10)此時(shí),去掉兩個(gè)選項(xiàng)前的“√”,點(diǎn)擊“Finish”,彈出“P&E設(shè)備驅(qū)動(dòng)安裝”,點(diǎn)擊“Iagree”。之后進(jìn)入路徑選擇,驅(qū)動(dòng)的路徑統(tǒng)一選擇默認(rèn),點(diǎn)擊“Install”,接下來的彈出窗口均為默認(rèn)即可。至此就完成了IARforARM的安裝,在Windows操作系統(tǒng)的“開始”界面下可以找到“IAREmbeddedWorkbench”,如圖1.3-11所示。1.3.2CCSUniFlash安裝CCSUniFlash是美國德州儀器公司(TI)官方推出的一款下載軟件,用于CC3200固件的燒寫。CCSUniFlash的安裝步驟如下:(1)雙擊后打開下載好的離線安裝包,進(jìn)入安裝界面。(2)點(diǎn)擊“Next”,進(jìn)入許可協(xié)議界面,選擇“Iaccepttheagreement”。點(diǎn)擊“Next”,進(jìn)入路徑選擇界面,選擇默認(rèn)即可。(3)點(diǎn)擊“Next”,進(jìn)入組件選擇界面后再次點(diǎn)擊“Next”,進(jìn)入調(diào)試接口及其驅(qū)動(dòng)選擇安裝界面。在此全部勾選,以免后續(xù)用到,如圖1.3-16所示。(4)連續(xù)點(diǎn)擊“Next”,直到出現(xiàn)如圖1.3-17所示的安裝完成界面。勾選前兩項(xiàng),即在“開始”菜單中生成啟動(dòng)圖標(biāo)和在桌面上生成快捷方式,至此完成CCSUniFlash的安裝。1.3.3CC3200SDK安裝CC3200SDK是TI官方提供的軟件開發(fā)工具包,里面集成了一些編程所需的庫文件、內(nèi)核文件、操作系統(tǒng)源碼及一些程序例子等,借助SDK可以大大地增加CC3200項(xiàng)目開發(fā)的效率。CC3200SDK的安裝步驟如下:(1)雙擊SDK1.2.0安裝包,打開exe文件,開始安裝SDK。(2)點(diǎn)擊“Next”,進(jìn)入CC3200SDK1.2.0的許可條例界面,選擇“Iaccepttheagreement”。(3)點(diǎn)擊“Next”,進(jìn)入安裝路徑選擇界面,選擇默認(rèn)路徑即可。連續(xù)點(diǎn)擊“Next”,直至進(jìn)入安裝界面。(4)等待進(jìn)度條示意完成,期間會(huì)跳出FTDI驅(qū)動(dòng)安裝界面,此時(shí)選擇“是”即可,如圖1.3-23所示。(5)安裝完成后的界面如圖1.3-24所示。(6)點(diǎn)擊“Finish”,完成安裝。打開“我的電腦”,在C盤的根目錄下找到TI文件夾,再在TI文件夾里找到CC3200SDK_1.2.0,繼續(xù)打開此文件夾,可以看到cc3200-sdk文件夾,其中可見CC3200的核心部分,如圖1.3-25所示。(7)此時(shí),僅僅是完成了SDK1.2.0的部分安裝,在官網(wǎng)SDK1.2.0的下載地址處還有一個(gè)ProvisioningAdd-OnforCC3200SDK。這個(gè)包是SDK1.2.0的附加包,其中包含了Provisioninglib等重要文件,如圖1.3-26所示,也是需要安裝的。值得注意的是,目前只有SDK1.2.0版本需要安裝ProvisioningAdd-OnforCC3200SDK。(8)下載如圖1.3-27所示的安裝包,雙擊,打開exe文件,開始安裝。點(diǎn)擊“Next”,繼續(xù)安裝。(11)如圖1.3-29所示,進(jìn)入許可條例界面,選擇“Iaccepttheagreement”,點(diǎn)擊“Next”。選擇默認(rèn)路徑。連續(xù)點(diǎn)擊“Next”,進(jìn)入正式安裝,等待進(jìn)度條示意完成即可,最后點(diǎn)擊“Finish”,完成安裝。1.3.4ServicePack安裝ServicePack是TI提供的針對(duì)CC3200的固件包,里面提供了對(duì)協(xié)議棧加密等的支持。如果需要用到WiFi功能,那就必須先向CC3200燒錄ServicePack,同時(shí)需要十分值得注意的是,ServicePack是與SDK搭配的,即不同的SDK版本的程序需要燒錄不同版本的ServicePack,與SDK搭配的ServicePack是放在一起下載的。ServicePack的安裝步驟如下:(1)雙擊打開exe文件,進(jìn)入安裝界面。點(diǎn)擊“Next”,開始安裝。在許可條例界面,選擇“Iaccepttheagreement”,然后點(diǎn)擊“Next”進(jìn)入安裝路徑的選擇。選擇默認(rèn)路徑,點(diǎn)擊“Next”,進(jìn)入正式安裝,待進(jìn)度條示意完成。如圖1.3-33所示,不勾選“ViewReadmeFile”,點(diǎn)擊“Finish”,完成安裝。(3)此時(shí),打開ServicePack的安裝文件夾,可以看到servicepack的bin文件,如圖1.3-34所示。1.3.5TIPinMuxTool安裝TIPinMuxTool是TI官方提供的一款圖形界面代碼生成器,利用TIPinMuxTool可以快速生成CC3200外設(shè)資源的底層驅(qū)動(dòng),大大縮短了開發(fā)周期。TIPinMuxTool的安裝步驟如下:(1)雙擊exe文件進(jìn)入開始安裝界面,點(diǎn)擊“Next”,進(jìn)入許可條例界面。選擇“Iaccepttheagreement”,點(diǎn)擊“Next”。(2)進(jìn)入安裝路徑選擇界面,選擇默認(rèn)路徑,連續(xù)點(diǎn)擊“Next”,進(jìn)入正式安裝,待安裝進(jìn)度條示意完成即可。如圖1.3-37所示為安裝完成界面,選擇在桌面生成一個(gè)快捷方式,點(diǎn)擊“Finish”,完成安裝。1.3.6JDK安裝JDK(JavaDevelopmentKit)是SunMicrosystems針對(duì)Java開發(fā)者推出的一款產(chǎn)品。它是由一個(gè)處于操作系統(tǒng)層之上的運(yùn)行環(huán)境,開發(fā)者編譯、調(diào)試和運(yùn)行用Java語言寫的Applet(一種Java開發(fā)的小程序)和應(yīng)用程序所需的工具組成。想要開發(fā)Java產(chǎn)品,需先安裝JDK,JDK由以下組件構(gòu)成,如圖1.3-38所示。JDK的安裝步驟如下:(1)打開下載好的JDK安裝程序,點(diǎn)擊“下一步”,選定安裝目錄,建議直接使用默認(rèn)目錄,點(diǎn)擊“下一步”。JDK安裝完成后,繼續(xù)安裝JRE,點(diǎn)擊“下一步”,如圖1.3-43所示。(2)安裝完成后找到指定安裝目錄,如圖1.3-44所示。(3)此時(shí)需要配置環(huán)境變量才能夠正常使用,右鍵單擊“我的電腦”,選擇“屬性”,點(diǎn)擊“高級(jí)系統(tǒng)設(shè)置”。選擇“高級(jí)”選項(xiàng)卡,點(diǎn)擊“環(huán)境變量”,如圖1.3-46所示。(4)雙擊“系統(tǒng)變量”中的“Path”,如圖1.3-47所示。(5)選擇“新建”,將安裝JDK和JRE目錄下的bin目錄地址粘貼進(jìn)去后點(diǎn)擊“確定”,如圖1.3-48所示。(6)打開電腦運(yùn)行欄,如圖1.3-49所示,輸入“cmd”,按回車鍵,打開DOS系統(tǒng)。輸入“Javac”,如果出現(xiàn)如圖1.3-50所示的界面,則表明運(yùn)行環(huán)境配置成功。1.3.7Eclipse安裝Eclipse是一個(gè)開放源代碼的、基于Java的可擴(kuò)展開發(fā)平臺(tái)。Eclipse既是Java的集成開發(fā)環(huán)境(IDE),也可作為其他開發(fā)語言的集成開發(fā)環(huán)境,如C、C++、PHP和Ruby等。Eclipse附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括Java開發(fā)工具(JDK)。Eclipse的安裝步驟如下:(1)選擇Eclipse版本和操作系統(tǒng)位數(shù),如圖1.3-51所示。(2)點(diǎn)擊“Download”,如圖1.3-52所示。(3)選擇第一個(gè)安裝模式,如圖1.3-53所示。(4)選擇默認(rèn)的安裝目錄,點(diǎn)擊“INSTALL”進(jìn)行安裝。等待程序安裝完成,如圖1.3-57所示。(5)點(diǎn)擊“LAUNCH”,如圖1.3-58所示。(9)選擇工作空間(即代碼存放目錄),設(shè)置為默認(rèn)目錄,點(diǎn)擊“Launch”。至此,Eclipse安裝成功,如圖1.3-60所示。1.3.8Sokit和Pcm2Wav簡介Sokit是一款小巧的網(wǎng)絡(luò)通信調(diào)試工具,集成了TCP協(xié)議、UDP協(xié)議的服務(wù)器和客戶端功能,可以模擬客戶端向服務(wù)端發(fā)送數(shù)據(jù)。Sokit無需安裝,可以從瘋殼官網(wǎng)直接獲取壓縮包,解壓后打開sokit.exe即可使用。Pcm2Wav是一個(gè)將?.pcm格式音頻文件轉(zhuǎn)換為可播放的?.wav格式音頻文件的小程序。Pcm2Wav無需安裝,可以從瘋殼官網(wǎng)直接獲取Pcm2wav.exe文件,直接運(yùn)行即可。2.1硬件開發(fā)基礎(chǔ)2.2軟件開發(fā)基礎(chǔ)2.1硬件開發(fā)基礎(chǔ)2.1.1CC3200簡介CC3200是TI針對(duì)無線連接SimpleLinkWiFi和物聯(lián)網(wǎng)(IOT)解決方案最新推出的一款MCU(微控制單元),同時(shí)也是業(yè)界第一個(gè)具有內(nèi)置WiFi的MCU。CC3200采用高性能ARMCortex-M4內(nèi)核,主頻為80?MHz,高達(dá)256?KB的RAM,64?KB的ROM,用于存放設(shè)備初始化固件、BOOTLOADER、外設(shè)驅(qū)動(dòng)庫,如圖2.1-1所示為CC3200芯片。CC3200主要包含MCU、WiFi網(wǎng)絡(luò)處理器和電源管理三大部分。圖2.1-2所示為CC3200的內(nèi)部組成結(jié)構(gòu)圖。CC3200包含有豐富的MCU外設(shè)資源。例如,27個(gè)獨(dú)立可編程、可復(fù)用的通用輸入輸出接口(GPIO),兩路通用的異步通信收發(fā)器(UART),一路高速串行通信接口(SPI),一路高速I2C接口,一個(gè)多通道音頻串行接口(McASP),可支持兩個(gè)I2S通道、一個(gè)SD/MMC接口、8位并行攝像頭接口、4個(gè)通用定時(shí)器、16位脈沖寬度調(diào)制(PWM)模式,以及4通道的高達(dá)12位模數(shù)轉(zhuǎn)換器(ADC)。CC3200的WiFi網(wǎng)絡(luò)處理器可以提供快速、安全的WLAN和因特網(wǎng)連接,其結(jié)構(gòu)如圖2.1-3所示。CC3200的特性如下:①特有的WiFi片上互聯(lián)網(wǎng)(Internet-On-a-Chip);②專用的ARMMCU,完全免除應(yīng)用MCU的WiFi
和互聯(lián)網(wǎng)協(xié)議處理負(fù)擔(dān),WiFi和互聯(lián)網(wǎng)協(xié)議存放于ROM
中;③包含802.11b/g/n射頻、基帶、MAC、WiFi驅(qū)動(dòng)和Supplicant,內(nèi)置TCP/IP協(xié)議棧;④具有行業(yè)標(biāo)準(zhǔn)BSD套接字應(yīng)用編程接口(API),同時(shí)支持8個(gè)TCP或UDP套接字,以及兩個(gè)TLS和SSL套接字;⑤強(qiáng)大的加密引擎,可以實(shí)現(xiàn)支持256位AES加密,快速、安全的互聯(lián)網(wǎng)連接支持站點(diǎn)(STA)、接入點(diǎn)(AP)和WiFi直連(P2P)模式,WPA2可保障個(gè)人和企業(yè)安全性;⑥用于自主和快速WiFi連接的SimpleLink連接管理器;⑦用于簡單、靈活WiFi配置的智能配置(SmartConfig)技術(shù)、AP模式和WPS2。2.1.2GPIOGPIO的全稱為GeneralPurposeInputOutput,即通用的輸入輸出,是所有控制器里必備的資源。CC3200的所有數(shù)字引腳和部分模擬引腳,均可作為通用的輸入輸出引腳(GPIO)使用。CC3200將GPIO分為4個(gè)組,分別是GPIOA0、GPIOA1、GPIOA2、GPIOA3,每一組GPIO又包含8個(gè)引腳。CC3200的引腳分配如表2.1-2所示。根據(jù)功能引腳配置的不同,CC3200最多可以有27個(gè)GPIO,且所有的GPIO引腳均具有中斷功能,觸發(fā)的方式支持電平觸發(fā)和邊沿觸發(fā)(上升沿和下降沿)。不僅如此,所有的GPIO都可以用于觸發(fā)DMA,可作為喚醒源。GPIO引腳可編程,可配置為內(nèi)部10?μA的上拉或下拉。驅(qū)動(dòng)能力可調(diào)節(jié)為2?mA、4?mA、6?mA、8?mA、10?mA、12?mA及14?mA,同樣也支持開漏模式。對(duì)GPIO進(jìn)行操作時(shí),主要需要了解兩大寄存器——GPIODATA寄存器和GPIODIR寄存器。(1)GPIODATA寄存器是數(shù)據(jù)寄存器。在軟件控制模式下,如果對(duì)應(yīng)的引腳通過GPIODIR寄存器配置為輸出模式,則寫到GPIODATA寄存器中的值會(huì)被傳到對(duì)應(yīng)引腳輸出。GPIODATA寄存器有256個(gè)別名地址,偏移值為0x000~0x3ff。一個(gè)不同地址別名可以用來直接讀/寫任何八個(gè)信號(hào)位的組合。這個(gè)特性可以避免讀—改—寫和軟件讀的位掩碼的時(shí)間消耗。在該方案中,為了寫GPIODATA寄存器,掩碼中對(duì)應(yīng)于總線中的[9:2]位,必須被置位;否則,在進(jìn)行寫操作時(shí)對(duì)應(yīng)位的值不會(huì)被改變。同樣,進(jìn)行讀操作時(shí)也是對(duì)應(yīng)總線中的[9:2]位,在讀取對(duì)應(yīng)位時(shí)也必須被置位,否則讀取為0。如果引腳配置為輸出模式,則讀取GPIODATA寄存器,返回最后一次寫入的值;如果配置為輸入模式,則返回對(duì)應(yīng)引腳的值。所有位都可以通過復(fù)位清零。如圖2.1-4所示為GPIODATA寄存器。(2)?GPIODIR寄存器是數(shù)據(jù)方向寄存器。在GPIODIR寄存器中,設(shè)置一位對(duì)應(yīng)的引腳配置為輸出,清除一位對(duì)應(yīng)的引腳配置為輸入。復(fù)位時(shí)所有位都清零,也就是說所有的GPIO引腳默認(rèn)是輸入。如圖2.1-5所示為GPIODIR寄存器。選擇配套的代碼例程,打開GPIO文件夾下的IAR工程,主函數(shù)見代碼清單2.1-1。PinMuxconfig()函數(shù)可由TIPinMuxTools工具生成。打開TIPinMuxTools工具,如圖2.1-6所示。第一步,在Device內(nèi)找到CC3200;第二步,點(diǎn)擊“Start”。如圖2.1-7所示,第一步,點(diǎn)擊“GPIO”處的“添加”,默認(rèn)是選取全部GPIO;第二步,把“GPIOSignals”前面的鉤去除,不全選;第三步,選擇“GPIO_9”、“GPIO_10”、“GPIO_11”,對(duì)應(yīng)開發(fā)板上的3個(gè)LED,驅(qū)動(dòng)LED需要GPIO輸出;第四步,將3個(gè)GPIO的“Output”勾選上。最終完成配置的界面如圖2.1-8所示,在最右邊的GeneratedFiles處,點(diǎn)擊“pin_mux_config.c”和“pin_mux_config.h”圖標(biāo),把代碼下載下來并添加到工程中即可。生成好的端口配置函數(shù)如代碼清單2.1-2所示。該函數(shù)主要是對(duì)LED對(duì)應(yīng)的端口開啟時(shí)鐘、設(shè)置方向等。配置好后通過GPIO_IF_LedConfigure()函數(shù)對(duì)LED端口進(jìn)行處理,即將各個(gè)LED的端口所對(duì)應(yīng)的端口組及屬于該組中的第幾個(gè)IO提取出來,如代碼清單2.1-3所示。完成上述兩步后先關(guān)閉所有的LED,然后在一個(gè)死循環(huán)內(nèi)執(zhí)行“流水”部分,即按順序以一定的時(shí)間間隔開閉LED,如代碼清單2.1-4為“流水”效果實(shí)現(xiàn)代碼。編譯程序,生成了相對(duì)應(yīng)的bin文件,下載前先插上仿真調(diào)試器TiStellaris,再將旁邊的撥碼開關(guān)“RX”和“TX”撥到“ON”,把啟動(dòng)方式撥碼選擇為FLASH啟動(dòng),即把SOP2撥到“ON”。打開下載工具UniFlash,點(diǎn)擊快速啟動(dòng)向?qū)е械摹靶履繕?biāo)配置”,在彈出的配置對(duì)話框中選擇CC3xSerial(UART)Interface,然后點(diǎn)擊“OK”。然后,在COMPort中輸入板子連接的串口號(hào)(根據(jù)電腦進(jìn)行選擇)。初次使用板子時(shí)先燒寫SevciePack,否則程序可能無法運(yùn)行。點(diǎn)擊“SevicePackProgramming”,選擇之前安裝的SevicePack安裝文件夾目錄下的bin文件即可。點(diǎn)擊左側(cè)界面“/sys/mcuimg.bin”,再在右側(cè)Url中選擇剛剛編譯生成的bin文件,然后選中下方的“Erase”和“Update”,如圖2.1-12所示。選擇“CC31xx/CC32xxFlashSetupandControl”,再點(diǎn)擊“Program”進(jìn)行下載,如圖2.1-13所示。根據(jù)軟件下方的提示,按下復(fù)位按鍵就可以看到下載的相關(guān)信息。下載完成后如圖2.1-15所示。首先,將下載前改變的撥碼開關(guān)撥回原處,再把撥碼開關(guān)“D5”“D6”和“D7”分別撥到“ON”,使I/O口與LED建立連接關(guān)系,按下復(fù)位開關(guān),可以看到3個(gè)LED呈“流水”狀閃爍,如圖2.1-16所示。2.1.3定時(shí)器CC3200包含的32位用戶可編程通用定時(shí)器共有4個(gè)(TimerA0~TimerA3),通用定時(shí)器可以對(duì)定時(shí)器輸入引腳的外部事件進(jìn)行計(jì)數(shù)或定時(shí)。每個(gè)定時(shí)器模塊包含的16位定時(shí)/計(jì)數(shù)器有兩個(gè)(TimerA和TimerB),可以作為定時(shí)器或事件計(jì)數(shù)器獨(dú)立工作,也可以作為一個(gè)32位定時(shí)器工作。通用定時(shí)器模塊具有多種操作模式:16位或32位可編程單次定時(shí)器;16位或32位可編程周期定時(shí)器;16位通用定時(shí)器,帶8位預(yù)分頻器;16位輸入邊沿計(jì)數(shù)或時(shí)間捕獲模式,帶8位預(yù)分頻器;16位脈沖寬度調(diào)制模式(PWM),帶8位預(yù)分頻器和軟件可編程輸入。這類多種操作模式具有以下特性:①向上或向下計(jì)數(shù);②16個(gè)16位或32位捕捉比較PWM(CCP)引腳;③可確定產(chǎn)生定時(shí)器中斷到進(jìn)入中斷服務(wù)程序(ISR)的時(shí)間;④可觸發(fā)使用DMA的高效傳輸;⑤系統(tǒng)時(shí)鐘運(yùn)行(80?MHz)。下面介紹與定時(shí)器編程相關(guān)的常用寄存器。(1)GPTMCFG寄存器主要是配置通用定時(shí)器模塊的全局操作,明確通用定時(shí)器工作于32位模式還是16位模式下。該寄存器中的值只能是在GPTMCTL寄存器中的TAEN和TBEN兩位被清零時(shí)改變。GPTMCFG寄存器如圖2.1-17所示。(2)?GPTMTAMR寄存器配置是基于GPTMCFG寄存器的配置來進(jìn)行選擇的。在PWM模式中,置位TAAMS位、清除TACMR位和配置TAMR為0x01或者0x02。寄存器如圖2.1-18所示。(3)?GPTMTBMR寄存器控制獨(dú)立定時(shí)器B的工作模式。當(dāng)定時(shí)器A和定時(shí)器B同時(shí)使用時(shí),該寄存器被忽略,而是通過GPTMTAMR來控制定時(shí)器A和定時(shí)器B的工作模式。注意:除了TCACT位外,其他位都必須在GPTMCTL寄存器中的TBEN位清零時(shí)進(jìn)行配置。GPTMTBMR寄存器如圖2.1-19所示。(4)?GPTMCTL寄存器為定時(shí)器的控制寄存器,如圖2.1-20所示。(5)?GPTMIMR寄存器可以軟件使能/關(guān)閉定時(shí)器的控制電平中斷。置位可以打開對(duì)應(yīng)的中斷,清零可以關(guān)閉對(duì)應(yīng)的中斷。寄存器如圖2.1-21所示。(6)?GPTMRIS寄存器為中斷源狀態(tài)寄存器,通過該寄存器可以獲取中斷源。GPTMRIS寄存器如圖2.1-22所示。(7)GPTMMIS寄存器為中斷掩碼狀態(tài)寄存器,可以檢測(cè)是否產(chǎn)生中斷。如圖2.1-23所示為其寄存器。(8)?GPTMICR寄存器用于清除GPTMRIS和GPTMIS寄存器中的狀態(tài)位,寫入1則清除對(duì)應(yīng)的中斷。GPTMICR寄存器如圖2.1-24所示。(9)當(dāng)通用定時(shí)器被配置為32位模式,GPTMTAILR作為一個(gè)32位寄存器(高16位對(duì)應(yīng)與定時(shí)器B裝載值寄存器的內(nèi)容)。在16位模式,寄存器的高16位讀取值為0,并且對(duì)GPTMTBILR寄存器的狀態(tài)沒有影響。如圖2.1-25所示為其寄存器。(10)當(dāng)通用定時(shí)器配置為32位模式時(shí),GPTMTBILR寄存器中[15:0]位的內(nèi)容被裝載到GPTMTAILR寄存器的高16位。讀取該寄存器,則返回定時(shí)器B的當(dāng)前值,寫操作無效。在16位模式,[15:0]位用于裝載值,[31:16]位保留不使用。如圖2.1-26所示為GPTMTBILR寄存器。(11)當(dāng)通用定時(shí)器被配置為32位模式時(shí),GPTMTAMATCHR作為32位寄存器(高16位對(duì)應(yīng)GPTMTBMATCHR寄存器的內(nèi)容)。在16位模式,寄存器的高16位讀取為0,并且對(duì)GPTMTBMATCHR的狀態(tài)沒有影響。如圖2.1-27所示為GPTMTAMATCHR寄存器。(12)當(dāng)通用定時(shí)器配置為32位模式時(shí),GPTMTBMATCHR寄存器的[15:0]位被裝載到寄存器GPTMTAMATCHR寄存器的高16位。讀取該寄存器得到定時(shí)器B的當(dāng)前值,寫操作無效。在16位模式中,[15:0]位用于匹配值,[31:16]位保留不使用。如圖2.1-28所示GPTMTBMATCHR寄存器。(13)GPTMTAPR寄存器通過軟件來擴(kuò)展獨(dú)立定時(shí)器的范圍。在單次或者周期減計(jì)數(shù)模式,該寄存器作為定時(shí)計(jì)數(shù)器的預(yù)分頻器。如圖2.1-29所示為其寄存器。(14)?GPTMTBPR寄存器通過軟件來擴(kuò)展獨(dú)立定時(shí)器的范圍。在單次或者周期減計(jì)數(shù)模式,該寄存器作為定時(shí)計(jì)數(shù)器的預(yù)分頻器。如圖2.1-30所示為其寄存器。(15)?GPTMTAPMR寄存器擴(kuò)展獨(dú)立定時(shí)器GPTMTAMATCHR的范圍。當(dāng)寄存器工作于16位模式時(shí),該寄存器表示[23:16]位。如圖2.1-31所示為其寄存器。(16)?GPTMTBPMR寄存器擴(kuò)展獨(dú)立定時(shí)器GPTMTAMATCHR的范圍。當(dāng)寄存器工作于16位模式時(shí),該寄存器表示[23:16]位。如圖2.1-32所示為其寄存器。(17)當(dāng)定時(shí)器配置為32位模式時(shí),GPTMTAR作為32位寄存器使用(高16位對(duì)應(yīng)GPTMTBR寄存器的內(nèi)容)。在16位輸入邊沿計(jì)數(shù),輸入邊沿定時(shí)和PEM模式,[15:0]位包含計(jì)數(shù)器的值,[23:16]位包含預(yù)分頻高8位的值。[31:24]位讀取值始終為0。可以讀取GPTMTAV的[23:16]位來獲取16位模式單次和周期模式的預(yù)分頻值。讀取GPTMTAPS寄存器可以獲取定期快照模式下的預(yù)分頻值。如圖2.1-33所示為GPTMTAR寄存器。(18)當(dāng)通用定時(shí)器配置為32位模式時(shí),GPTMTBR寄存器的[15:0]位被裝載到GPTMTAR寄存器的高16位。讀取該寄存器發(fā)揮定時(shí)器B的當(dāng)前值。在16位模式,[15:0]位包含計(jì)數(shù)器的值,[23:16]位包含在輸入邊沿計(jì)數(shù)、邊沿定時(shí)和PWM模式下的預(yù)分頻。[31:24]位讀取為0??梢酝ㄟ^讀取GPTMTBV寄存器中的[23:16]位可以獲取16位單次和周期模式的預(yù)分頻值。讀取GPTMTBPS寄存器可以獲取周期快照模式下的預(yù)分頻。如圖2.1-34所示為GPTMTBR寄存器。(19)當(dāng)定時(shí)器配置為32位模式時(shí),GPTMTAV作為32位寄存器(高16位對(duì)應(yīng)GPTMTBV寄存器的內(nèi)容)。在6位模式,[15:0]位包含計(jì)數(shù)器的值,[23:16]位包含分頻值。在單次或周期減計(jì)數(shù)模式,[23:16]位存儲(chǔ)真實(shí)的預(yù)分頻值,意味著[15:0]位的值之前,先減[23:16]位的值。[31:24]位讀取始終為0。如圖2.1-35所示為GPTMTAV寄存器。(20)當(dāng)通用定時(shí)器配置為32位模式,GPTMTBV寄存器[15:0]位的值被裝載到GPTMTAV寄存器的高16位。讀取該寄存器,則返回定時(shí)器B的當(dāng)前值。在16位模式,[15:0]位包含計(jì)數(shù)器的值,[23:16]位包含當(dāng)前的預(yù)分頻值。在單次或周期模式,[23:16]位為真實(shí)的預(yù)分頻值,意味著在[15:0]位減數(shù)之前,[23:16]位先進(jìn)行減數(shù)。[31:24]位讀取值為0。如圖2.1-36所示為GPTMTBV寄存器。(21)GPTMDMAEV寄存器允許軟件使能和關(guān)閉定時(shí)器DMA觸發(fā)事件。置位則對(duì)應(yīng)的DMA觸發(fā)使能,清零則關(guān)閉。如圖2.1-37所示GPTMDMAEV寄存器。本實(shí)驗(yàn)在官方CC3200SDK_1.2.0中timer例程代碼的基礎(chǔ)上修改過來的,用IAR打開Timer_Demo里的工程,編譯下載,從程序可以看到是利用CC3200的定時(shí)器TimerA0和TimerA1去控制GPIO_9和GPIO_11亮滅時(shí)間。如清單2.1-5所示為該工程的main函數(shù)。在main函數(shù)中PinMuxConfig()初始化了GPIO_9和GPIO_11,通過Timer_IF_Init()初始化了TimerA0和TimerA1,頻率和系統(tǒng)時(shí)鐘一致(不分頻),在Timer_IF_Start()函數(shù)中對(duì)TimerA0裝載了500這一參數(shù),TimerA1裝載了1000,實(shí)際上就是TimerA0定時(shí)500?ms進(jìn)入中斷函數(shù)TimerBaseIntHandler()、TimerA1定時(shí)1000?ms進(jìn)入中斷函數(shù)TimerRefIntHandler(),進(jìn)入中斷后對(duì)I/O口輸出狀態(tài)進(jìn)行反轉(zhuǎn)。打開UniFlash下載bin文件到板子上(參考GPIO小節(jié)),把D5、D7撥碼開關(guān)撥到ON(程序中使用的是D5、D7),按下復(fù)位鍵,可以看到D5和D7交替閃爍,如圖2.1-38為實(shí)驗(yàn)現(xiàn)象。使用邏輯分析儀可以看到GPIO_9端為1000?ms的脈寬,如圖2.1-39所示。如圖2.1-40可以看到,GPIO_11端的脈寬為500?ms。2.1.4串口串行接口分為異步串行接口和同步串行接口兩種。異步串行接口統(tǒng)稱為通用異步收發(fā)器(UART)接口;同步串行接口有SPI和I2C等,除包含數(shù)據(jù)線外,還有時(shí)鐘線。在本次實(shí)驗(yàn)中我們使用的是UART,也就是異步串行接口。UART的相關(guān)標(biāo)準(zhǔn)規(guī)定了接口的機(jī)械特性、電氣特性和功能特性等,其中電氣特性標(biāo)準(zhǔn)包括RS-232C、RS-422、RS-423和RS-485等。RS-232C是最常用的串行通信標(biāo)準(zhǔn),也是數(shù)據(jù)終端設(shè)備(DTE)和數(shù)據(jù)通信設(shè)備(DCE)之間串行二進(jìn)制數(shù)據(jù)交換接口技術(shù)標(biāo)準(zhǔn),其中DTE包括微機(jī)、微控制器和打印機(jī)等,DCE包括調(diào)制解調(diào)器MODEM、GSM模塊和Wi-Fi模塊燈。RS-232C的機(jī)械特性規(guī)定使用25針D型連接器,后來被簡化為9針D型連接器。RS-232C的電氣特性采用的是負(fù)邏輯,即邏輯“1”的電平低于?-3?V,邏輯“0”的電平高于?+3?V。與之相反的是,串口采用的TTL電平是正邏輯不同。邏輯“1”表示高電平,邏輯“0”表示低電平,因此通過RS-232C和TTL器件通信時(shí)必須進(jìn)行電平轉(zhuǎn)換。目前,微控制器的UART接口采用的是TTL正邏輯,與TTL器件相連接時(shí)不需要電平轉(zhuǎn)換,而與采用負(fù)邏輯的計(jì)算機(jī)相連接時(shí)需要進(jìn)行電平轉(zhuǎn)換(我們一般使用USB轉(zhuǎn)串模塊)。CC3200包含兩個(gè)可編程UART接口(UARTA0~1),主要特性如下:①作為可編程的波特率發(fā)生器,允許速度高達(dá)3?Mb/s;②獨(dú)立的16×8發(fā)送和接口FIFO,減輕CPU中斷處理負(fù)載;③可編程FIFO長度,包括提供傳統(tǒng)雙緩沖接口的單字節(jié)操作;④FIFO觸發(fā)閾值包括1/8、1/4、1/2、3/4和7/8;⑤標(biāo)準(zhǔn)的異步通信起始、停止和奇、偶校驗(yàn)位。CC3200的UART接口具有以下可編程串行接口特性:①可編程的5、6、7或8位數(shù)據(jù);②奇、偶或無校驗(yàn)生成/檢測(cè);③一或兩個(gè)停止位生成;④支持RTS和CTS調(diào)制解調(diào)器握手;⑤標(biāo)準(zhǔn)的FIFO閾值中斷和傳輸結(jié)束中斷。CC3200的UART支持DMA,使用DMA可實(shí)現(xiàn)高效傳輸。UART具有單獨(dú)的DMA發(fā)送和接收通道,支持FIFO中有數(shù)據(jù)的單個(gè)請(qǐng)求接收和可編程FIFO閾值的突發(fā)請(qǐng)求接收,以及FIFO中有空間的單個(gè)請(qǐng)求發(fā)送和可編程FIFO閾值的突發(fā)請(qǐng)求發(fā)送。UARTDR為數(shù)據(jù)寄存器(也是FIFO的接口)。在發(fā)送數(shù)據(jù)時(shí)如果FIFO使能了,則寫入該寄存器的數(shù)據(jù)會(huì)發(fā)送到FIFO中。如果FIFO關(guān)閉,則數(shù)據(jù)會(huì)被存儲(chǔ)在發(fā)送保持寄存器中(發(fā)送FIFO中的最低一個(gè)字),寫該寄存器意味著通過串口發(fā)送。在接收數(shù)據(jù)時(shí)如果FIFO使能了,數(shù)據(jù)字節(jié)和4位狀態(tài)位被發(fā)送到12位寬的接收FIFO中。如果FIFO關(guān)閉,則數(shù)據(jù)字節(jié)和狀態(tài)被存儲(chǔ)在接收保持寄存器中(接收FIFO中的最低一個(gè)字),可以通過讀取該寄存器來獲取接收數(shù)據(jù)。圖2.1-41所示為UARTDR寄存器。UARTRSR_UARTECR是接收狀態(tài)寄存器/錯(cuò)誤清除寄存器。除UARTDR寄存器外,接收的狀態(tài)位也可以通過UARTRSR寄存器獲取。如果從該寄存器讀取狀態(tài)信息,則狀態(tài)信息對(duì)應(yīng)于在讀取UARTRSR寄存器之前的UARTDR的狀態(tài)信息。當(dāng)有溢出條件發(fā)生時(shí),狀態(tài)位中的溢出標(biāo)志位會(huì)立刻被置位。UARTRSR寄存器不能被寫,寫任何值到寄存器UARTECR中將會(huì)清除幀、校驗(yàn)、打斷和溢出錯(cuò)誤。復(fù)位會(huì)清零所有的位。圖2.1-42所示為UARTRSR_UARTECR寄存器。UARTFR為標(biāo)志寄存器,在復(fù)位后TXFF、RXFF和BUSY標(biāo)志位為0,TXFE和RXFE位為1。RI和CTS位指示調(diào)制解調(diào)器的控制流和狀態(tài)。這里需要注意的是,調(diào)制解調(diào)位僅在UART1中有效,在UART0中是保留位。圖2.1-43所示為UARTFR。UARTIBRD寄存器是波特率除數(shù)的整數(shù)部分,復(fù)位之后所有的位被清零。最小值為1,UARTIBRD為0,UARTFBRD寄存器無效。當(dāng)改變UARTIBRD寄存器時(shí),只有在當(dāng)前的字節(jié)傳輸完成之后才生效。波特率除數(shù)的任何改變都必須在寫UARTLCRH寄存器之后。UARTFBRD寄存器是波特率除數(shù)的小數(shù)部分,復(fù)位之后所有的位被清零。當(dāng)修改UARTFBRD寄存器的值時(shí),只有在當(dāng)前字節(jié)發(fā)送/接收完成之后才會(huì)有效。波特率除數(shù)的任何改變都必須在寫UARTLCRH寄存器之后。圖2.1-44所示為UARTFBRD寄存器。UARTLCRH寄存器是線控制寄存器,可控制串口的數(shù)據(jù)長度、校驗(yàn)和停止位的選擇。當(dāng)更新波特率除數(shù)寄存器時(shí),必須也要重寫該寄存器,是因?yàn)椴ㄌ芈食龜?shù)寄存器的寫選通信號(hào)與該寄存器是連接在一起的。圖2.1-45所示為UARTLCRH寄存器UARTCTL是控制寄存器,在復(fù)位后除發(fā)送和接收使能位外,其他位都被清零。UARTEN位用于使能UART模塊,在配置串口模塊時(shí)必須將該位清零。如果在串口進(jìn)行發(fā)送或者接收的操作時(shí)關(guān)閉串口模塊功能,則在完成當(dāng)前發(fā)送或者接收操作之后才關(guān)閉。圖2.1-46所示為UARTCTL寄存器。UARTIFLS是選擇FIFO產(chǎn)生中斷閾值的寄存器,可以用其來定義FIFO的閾值,同時(shí)UARTRIS寄存器中的TXRIS和RXRIS位被觸發(fā)。產(chǎn)生中斷是基于一個(gè)發(fā)送操作超過閾值而不是等于閾值。也就是說,F(xiàn)IFO中的數(shù)據(jù)超過規(guī)定的閾值之后才會(huì)產(chǎn)生中斷。例如,如果接收的觸發(fā)閾值設(shè)置為一般(8字節(jié)),那么在串口模塊接收到第9個(gè)字節(jié)時(shí)才會(huì)產(chǎn)生中斷。因?yàn)樵趶?fù)位之后TXIFLSEL和RXIFLSEL位被配置,所以FIFO在接收一半時(shí)觸發(fā)中斷。圖2.1-47所示為UARTRIS寄存器。UARTIM是中斷掩碼置位/清零寄存器,讀取該寄存器則獲得當(dāng)前中斷的掩碼值。進(jìn)行置位時(shí),對(duì)應(yīng)的中斷將被發(fā)送到中斷控制器;清零操作時(shí),則對(duì)應(yīng)的中斷不會(huì)被發(fā)送到中斷控制器。圖2.1-48所示為UARTIM寄存器。UARTRIS是源中斷狀態(tài)寄存器,可以讀取到當(dāng)前中斷源,寫操作無效。圖2.1-49所示為UARTRIS寄存器。UARTMIS是中斷掩碼狀態(tài)寄存器,可獲取對(duì)應(yīng)中斷的掩碼值,寫操作無效。圖2.1-50所示為UARTMIS寄存器。UARTICR是中斷清零寄存器,置位則對(duì)應(yīng)的中斷被清除(清除中斷源寄存器和中斷掩碼寄存器中對(duì)應(yīng)的位),清零操作無效。圖2.1-51所示為UARTICR寄存器。UARTDMACTL是DMA控制寄存器。圖2.1-52所示為UARTDMACTL寄存器。打開CC3200_Uart_Demo文件夾里的工程,將CC3200的UARTA0的波特率設(shè)置為115?200?b/s,8位數(shù)據(jù)位,1個(gè)停止位,無奇偶校驗(yàn)位,代碼清單如2.1-6所示。當(dāng)串口接收到數(shù)據(jù)后,把接收到的數(shù)據(jù)再通過串口發(fā)送出去,編譯工程,打開UniFlash,把bin文件下載到CC3200板子上(具體步驟請(qǐng)參考GPIO小節(jié))。把“CH340G_VCC”和串口選擇的第一個(gè)“RXD”和第二個(gè)“TXD”撥碼開關(guān)均撥到“ON”。插上USB數(shù)據(jù)線接到電腦,打開串口助手,選擇串口號(hào),波特率設(shè)置為115?200?b/s,按下板子的復(fù)位可見串口打印,如圖2.1-53所示。在發(fā)送框內(nèi)輸入瘋殼的網(wǎng)址,點(diǎn)擊“發(fā)送”,串口助手收到CC3200的回傳,如圖2.1-54所示。2.1.5外部中斷接口數(shù)據(jù)傳送控制方式有查詢、中斷和DMA等,其中中斷是重要的接口數(shù)據(jù)傳送控制方式。中斷控制分為全局和局部兩級(jí),前者由NVIC控制,后者由外設(shè)控制。嵌套向量中斷控制器NVIC支持多個(gè)內(nèi)部異常和240個(gè)外部中斷。從廣義上講,異常和中斷都是暫停正在執(zhí)行的程序,轉(zhuǎn)去執(zhí)行異?;蛑袛嗵幚沓绦?,然后返回原來的程序繼續(xù)執(zhí)行。從狹義上講,異常由內(nèi)部事件引起,而中斷由外部硬件產(chǎn)生。異常和中斷的處理與子程序調(diào)用有相似之處,但也有下列本質(zhì)區(qū)別:①何時(shí)調(diào)用子程序是確定的,而何時(shí)產(chǎn)生異常和中斷是不確定的。子程序的起始地址由調(diào)用程序給出,而異常和中斷程序的起始地址則存放在地址表中。②子程序的執(zhí)行一般是無條件的,而異常和中斷處理程序的執(zhí)行要先使能。CC3200的NVIC具有下列特性:①確定的、快速的中斷處理,總是12個(gè)時(shí)鐘周期;②每個(gè)中斷的優(yōu)先級(jí)(0~7,0表示最高優(yōu)先級(jí))可編程;③有3~8位優(yōu)先級(jí)配置;④動(dòng)態(tài)重新分配中斷優(yōu)先級(jí);⑤中斷優(yōu)先級(jí)分組允許選擇中斷優(yōu)先級(jí)分組和中斷子優(yōu)先級(jí)的數(shù)量;⑥中斷信號(hào)電平和邊沿檢測(cè)。本小節(jié)將使用GPIO外部中斷來實(shí)現(xiàn)按鍵的功能。每個(gè)GPIO端口的中斷功能通過7個(gè)寄存器來進(jìn)行控制,這些寄存器可用來選擇中斷源、中斷優(yōu)先級(jí)和邊沿特性。當(dāng)一個(gè)或者多個(gè)GPIO輸入引起中斷時(shí),一個(gè)單中斷信號(hào)輸出到整個(gè)GPIO端口的中斷控制器。以下三個(gè)寄存器定義了引起中斷的邊沿或檢測(cè):①GPIOIS:GPIO中斷檢測(cè)寄存器。②GPIOIBE:GPIO中斷邊沿寄存器。③GPIOIEV:GPIO中斷時(shí)間寄存器。中斷功能通過GPIO中斷掩碼(GPIOIM)寄存器來進(jìn)行使能和關(guān)閉。當(dāng)一個(gè)中斷條件產(chǎn)生時(shí),有兩個(gè)地方可以查看中斷信號(hào)的狀態(tài):GPIO源中斷狀態(tài)(GPIORIS)寄存器和GPIO掩碼中斷狀態(tài)(GPIOMIS)寄存器。GPIORIS寄存器表示一個(gè)GPIO引腳達(dá)到了產(chǎn)生中斷的條件,但是不一定會(huì)發(fā)送給中斷控制器,而GPIOMIS寄存器只顯示可以發(fā)送給中斷控制器的中斷條件。如果是GPIO電平檢測(cè)中斷,產(chǎn)生中斷的電平信號(hào)必須保持到中斷服務(wù)的產(chǎn)生。一旦輸入的信號(hào)解除中斷產(chǎn)生的邏輯信號(hào),對(duì)應(yīng)的GPIORIS寄存器中的源中斷寄存器位將被清零。對(duì)于GPIO邊沿檢測(cè)中斷,GPIORIS寄存器中的RIS位通過向寄存器GPIOICR中的對(duì)應(yīng)位寫入1來進(jìn)行清零。GPIOMIS寄存器中的對(duì)應(yīng)位反應(yīng)源中斷狀態(tài)位的掩碼值。當(dāng)編輯中斷控制寄存器時(shí),應(yīng)當(dāng)將中斷全部關(guān)閉(GPIOIM清零)。如果對(duì)應(yīng)的位使能的話,則寫任何中斷控制寄存器都會(huì)產(chǎn)生不必要的中斷。GPIOIS是中斷檢測(cè)寄存器。置位對(duì)應(yīng)的引腳進(jìn)行電平檢測(cè),清零則對(duì)應(yīng)的引腳進(jìn)行邊沿檢測(cè)。在復(fù)位時(shí),所有的位清零。圖2.1-55所示為其寄存器。GPIOIBE寄存器允許雙邊沿來觸發(fā)中斷。當(dāng)GPIOIS寄存器設(shè)置為檢測(cè)邊沿時(shí),則設(shè)置GPIOIBE寄存器來配置對(duì)應(yīng)的引腳來檢測(cè)上升和下降沿,而忽略GPIOIEV寄存器中的對(duì)應(yīng)位的配置。清零一位,則配置為引腳受GPIOIEV寄存器的控制。復(fù)位之后,所有的位都被清零。圖2.1-56所示為其寄存器。GPIOIEV寄存器是中斷事件寄存器,通過置位其中對(duì)應(yīng)的位來配置對(duì)應(yīng)的引腳檢測(cè)上升沿或者高電平,這取決于GPIOIS寄存器對(duì)應(yīng)位的配置。清零該寄存器中的對(duì)應(yīng)位則對(duì)應(yīng)的引腳檢測(cè)下降沿或者低電平,取決于GPIOIS寄存器中對(duì)應(yīng)位的配置,復(fù)位之后所有的位都清零。如圖2.1-57所示為寄存器。GPIOIM寄存器是中斷掩碼寄存器,通過置位其中的對(duì)應(yīng)位,則對(duì)應(yīng)引腳上產(chǎn)生的中斷將通過組合中斷信號(hào)發(fā)送給中斷控制器。清零則對(duì)應(yīng)的引腳產(chǎn)生的中斷不會(huì)發(fā)送給中斷控制器。復(fù)位之后所有的位都清零。圖2.1-58所示為GPIOIM寄存器。GPIORIS寄存器是源中斷狀態(tài)寄存器。當(dāng)對(duì)應(yīng)的引腳達(dá)到中斷條件時(shí),該寄存器中對(duì)應(yīng)的位被置位。如果中斷掩碼(GPIOIM)寄存器中的對(duì)應(yīng)位被置位,則發(fā)送中斷信號(hào)到中斷控制寄存器。如果某一位讀取為0,則說明對(duì)應(yīng)的引腳沒有產(chǎn)生中斷。對(duì)于電平觸發(fā)中斷,引腳上的中斷信號(hào)必須保持到中斷服務(wù)。一旦中斷信號(hào)達(dá)不到中斷邏輯檢測(cè)要求,則GPIORIS寄存器對(duì)應(yīng)的RIS位將被清零。對(duì)于一個(gè)GPIO邊沿檢測(cè)中斷,GPIORIS寄存器中的RIS位通過置位GPIOICR寄存器中對(duì)應(yīng)的位進(jìn)行清零。GPIOMIS寄存器中的位反映了RIS位的掩碼值。圖2.1-59所示為GPIORIS寄存器。GPIOMIS寄存器是掩碼中斷狀態(tài)寄存器。如果寄存器中對(duì)應(yīng)位被置位,則對(duì)應(yīng)的中斷將被發(fā)送到中斷控制器。如果某一位被清零,則無論是否有中斷產(chǎn)生,中斷都會(huì)被屏蔽掉。GPIOMIS寄存器是中斷掩碼之后的狀態(tài),圖2.1-60所示為其寄存器。GPIOICR寄存器是中斷清零寄存器。對(duì)于邊沿檢測(cè)中斷,置位GPIOICR寄存器中對(duì)應(yīng)的位,則會(huì)清除GPIORIS和GPIOMIS寄存器中對(duì)應(yīng)的位。如果中斷是電平檢測(cè),則該寄存器中的對(duì)應(yīng)位沒有影響。另外,向該寄存器中寫入0也沒有任何影響,圖2.1-61所示為其寄存器。本實(shí)驗(yàn)在是官方CC3200SDK_1.2.0中Interrupt例程代碼的基礎(chǔ)上修改得來的,打開Interrupt_Demo。由于本次實(shí)驗(yàn)用到串口和按鍵,所以在mian函數(shù)的PinMuxConfig()中配置了串口0的輸入、輸出,以及GPIO_13和GPIO_22的方向?yàn)檩斎?。本次?shí)驗(yàn)的關(guān)鍵是ButtonIntInit()函數(shù),該函數(shù)如代碼清單2.1-7所示。在該函數(shù)中把GPIO_13與GOIO_22配置為下降沿觸發(fā),觸發(fā)的中斷函數(shù)為Button1IntHandler()及Button2IntHandler()。進(jìn)入中斷后首先清除標(biāo)志位,然后通過串口0打印出“Button1”及“Button2”。打開UniFlash,把編譯后生成的bin文件下載到板子上(參考GPIO小節(jié)),把串口選擇的撥碼的第一個(gè)“RXD”及“CH340G_VCC”撥到ON。這里我們用到了串口0的接收,打開串口調(diào)試助手,選擇對(duì)應(yīng)的串口號(hào),波特率設(shè)置為115?200;打開串口,a按下復(fù)位,可以看到串口打印信息如圖2.1-62所示。按下板子上的SW2和SW3,可以看到串口打印信息如圖2.1-63所示。2.1.6PWMPWM(PulseWidthModulation)即脈沖寬度調(diào)制。PWM運(yùn)用非常廣泛,大到航天飛船,小到便攜式USB風(fēng)扇,都可以見到PWM的身影。許多MCU的定時(shí)器均帶有PWM模式,CC3200也不例外。CC3200通用定時(shí)器支持PWM模式。在PWM模式下定時(shí)器被配置為一個(gè)24位的減計(jì)數(shù)器,初始值在GPTMTnILR和GPTMTnPR寄存器中進(jìn)行定義。在該模式中PWM頻率和周期是同步事件,這樣可以消除毛刺。PWM模式可以通過向寄存器GPTMTnMR中的TnAMS位寫入0x01,TnCMR位寫入0x00,TnMR位寫入0x02。當(dāng)定時(shí)器使能時(shí),裝載到定時(shí)器寄存器中的值如表2.1-46所示。當(dāng)通過軟件寫GPTMCTL寄存器中的TnEN位時(shí),計(jì)數(shù)器開始進(jìn)行減計(jì)數(shù),直到0。在周期模式中的下一個(gè)計(jì)數(shù)循環(huán),計(jì)數(shù)器從GPTMTnILR和GPTMTnPR寄存器中裝載初始值,并重新開始計(jì)數(shù),直到通過軟件清除GPTMCTL寄存器中的TnEN位進(jìn)行關(guān)閉。該定時(shí)器可以通過上升沿、下降沿和邊沿觸發(fā)這3種類型的事件來產(chǎn)生中斷。事件類型通過GPTMCTL寄存器中的TnEVENT位來進(jìn)行配置,中斷通過GPTMTnMR寄存器中的TnPWMIE位來進(jìn)行使能。當(dāng)事件發(fā)生時(shí)GPTMRIS寄存器中的CnERIS位被置位,并且一直保持到通過GPTMICR寄存器來進(jìn)行清除。如果捕獲模式事件中斷通過GPTMIMR寄存器進(jìn)行使能,則通用定時(shí)器也要置位GPTMMIS寄存器中的CnEMIS位。另外,通過置位GPTMCTL寄存器中的TnOTE位和GPTMDMAEV寄存器中的CnEDMAEN位,使能DMA觸發(fā)模式。當(dāng)TnPWMIE被置位并且發(fā)生捕捉時(shí)間時(shí),定時(shí)器自動(dòng)產(chǎn)生DMA的觸發(fā)事件。在PWM模式中GPTMTnR和GPTMTnV寄存器始終保持相同的值。當(dāng)計(jì)數(shù)器的值等于GPTMTnILR和GPTMTnPR寄存器的值時(shí),輸出PWM信號(hào);當(dāng)計(jì)數(shù)器的值等于GPTMTnMATCHR和GPTMTnPMR寄存器的值時(shí),信號(hào)進(jìn)行翻轉(zhuǎn),可以通過軟件設(shè)置GPTMCTL寄存器中的TnPWML位來對(duì)PWM信號(hào)的電平進(jìn)行翻轉(zhuǎn)。圖2.1-64就是一個(gè)產(chǎn)生PWM信號(hào)的例子。GPTMCFG寄存器配置通用定時(shí)器模塊的全局操作。確定通用定時(shí)器工作于32位模式,還是16位模式。該寄存器中的值只能是在GPTMCTL寄存器中的TAEN和TBEN兩位被清零時(shí)改變,圖2.1-65所示為其寄存器。把2~0位寫入0,配置為32位定時(shí)器模式;如寫入4,配置為16位定時(shí)器模式。GPTMTAMR寄存器的配置是基于GPTMCFG寄存器的配置來進(jìn)行選擇的。在PWM模式中,置位TAAMS位、清除TACMR位和配置TAMR為0x01或者0x02。圖2.1-66所示為其寄存器。GPTMTBMR寄存器控制獨(dú)立定時(shí)器B的工作模式。當(dāng)定時(shí)器A和定時(shí)器B一起使用時(shí)該寄存器被忽略,而是通過GPTMTAMR來控制定時(shí)器A和定時(shí)器B的工作模式。注意:除了TCACT位,其他位都必須在GPTMCTL寄存器中的TBEN位清零時(shí)進(jìn)行配置。圖2.1-67所示為GPTMTBMR寄存器。GPTMCTL寄存器為定時(shí)器的控制寄存器,圖2.1-68為GPTMCTL寄存器。GPTMIMR寄存器可以通過軟件使能/關(guān)閉定時(shí)器的控制電平中斷。置位可以打開對(duì)應(yīng)的中斷,清零可以關(guān)閉對(duì)應(yīng)的中斷,圖2.1-69所示為GPTMIMR寄存器。GPTMRIS寄存器為中斷源狀態(tài)寄存器,通過該寄存器可以獲取中斷源。圖2.1-70為GPTMRIS寄存器。GPTMMIS寄存器為中斷掩碼狀態(tài)寄存器,可以檢測(cè)是否產(chǎn)生中斷。圖2.1-71所示為GPTMMIS寄存器。GPTMICR寄存器用于清除GPTMRIS和GPTMIS寄存器中的狀態(tài)位,寫入1則清除對(duì)應(yīng)的中斷。圖2.1-72所示為GPTMICR寄存器。當(dāng)通用定時(shí)器被配置為32位模式,GPTMTAILR作為一個(gè)32位寄存器(高16位對(duì)應(yīng)與定時(shí)器B裝載值寄存器的內(nèi)容)。在16位模式中寄存器的高16位讀取值為0,并且對(duì)GPTMTBILR寄存器的狀態(tài)沒有影響。圖2.1-73所示為GPTMTAILR寄存器。當(dāng)通用定時(shí)器配置為32位模式時(shí),GPTMTBILR寄存器中[15:0]位的內(nèi)容被裝載到GPTMTAILR寄存器的高16位。讀取GPTMTBILR寄存器,則返回定時(shí)器B的當(dāng)前值,寫操作無效。在16位模式,[15:0]位用于裝載值,[31:16]位保留不使用。圖2.1-74所示為GPTMTBILR寄存器。當(dāng)通用定時(shí)器被配置為32位模式時(shí),GPTMTAMATCHR作為32位寄存器(高16位對(duì)應(yīng)于GPTMTBMATCHR寄存器的內(nèi)容)。在16位模式,寄存器的高16位讀取為0,并且對(duì)GPTMTBMATCHR的狀態(tài)沒有影響。圖2.1-75所示為GPTMTAMATCHR寄存器。當(dāng)通用定時(shí)器配置為32位模式時(shí),GPTMTBMATCHR寄存器的[15:0]位被裝載到寄存器GPTMTAMATCHR寄存器的高16位。讀取GPTMTBMATCHR寄存器得到定時(shí)器B的當(dāng)前值,寫操作無效。在16位模式中,[15:0]位用于匹配值。[31:16]位保留不使用。圖2.1-76所示為GPTMTBMATCHR寄存器。GPTMTAPR寄存器通過軟件來擴(kuò)展獨(dú)立定時(shí)器的范圍。在單次或者周期減計(jì)數(shù)模式下該寄存器作為定時(shí)計(jì)數(shù)器的預(yù)分頻器。圖2.1-77所示為GPTMTAPR寄存器。GPTMTBPR寄存器通過軟件來擴(kuò)展獨(dú)立定時(shí)器的范圍,在單次或者周期減計(jì)數(shù)模式下該寄存器作為定時(shí)計(jì)數(shù)器的預(yù)分頻器。圖2.1-78所示為GPTMTBPR寄存器。GPTMTAPMR寄存器擴(kuò)展獨(dú)立定時(shí)器GPTMTAMATCHR的范圍。當(dāng)寄存器工作于16位模式時(shí),該寄存器表示[23:16]位。圖2.1-79所示為GPTMTAPMR寄存器。GPTMTBPMR寄存器擴(kuò)展獨(dú)立定時(shí)器GPTMTAMATCHR的范圍。當(dāng)寄存器工作于16位模式時(shí),該寄存器表示[23:16]位。圖2.1-80所示為GPTMTBPMR寄存器。當(dāng)定時(shí)器配置為32位模式時(shí),GPTMTAR作為32位寄存器使用(高16位對(duì)應(yīng)GPTMTBR寄存器的內(nèi)容)。在16位輸入邊沿計(jì)數(shù),輸入邊沿定時(shí)和PEM模式,[15:0]位包含計(jì)數(shù)器的值,[23:16]位包含預(yù)分頻高8位的值。[31:24]位讀取值始終為0??梢宰x取[GPTMTAV]的[23:16]位來獲取16位模式單次和周期模式的預(yù)分頻值。讀取GPTMTAPS寄存器可以獲取定期快照模式下的預(yù)分頻值。圖2.1-81所示為GPTMTAR寄存器。當(dāng)通用定時(shí)器配置為32位模式時(shí),GPTMTBR寄存器的[15:0]位被裝載到GPTMTAR寄存器的高16位。讀取GPTMTBR寄存器得到定時(shí)器B的當(dāng)前值。在16位模式下[15:0]位包含計(jì)數(shù)器的值,[23:16]位包含在輸入邊沿計(jì)數(shù)、邊沿定時(shí)和PWM模式下的預(yù)分頻。[31:24]位讀取為0??梢酝ㄟ^讀取GPTMTBV寄存器中的[23:16]位可以獲取16位單次和周期模式的預(yù)分頻值。讀取GPTMTBPS寄存器可以獲取周期快照模式下的預(yù)分頻。圖2.1-82所示為GPTMTBR寄存器。當(dāng)定時(shí)器配置為32位模式時(shí),GPTMTAV作為32位寄存器(高16位對(duì)應(yīng)GPTMTBV寄存器的內(nèi)容)。在16位模式,[15:0]位包含計(jì)數(shù)器的值,[23:16]位包含分頻值。在單次或周期減計(jì)數(shù)模式,[23:16]位存儲(chǔ)真實(shí)的預(yù)分頻值,意味著在減[15:0]位的值之前,先減[23:16]位的值,[31:24]位讀取始終為0。圖2.1-83所示為GPTMTAV寄存器。當(dāng)通用定時(shí)器配置為32位模式,GPTMTBV寄存器[15:0]位的值被裝載到GPTMTAV寄存器的高16位。讀取GPTMTBV寄存器,則返回定時(shí)器B的當(dāng)前值。在16位模式,[15:0]位包含計(jì)數(shù)器的值,[23:16]位包含當(dāng)前的預(yù)分頻值。在單次或周期模式,[23:16]位為真實(shí)的預(yù)分頻值,意味著在[15:0]位減數(shù)之前,[23:16]位先進(jìn)行減數(shù)。[31:24]位讀取值為0。圖2.1-84所示為GPTMTAV寄存器。GPTMDMAEV寄存器允許軟件使能和關(guān)閉定時(shí)器DMA觸發(fā)事件。置位對(duì)應(yīng)的DMA觸發(fā)使能,清零則關(guān)閉。圖2.1-85所示為GPTMDMAEV寄存器。打開Pwm_Demo,在該次工程中主要是實(shí)現(xiàn)板子上三顆LED的“呼吸燈”效果,即要把GPIO_9、GPIO_10和GPIO_11三個(gè)IO口配置為PWM模式,逐次增加或降低這些端口的占空比即可使LED“呼吸”,如代碼清單2.1-8為Pwm_Demo的main函數(shù)。首先,看到main函數(shù)中的PinMuxConfig()函數(shù),如代碼清單2.1-9所示為該函數(shù)的代碼。在該代碼中先使能時(shí)鐘,然后把Pin64(GPIO_9)、Pin01(GPIO_10)及Pin02(GPIO11)分別配置為模式3,即PWM模式。為什么呢?在datasheet中可以里看到,如圖2.1-86以及圖2.1-87所示的端口復(fù)用圖,在該圖中可以看到Pin64(GPIO_9)在模式3下會(huì)被復(fù)用為PWM_05,Pin01(GPIO_10)在模式3下會(huì)被復(fù)用為PWM_06,Pin02(GPIO_11)在模式3下會(huì)被復(fù)用為PWM_07。配置好PWM輸出引腳后,就將定時(shí)器與該輸出引腳相關(guān)聯(lián)起來,在main函數(shù)中的InitPWMModules()函數(shù)是關(guān)鍵,如代碼清單2.1-10為InitPWMModules()函數(shù)。在該函數(shù)中的SetupTimerPWMMode()把Timer2的TimerB與PWM_5(即GPIO_9)相關(guān)聯(lián)起來,把Timer3的TimerB與PWM_6(即GPIO_10)相關(guān)聯(lián)起來,把Timer3的TimerA與PWM_7(即GPIO_11)相關(guān)聯(lián)起來。問題來了,為什么這樣就能關(guān)聯(lián)起來了呢?打開CC3200的《TechnicalReferenceManual》,即常說的參考手冊(cè),可以看到一個(gè)定時(shí)器與引腳映射圖,如圖2.1-88所示。在該圖中可以清楚地看到,PWM_5正是對(duì)應(yīng)著Timer2的TimerB,PWM_6正是對(duì)應(yīng)著Timer3的TimerA,PWM_7正是對(duì)應(yīng)著Timer3的TimerB。返回到main函數(shù)中,實(shí)現(xiàn)LED呼吸的部分代碼,如代碼清單2.1-11所示。該代碼主要就是不斷地改變輸出端的占空比,從而實(shí)現(xiàn)LED的“呼吸”。編譯代碼時(shí)打開UniFlash,把Bin文件下載到板子上(參考GPIO小節(jié)),再把撥碼開關(guān)D5、D6、D7撥到“ON”,按下復(fù)位,可以看到如圖2.1-89所示的LED“呼吸”效果。2.1.7WiFi-UDP網(wǎng)絡(luò)通信UDP是UserDatagramProtocol的簡稱,中文名是用戶數(shù)據(jù)報(bào)協(xié)議。在網(wǎng)絡(luò)中UDP與TCP協(xié)議一樣,用于處理數(shù)據(jù)包。與TCP不一樣的是,UDP是一種無連接的協(xié)議,只能是盡可能地傳輸?shù)侥康牡兀訳DP也是具有一定的不可靠性。那么為什么還會(huì)存在UDP呢?因?yàn)樵谠缙诘木W(wǎng)絡(luò)開發(fā)中,人們發(fā)現(xiàn)一些簡單的網(wǎng)絡(luò)通信不需要經(jīng)過TCP復(fù)雜的建立關(guān)系,而且過多的建立TCP連接會(huì)造成很大的網(wǎng)絡(luò)負(fù)擔(dān),而UDP協(xié)議可以相對(duì)快速地處理這些簡單通信,如表2.1-68所示為UDP組成結(jié)構(gòu)。CC3200支持多種基于WiFi的網(wǎng)絡(luò)通信,UDP也不例外。打開Udp_Socket_Demo,如代碼清單2.1-12所示為main函數(shù)。在main函數(shù)中有InitializeAppVariables,該函數(shù)主要在于實(shí)現(xiàn)把宏定義中的UDP服務(wù)器的IP及端口號(hào)取出,進(jìn)入建立UDP的就緒狀態(tài)。ConfigureSimpleLinkToDefaultState()函數(shù)主要是實(shí)現(xiàn)CC3200的接入網(wǎng)絡(luò)部分,把CC3200設(shè)置為STA模式,并且把CC3200接入到在common.h中定義好的路由器上,如代碼清單2.1-13所示為common.h中定義好的路由器SSID、密鑰及加密方式等。最重要的函數(shù)是如代碼清單2.1-14所示的BsdUdpClient(),通過該函數(shù)建立UDP。該函數(shù)先通過函數(shù)sl_SendTo()向網(wǎng)絡(luò)中發(fā)送瘋殼的官網(wǎng),然后通過函數(shù)sl_RecvFrom()進(jìn)入等待接收。打開網(wǎng)絡(luò)調(diào)試助手,然后點(diǎn)擊“打開”,將協(xié)議類型設(shè)置為“UDP”,點(diǎn)擊“打開”。把網(wǎng)絡(luò)調(diào)試助手的“本地主機(jī)地址”和“本地主機(jī)端口”,填寫到程序中定義IP及端口號(hào)處,如代碼清單2.1-15所示(注意IP要為16進(jìn)制),如圖2.1-90所示為網(wǎng)絡(luò)調(diào)試助手打開時(shí)的畫面。編譯代碼,打開UniFlash,下載bin文件到板子上(下載方法參考GPIO小節(jié))。下載完成后打開UARTA0的“RXD”,并將“CH340G_VCC”(即撥碼開關(guān))撥到“ON”。打開串口調(diào)試助手,選擇相應(yīng)的串口號(hào),并且把波特率設(shè)置為115?200?b/s,點(diǎn)擊“打開”。按下板子上的復(fù)位鍵,可看到串口助手打印如圖2.1-91所示的信息。由此可見,CC3200已經(jīng)連接上了指定的路由器,并通過UDP發(fā)送了一段消息。此時(shí)網(wǎng)絡(luò)調(diào)試助手也收到CC3200發(fā)來的信息,并自動(dòng)獲取IP等信息,如圖2.1-92所示。在網(wǎng)絡(luò)調(diào)試助手中輸入一串信息,點(diǎn)擊“發(fā)送”,如圖2.1-93所示。此時(shí),串口調(diào)試助手也把CC3200收到的信息打印出來,并發(fā)送一串新的信息,如圖2.1-94所示。2.1.8WiFi-TCP網(wǎng)絡(luò)通信傳輸控制協(xié)議(TransmissionControlProtocol,TCP)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。TCP與UDP的主要區(qū)別如表2.1-69所示。此外,TCP與UDP的組成結(jié)構(gòu)也不一樣,其中TCP的組成結(jié)構(gòu)如表2.1-70所示。打開Tcp_Socket_Demo,如代碼清單2.1-16所示為main函數(shù)。與WiFi-UDP小節(jié)類似,通過ConfigureSimpleLinkToDefaultState()配置CC3200為STA模式,然后再通過WlanConnect()接入到Common.h中定義的路由器,如代碼清單2.1-17所示。最后,通過BsdTcpClient()函數(shù)向TCP服務(wù)器發(fā)送信息及接收服務(wù)器端發(fā)來的信息。打開網(wǎng)絡(luò)調(diào)試助手,然后點(diǎn)擊“打開”,設(shè)置協(xié)議類型為“TCPServer”,點(diǎn)擊“打開”。把網(wǎng)絡(luò)調(diào)試助手的“本地主機(jī)地址”和“本地主機(jī)端口”填寫到程序中定義IP及端口號(hào)處,如代碼清單2.1-18所示(注意IP要為16進(jìn)制)。圖2.1-95所示為網(wǎng)絡(luò)調(diào)試助手打開時(shí)的界面。編譯代碼,打開UniFlash,下載bin文件到板子上(下載方法參考GPIO小節(jié))。下載完成后打開UARTA0的“RXD”,并將“CH340G_VCC”(即撥碼開關(guān))撥到“ON”。打開串口調(diào)試助手,選擇相應(yīng)的串口號(hào),并且把波特率設(shè)置為115?200?b/s,點(diǎn)擊“打開”。按下板子上的復(fù)位鍵,可看到串口助手打印如圖2.1-96所示的信息。由此可見,CC3200已經(jīng)連接到指定的路由器上,并通過TCP發(fā)送了一段消息。此刻網(wǎng)絡(luò)調(diào)試助手也收到CC3200發(fā)來的信息,并自動(dòng)獲取到IP等信息,如圖2.1-97所示。在網(wǎng)絡(luò)調(diào)試助手中輸入一串信息,點(diǎn)擊“發(fā)送”,如圖2.1-98所示。此時(shí),串口調(diào)試助手也把CC3200收到的信息打印出來,并且發(fā)送一串新的信息,如圖2.1-99所示。2.2軟件開發(fā)基礎(chǔ)2.2.1Java簡介1.?Java的概念Java是一種跨平臺(tái)的、高級(jí)的、面向?qū)ο蟮某绦蛟O(shè)計(jì)語言。2.?JVM(JavaVirtualMachine,Java虛擬機(jī))JVM(JavaVirtualMachine,Java虛擬機(jī))是Java程序跨平臺(tái)的關(guān)鍵,不同的平臺(tái)有不同的JVM,而Java字節(jié)碼不包含任何與平臺(tái)相關(guān)的信息,不直接與平臺(tái)交互,而是通過JVM間接地與平臺(tái)交互。應(yīng)用程序在執(zhí)行時(shí)JVM加載字節(jié)碼,將字節(jié)碼解釋成特定平臺(tái)的機(jī)器碼,讓平臺(tái)執(zhí)行。任何一個(gè)應(yīng)用程序都必須轉(zhuǎn)化為機(jī)器碼,才能與計(jì)算機(jī)進(jìn)行交互。如果機(jī)器碼的來源依賴于具體的平臺(tái),那么這個(gè)應(yīng)用程序就不能跨平臺(tái)。而在Java應(yīng)用程序運(yùn)行時(shí)機(jī)器碼由Java體系的一部分JVM提供,不受平臺(tái)的限制,故而實(shí)現(xiàn)了跨平臺(tái)。3.?Java程序運(yùn)行過程程序員編寫的源碼經(jīng)編譯器編譯轉(zhuǎn)化為字節(jié)碼,生成的字節(jié)碼被加載到JVM,由JVM解釋成機(jī)器碼,并在計(jì)算機(jī)上運(yùn)行,如圖2.2-1所示。4.?Java特性Java的主要特性有:(1)簡單:Java語言是從C++?發(fā)展起來的,取消了C++?中復(fù)雜而難以掌握的部分,如指針。(2)面向?qū)ο螅篔ava語言的基礎(chǔ)是Java將一切問題都看作對(duì)象與對(duì)象之間的交互,將對(duì)象抽象成方法與屬性的集合。(3)分布性:包含操作分布性與數(shù)據(jù)分布性兩方面。操作分布性是指由多個(gè)主機(jī)共同完成一項(xiàng)功能,而數(shù)據(jù)分布性則是指分布在多臺(tái)主機(jī)上的數(shù)據(jù)被當(dāng)作一個(gè)完成的整體處理。(4)跨平臺(tái):Java語言編寫的應(yīng)用程序不受平臺(tái)限制,可以由一種平臺(tái)遷移到另一種平臺(tái)。(5)解釋型:使用Java語言編寫的源碼被轉(zhuǎn)化為字節(jié)碼,而字節(jié)碼只有被JVM解釋成機(jī)器碼才能被計(jì)算機(jī)執(zhí)行。(6)??安全性:Java語言的底層設(shè)計(jì)可以有效地避免非法操作。(7)健壯性:Java提供了許多機(jī)制來防止運(yùn)行時(shí)出現(xiàn)的嚴(yán)重錯(cuò)誤,如編譯時(shí)類型檢查、異常處理。(8)多線程:Java支持多線程,允許進(jìn)程內(nèi)部多個(gè)線程同時(shí)工作。5.?Java中的一些基本概念(1)類(class):代表了一些具有某些共同特征的對(duì)象的抽象。(2)屬性(特征)的定義格式:訪問權(quán)限類型屬性名。(3)方法(行為)的定義格式:訪問權(quán)限返回類型方法名(參數(shù)列表){}。(4)創(chuàng)建對(duì)象的格式:類名對(duì)象名?=?new類名()。(5)調(diào)用屬性:對(duì)象名.屬性名。(6)調(diào)用方法:對(duì)象名.方法名(參數(shù))。(7)包(package):代表類的存放路徑。(8)引入(import):有一些類的功能需要用到其他類,就需要使用import將其他類引入進(jìn)來。(9)項(xiàng)目(project):可以理解為很多類的一個(gè)集合,共同對(duì)外提供一個(gè)或多個(gè)完整的功能。示例代碼段見代碼清單2.2-1所示。編寫第一個(gè)Java程序時(shí),首先打開Eclipse(如果出現(xiàn)歡迎頁面,則關(guān)掉此頁面),單擊右上角File-new-JavaProject,進(jìn)入新建項(xiàng)目對(duì)話框,填寫項(xiàng)目名稱,選擇運(yùn)行環(huán)境,然后點(diǎn)擊“完成”,這樣一個(gè)Java項(xiàng)目就創(chuàng)建好了,如圖2.2-2所示。這是創(chuàng)建好的項(xiàng)目目錄結(jié)構(gòu),上面的JRESystemLibrary里存放的是程序運(yùn)行所必需依賴的環(huán)境(即所安裝的JRE),不必去管它。下面的src目錄就是我們真正編寫自己代碼的地方,如圖2.2-3所示。鼠標(biāo)右鍵單擊src-New-Class,進(jìn)入新建Java類對(duì)話框,填寫好包名(也可不填)和類名,點(diǎn)擊“完成”,這樣一個(gè)Java類就新建好了,如圖2.2-4所示。現(xiàn)在,我們就要開始寫自己的代碼了。程序要想運(yùn)行必須要有一個(gè)入口方法main,我們就來寫一個(gè)main方法。我們的目的只是在eclipse上成功運(yùn)行一個(gè)Java程序,那么第一個(gè)Java程序就在控制臺(tái)輸入“Hello,World!”。需要書寫的main方法代碼,如代碼清單2.2-2所示。運(yùn)行結(jié)果,如圖2.2-5所示。Gradle是一個(gè)基于ApacheAnt和ApacheMavenJava的項(xiàng)目管理工具,JDK提供給我們的一些原生的基礎(chǔ)類庫,其功能簡單、有限。如果我們使用這些基礎(chǔ)類庫去開發(fā)一些功能復(fù)雜的應(yīng)用,將會(huì)非常費(fèi)時(shí)、費(fèi)力,不過好在我們可以通過依賴第三方開發(fā)的jar包來使用第三方開發(fā)好的功能。一個(gè)大型的項(xiàng)目可以引用到多個(gè)jar包,各個(gè)jar包之間又有可能存在著互相依賴。由于它們之間的關(guān)系錯(cuò)綜復(fù)雜,所以我們使用了項(xiàng)目自動(dòng)化構(gòu)建工具Gradle來管理項(xiàng)目,它會(huì)自動(dòng)幫助我們處理這些依賴關(guān)系,并節(jié)省大量時(shí)間。Gradle的項(xiàng)目自動(dòng)化建構(gòu)工具,是使用一種基于Groovy的特定領(lǐng)域語言(DSL)來聲明項(xiàng)目設(shè)置,拋棄了基于XML的各種繁瑣配置。以面向Java應(yīng)用為主,當(dāng)前其支持的語言限于Java、Groovy和Scala,計(jì)劃未來將支持更多的語言。Gradle的主要功能如下:①按約定聲明構(gòu)建和建設(shè);②強(qiáng)大地支持多工程的構(gòu)建;③強(qiáng)大的依賴管理(基于ApacheIvy),提供最大的便利去構(gòu)建工程;④全面支持已有的Maven或Ivy倉庫的基礎(chǔ)建設(shè);⑤在不需要遠(yuǎn)程倉庫、pom.xml和ivy配置文件的前提下支持傳遞性依賴管理;⑥基于Groovy腳本構(gòu)建,其build腳本使用Groovy語言編寫;⑦具有廣泛的領(lǐng)域模型支持構(gòu)建;⑧深度API;⑨易遷移。自由和開放源碼,Gradle是一個(gè)開源項(xiàng)目,基于ASL許可。本書涉及的源碼大多數(shù)都是Gradle項(xiàng)目,需要按照以下步驟將項(xiàng)目導(dǎo)入eclipse中。下面以geek_intelligent項(xiàng)目為例加以說明。(1)打開eclipse,鼠標(biāo)右鍵單擊左邊欄空白區(qū)域,選擇“Import”,彈出導(dǎo)入項(xiàng)目對(duì)話框,然后把默認(rèn)的勾選去掉,點(diǎn)擊“Next”,如圖2.2-6所示。(2)選擇項(xiàng)目存在的文件夾,點(diǎn)擊“Finish”,如圖2.2-7所示。eclipse右下角會(huì)提示正在導(dǎo)入,導(dǎo)入完成后我們會(huì)發(fā)現(xiàn)eclipse中多了一個(gè)項(xiàng)目,這是新項(xiàng)目的目錄結(jié)構(gòu)。(3)如果在打開Java文件中發(fā)現(xiàn)里面的中文是亂碼的話,就需要更改項(xiàng)目的編碼集。鼠標(biāo)右鍵單擊項(xiàng)目→Properties,彈出項(xiàng)目屬性對(duì)話框,點(diǎn)擊“Resource”,“Textfileencoding”,選擇“Other”,下拉框選擇“UTF-8”,點(diǎn)擊“ApplyandClose”,現(xiàn)在中文就能正常顯示,如圖2.2-9所示。2.2.2網(wǎng)絡(luò)協(xié)議基礎(chǔ)網(wǎng)絡(luò)協(xié)議是計(jì)算機(jī)網(wǎng)絡(luò)中進(jìn)行數(shù)據(jù)交換而建立的規(guī)則、標(biāo)準(zhǔn)或約定的集合,計(jì)算機(jī)之間想要交換數(shù)據(jù)就必須遵守相同的協(xié)議。而在網(wǎng)絡(luò)中為了完成通信,必須使用多層上的多種協(xié)議。這些協(xié)議按照層次順序組合在一起,構(gòu)成了協(xié)議棧(ProtocolStack),也稱為協(xié)議族(ProtocolSuite)。目前國際互聯(lián)網(wǎng)遵循的是TCP/IP協(xié)議組。TCP/IP是個(gè)協(xié)議組,可分為四個(gè)層次,從下到上依次是鏈路層(網(wǎng)絡(luò)接口層)、網(wǎng)絡(luò)層(互聯(lián)網(wǎng)層)、運(yùn)輸層(傳輸層)和應(yīng)用層。鏈路層有ARP、RARP、PPP等協(xié)議,網(wǎng)絡(luò)層有IP、ICMP、ARP、RARP、BOOTP等協(xié)議,運(yùn)輸層有TCP與UDP等協(xié)議,應(yīng)用層有FTP、HTTP、TELNET、SMTP、DNS等協(xié)議,如圖2.2-10所示。下面重點(diǎn)介紹我們最常接觸到的幾種通信協(xié)議:HTTP、TCP與UDP協(xié)議。1.HTTP協(xié)議HTTP(HyperTextTransferProtocol,超文本傳輸協(xié)議)是一種建立在請(qǐng)求/響應(yīng)模型上的通信協(xié)議。首
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園元旦活動(dòng)計(jì)劃8篇
- 2024年版企業(yè)勞動(dòng)協(xié)議參考文本版B版
- 2022幼兒手工教案
- 小區(qū)物業(yè)工作計(jì)劃
- 2024-2030年中國酚醛樹脂涂料行業(yè)發(fā)展運(yùn)行現(xiàn)狀及投資潛力預(yù)測(cè)報(bào)告
- 半導(dǎo)體激光治療儀項(xiàng)目可行性分析報(bào)告
- 大班健康活動(dòng)教案四篇
- 大學(xué)班主任工作計(jì)劃
- 美術(shù)教師個(gè)人工作總結(jié)5篇
- 醫(yī)學(xué)類實(shí)習(xí)報(bào)告模板九篇
- 學(xué)前兒童家庭與社區(qū)教育學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 網(wǎng)絡(luò)安全產(chǎn)品質(zhì)保與售后方案
- 2024-2025學(xué)年河北省高三上學(xué)期省級(jí)聯(lián)測(cè)政治試題及答案
- 貴州省貴陽市2023-2024學(xué)年高一上學(xué)期期末考試 物理 含解析
- 幼兒園班級(jí)管理中的沖突解決策略研究
- 【7上英YL】蕪湖市2023-2024學(xué)年七年級(jí)上學(xué)期英語期中素質(zhì)教育評(píng)估試卷
- 2024年度中國鈉離子電池報(bào)告
- 2024年問政山東拆遷協(xié)議書模板
- 浪潮iqt在線測(cè)評(píng)題及答案
- 山東省青島市2023-2024學(xué)年高一年級(jí)上冊(cè)1月期末選科測(cè)試 生物 含解析
- 電工技術(shù)(第3版)表格式教案教學(xué)詳案設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論