人工智能(AI)識別系統(tǒng)開發(fā)實戰(zhàn) 課件 第1-3章 開發(fā)準備、開發(fā)基礎、AI語音識別系統(tǒng)開發(fā)實戰(zhàn)_第1頁
人工智能(AI)識別系統(tǒng)開發(fā)實戰(zhàn) 課件 第1-3章 開發(fā)準備、開發(fā)基礎、AI語音識別系統(tǒng)開發(fā)實戰(zhàn)_第2頁
人工智能(AI)識別系統(tǒng)開發(fā)實戰(zhàn) 課件 第1-3章 開發(fā)準備、開發(fā)基礎、AI語音識別系統(tǒng)開發(fā)實戰(zhàn)_第3頁
人工智能(AI)識別系統(tǒng)開發(fā)實戰(zhàn) 課件 第1-3章 開發(fā)準備、開發(fā)基礎、AI語音識別系統(tǒng)開發(fā)實戰(zhàn)_第4頁
人工智能(AI)識別系統(tǒng)開發(fā)實戰(zhàn) 課件 第1-3章 開發(fā)準備、開發(fā)基礎、AI語音識別系統(tǒng)開發(fā)實戰(zhàn)_第5頁
已閱讀5頁,還剩210頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1.1人工智能(AI)簡介1.2AI語音及人臉識別的開發(fā)套件1.3開發(fā)環(huán)境的搭建1.1人工智能(AI)簡介人工智能(ArtificialIntelligence,AI)作為計算機科學的一個分支,它試圖了解智能的實質(zhì),并生產(chǎn)出一種新的、能以與人類智能相似的方式做出反應的智能機器。該領域的研究包括機器人、語音識別、圖像識別、自然語言處理和專家系統(tǒng)等。人工智能自誕生以來,隨著理論和技術的日益成熟,應用領域也在不斷擴大。人工智能可以實現(xiàn)對人的意識和思維信息過程進行模擬。圖1.1-1所示為人工智能技術涉及的領域。1.2AI語音及人臉識別的開發(fā)套件對于AI的開發(fā),其中最常見的就是圖像和語音識別。構(gòu)成圖像和語音識別需要配合軟件和硬件。AI語音及人臉識別功能是基于同一套硬件底板完成的:當做AI語音識別功能實驗時,外接語音識別小板卡;當做AI人臉識別功能實驗時,外接攝像頭小板卡。圖1.2-1所示為AI語音及人臉識別開發(fā)套件的底板。圖1.2-1中1為攝像頭模組接口,可用于AI人臉識別實驗;2為單總線接口,可用于掛載單總線設備;3為語音板卡插槽,可用于AI語音識別實驗;4為OLED接口,可接市面上通用的OLED;5為SD卡插槽,可用于存儲數(shù)據(jù);6為MPU6050接口;7為LED+按鍵部分,包括三個LED和兩個按鍵,其中LED由三個NPN型三極管隔離開來,當GPIO端口向三極管的基極輸出一個高電平時LED便會被點亮。AI語音及人臉識別開發(fā)板采用的是經(jīng)典的“底板+核心板”形式。底板位置8處為核心板的插槽,插槽的兩端為CC3200所有的GPIO口引出,這樣一來可以大大地方便用戶進行拓展開發(fā);同樣,為了更加便于用戶開發(fā)調(diào)試,底板位置9處還預留了TI(TexasInstruments,德州儀器)官方仿真調(diào)試器TIStellaris的接口,便于用戶使用TIStellaris進行固件的下載、燒寫或程序的調(diào)試等。開發(fā)者在調(diào)試時必不可少的環(huán)節(jié)是串口打印,位置10是一路USB接口,該接口通過USB轉(zhuǎn)TTL芯片CH340G,與CC3200的串口相連接。此外,考慮到下載啟動的方式需要切換及端口需要復用,在底板上加入了4個撥碼開關。底板位置11處的撥碼開關,為切換調(diào)試下載的方式;底板位置12處的撥碼開關,為切換CC3200的啟動方式;底板位置13處的撥碼開關,為USB連接的串口選擇;底板位置14處的撥碼開關,可作為板載資源切換開關。1.3開發(fā)環(huán)境的搭建1.3.1IAR安裝開發(fā)每一款芯片之前都需要安裝與之相匹配的開發(fā)環(huán)境。常見的有兩種,一種是使用TI官方的開發(fā)環(huán)境CodeComposerStudio,另一種是使用IAR。IAR是一款著名的C編譯器,支持眾多知名半導體公司的微處理器。IAR針對不同的硬件有多種版本,如IARforARM、IARforstm8等。由于CC3200屬于ARMCortexM4內(nèi)核,這里選擇IARforARM。IAR的安裝步驟如下:(1)雙擊打開exe文件,出現(xiàn)IAR安裝選擇界面。(2)首先,點擊“InstallIAREmbeddedWorkbench”,開始開發(fā)環(huán)境的安裝。接著,進入安裝向?qū)Ы缑妗?3)點擊“Next”,進入許可協(xié)議界面。選擇“Iacceptthetermsofthelicenseagreement”,然后點擊“Next”。(4)進入安裝路徑選擇界面,打開“Change”,選擇一個安裝路徑(即英文路徑)。在這里安裝到D盤下新建的“IarforArm”。(5)點擊“Next”,進入驅(qū)動選擇安裝界面,如圖1.3-6所示。因為日后可能會用到各種不同的調(diào)試接口,所以這里默認選擇全部。(6)在此界面內(nèi)點擊“Next”,進入IAR名稱設置界面,默認選擇即可。(7)再次點擊“Next”,進入正式安裝界面。點擊“Install”,開始安裝。(8)等待進度條示意完成安裝,其間會跳出USB驅(qū)動安裝界面,選擇“是”即可,如圖1.3-9所示。(9)而后會安裝USB的驅(qū)動,待USB驅(qū)動安裝完成后,表明已完成了整個IARforARM的安裝,如圖1.3-10所示。(10)此時,去掉兩個選項前的“√”,點擊“Finish”,彈出“P&E設備驅(qū)動安裝”,點擊“Iagree”。之后進入路徑選擇,驅(qū)動的路徑統(tǒng)一選擇默認,點擊“Install”,接下來的彈出窗口均為默認即可。至此就完成了IARforARM的安裝,在Windows操作系統(tǒng)的“開始”界面下可以找到“IAREmbeddedWorkbench”,如圖1.3-11所示。1.3.2CCSUniFlash安裝CCSUniFlash是美國德州儀器公司(TI)官方推出的一款下載軟件,用于CC3200固件的燒寫。CCSUniFlash的安裝步驟如下:(1)雙擊后打開下載好的離線安裝包,進入安裝界面。(2)點擊“Next”,進入許可協(xié)議界面,選擇“Iaccepttheagreement”。點擊“Next”,進入路徑選擇界面,選擇默認即可。(3)點擊“Next”,進入組件選擇界面后再次點擊“Next”,進入調(diào)試接口及其驅(qū)動選擇安裝界面。在此全部勾選,以免后續(xù)用到,如圖1.3-16所示。(4)連續(xù)點擊“Next”,直到出現(xiàn)如圖1.3-17所示的安裝完成界面。勾選前兩項,即在“開始”菜單中生成啟動圖標和在桌面上生成快捷方式,至此完成CCSUniFlash的安裝。1.3.3CC3200SDK安裝CC3200SDK是TI官方提供的軟件開發(fā)工具包,里面集成了一些編程所需的庫文件、內(nèi)核文件、操作系統(tǒng)源碼及一些程序例子等,借助SDK可以大大地增加CC3200項目開發(fā)的效率。CC3200SDK的安裝步驟如下:(1)雙擊SDK1.2.0安裝包,打開exe文件,開始安裝SDK。(2)點擊“Next”,進入CC3200SDK1.2.0的許可條例界面,選擇“Iaccepttheagreement”。(3)點擊“Next”,進入安裝路徑選擇界面,選擇默認路徑即可。連續(xù)點擊“Next”,直至進入安裝界面。(4)等待進度條示意完成,期間會跳出FTDI驅(qū)動安裝界面,此時選擇“是”即可,如圖1.3-23所示。(5)安裝完成后的界面如圖1.3-24所示。(6)點擊“Finish”,完成安裝。打開“我的電腦”,在C盤的根目錄下找到TI文件夾,再在TI文件夾里找到CC3200SDK_1.2.0,繼續(xù)打開此文件夾,可以看到cc3200-sdk文件夾,其中可見CC3200的核心部分,如圖1.3-25所示。(7)此時,僅僅是完成了SDK1.2.0的部分安裝,在官網(wǎng)SDK1.2.0的下載地址處還有一個ProvisioningAdd-OnforCC3200SDK。這個包是SDK1.2.0的附加包,其中包含了Provisioninglib等重要文件,如圖1.3-26所示,也是需要安裝的。值得注意的是,目前只有SDK1.2.0版本需要安裝ProvisioningAdd-OnforCC3200SDK。(8)下載如圖1.3-27所示的安裝包,雙擊,打開exe文件,開始安裝。點擊“Next”,繼續(xù)安裝。(11)如圖1.3-29所示,進入許可條例界面,選擇“Iaccepttheagreement”,點擊“Next”。選擇默認路徑。連續(xù)點擊“Next”,進入正式安裝,等待進度條示意完成即可,最后點擊“Finish”,完成安裝。1.3.4ServicePack安裝ServicePack是TI提供的針對CC3200的固件包,里面提供了對協(xié)議棧加密等的支持。如果需要用到WiFi功能,那就必須先向CC3200燒錄ServicePack,同時需要十分值得注意的是,ServicePack是與SDK搭配的,即不同的SDK版本的程序需要燒錄不同版本的ServicePack,與SDK搭配的ServicePack是放在一起下載的。ServicePack的安裝步驟如下:(1)雙擊打開exe文件,進入安裝界面。點擊“Next”,開始安裝。在許可條例界面,選擇“Iaccepttheagreement”,然后點擊“Next”進入安裝路徑的選擇。選擇默認路徑,點擊“Next”,進入正式安裝,待進度條示意完成。如圖1.3-33所示,不勾選“ViewReadmeFile”,點擊“Finish”,完成安裝。(3)此時,打開ServicePack的安裝文件夾,可以看到servicepack的bin文件,如圖1.3-34所示。1.3.5TIPinMuxTool安裝TIPinMuxTool是TI官方提供的一款圖形界面代碼生成器,利用TIPinMuxTool可以快速生成CC3200外設資源的底層驅(qū)動,大大縮短了開發(fā)周期。TIPinMuxTool的安裝步驟如下:(1)雙擊exe文件進入開始安裝界面,點擊“Next”,進入許可條例界面。選擇“Iaccepttheagreement”,點擊“Next”。(2)進入安裝路徑選擇界面,選擇默認路徑,連續(xù)點擊“Next”,進入正式安裝,待安裝進度條示意完成即可。如圖1.3-37所示為安裝完成界面,選擇在桌面生成一個快捷方式,點擊“Finish”,完成安裝。1.3.6JDK安裝JDK(JavaDevelopmentKit)是SunMicrosystems針對Java開發(fā)者推出的一款產(chǎn)品。它是由一個處于操作系統(tǒng)層之上的運行環(huán)境,開發(fā)者編譯、調(diào)試和運行用Java語言寫的Applet(一種Java開發(fā)的小程序)和應用程序所需的工具組成。想要開發(fā)Java產(chǎn)品,需先安裝JDK,JDK由以下組件構(gòu)成,如圖1.3-38所示。JDK的安裝步驟如下:(1)打開下載好的JDK安裝程序,點擊“下一步”,選定安裝目錄,建議直接使用默認目錄,點擊“下一步”。JDK安裝完成后,繼續(xù)安裝JRE,點擊“下一步”,如圖1.3-43所示。(2)安裝完成后找到指定安裝目錄,如圖1.3-44所示。(3)此時需要配置環(huán)境變量才能夠正常使用,右鍵單擊“我的電腦”,選擇“屬性”,點擊“高級系統(tǒng)設置”。選擇“高級”選項卡,點擊“環(huán)境變量”,如圖1.3-46所示。(4)雙擊“系統(tǒng)變量”中的“Path”,如圖1.3-47所示。(5)選擇“新建”,將安裝JDK和JRE目錄下的bin目錄地址粘貼進去后點擊“確定”,如圖1.3-48所示。(6)打開電腦運行欄,如圖1.3-49所示,輸入“cmd”,按回車鍵,打開DOS系統(tǒng)。輸入“Javac”,如果出現(xiàn)如圖1.3-50所示的界面,則表明運行環(huán)境配置成功。1.3.7Eclipse安裝Eclipse是一個開放源代碼的、基于Java的可擴展開發(fā)平臺。Eclipse既是Java的集成開發(fā)環(huán)境(IDE),也可作為其他開發(fā)語言的集成開發(fā)環(huán)境,如C、C++、PHP和Ruby等。Eclipse附帶了一個標準的插件集,包括Java開發(fā)工具(JDK)。Eclipse的安裝步驟如下:(1)選擇Eclipse版本和操作系統(tǒng)位數(shù),如圖1.3-51所示。(2)點擊“Download”,如圖1.3-52所示。(3)選擇第一個安裝模式,如圖1.3-53所示。(4)選擇默認的安裝目錄,點擊“INSTALL”進行安裝。等待程序安裝完成,如圖1.3-57所示。(5)點擊“LAUNCH”,如圖1.3-58所示。(9)選擇工作空間(即代碼存放目錄),設置為默認目錄,點擊“Launch”。至此,Eclipse安裝成功,如圖1.3-60所示。1.3.8Sokit和Pcm2Wav簡介Sokit是一款小巧的網(wǎng)絡通信調(diào)試工具,集成了TCP協(xié)議、UDP協(xié)議的服務器和客戶端功能,可以模擬客戶端向服務端發(fā)送數(shù)據(jù)。Sokit無需安裝,可以從瘋殼官網(wǎng)直接獲取壓縮包,解壓后打開sokit.exe即可使用。Pcm2Wav是一個將?.pcm格式音頻文件轉(zhuǎn)換為可播放的?.wav格式音頻文件的小程序。Pcm2Wav無需安裝,可以從瘋殼官網(wǎng)直接獲取Pcm2wav.exe文件,直接運行即可。2.1硬件開發(fā)基礎2.2軟件開發(fā)基礎2.1硬件開發(fā)基礎2.1.1CC3200簡介CC3200是TI針對無線連接SimpleLinkWiFi和物聯(lián)網(wǎng)(IOT)解決方案最新推出的一款MCU(微控制單元),同時也是業(yè)界第一個具有內(nèi)置WiFi的MCU。CC3200采用高性能ARMCortex-M4內(nèi)核,主頻為80?MHz,高達256?KB的RAM,64?KB的ROM,用于存放設備初始化固件、BOOTLOADER、外設驅(qū)動庫,如圖2.1-1所示為CC3200芯片。CC3200主要包含MCU、WiFi網(wǎng)絡處理器和電源管理三大部分。圖2.1-2所示為CC3200的內(nèi)部組成結(jié)構(gòu)圖。CC3200包含有豐富的MCU外設資源。例如,27個獨立可編程、可復用的通用輸入輸出接口(GPIO),兩路通用的異步通信收發(fā)器(UART),一路高速串行通信接口(SPI),一路高速I2C接口,一個多通道音頻串行接口(McASP),可支持兩個I2S通道、一個SD/MMC接口、8位并行攝像頭接口、4個通用定時器、16位脈沖寬度調(diào)制(PWM)模式,以及4通道的高達12位模數(shù)轉(zhuǎn)換器(ADC)。CC3200的WiFi網(wǎng)絡處理器可以提供快速、安全的WLAN和因特網(wǎng)連接,其結(jié)構(gòu)如圖2.1-3所示。CC3200的特性如下:①特有的WiFi片上互聯(lián)網(wǎng)(Internet-On-a-Chip);②專用的ARMMCU,完全免除應用MCU的WiFi

和互聯(lián)網(wǎng)協(xié)議處理負擔,WiFi和互聯(lián)網(wǎng)協(xié)議存放于ROM

中;③包含802.11b/g/n射頻、基帶、MAC、WiFi驅(qū)動和Supplicant,內(nèi)置TCP/IP協(xié)議棧;④具有行業(yè)標準BSD套接字應用編程接口(API),同時支持8個TCP或UDP套接字,以及兩個TLS和SSL套接字;⑤強大的加密引擎,可以實現(xiàn)支持256位AES加密,快速、安全的互聯(lián)網(wǎng)連接支持站點(STA)、接入點(AP)和WiFi直連(P2P)模式,WPA2可保障個人和企業(yè)安全性;⑥用于自主和快速WiFi連接的SimpleLink連接管理器;⑦用于簡單、靈活WiFi配置的智能配置(SmartConfig)技術、AP模式和WPS2。2.1.2GPIOGPIO的全稱為GeneralPurposeInputOutput,即通用的輸入輸出,是所有控制器里必備的資源。CC3200的所有數(shù)字引腳和部分模擬引腳,均可作為通用的輸入輸出引腳(GPIO)使用。CC3200將GPIO分為4個組,分別是GPIOA0、GPIOA1、GPIOA2、GPIOA3,每一組GPIO又包含8個引腳。CC3200的引腳分配如表2.1-2所示。根據(jù)功能引腳配置的不同,CC3200最多可以有27個GPIO,且所有的GPIO引腳均具有中斷功能,觸發(fā)的方式支持電平觸發(fā)和邊沿觸發(fā)(上升沿和下降沿)。不僅如此,所有的GPIO都可以用于觸發(fā)DMA,可作為喚醒源。GPIO引腳可編程,可配置為內(nèi)部10?μA的上拉或下拉。驅(qū)動能力可調(diào)節(jié)為2?mA、4?mA、6?mA、8?mA、10?mA、12?mA及14?mA,同樣也支持開漏模式。對GPIO進行操作時,主要需要了解兩大寄存器——GPIODATA寄存器和GPIODIR寄存器。(1)GPIODATA寄存器是數(shù)據(jù)寄存器。在軟件控制模式下,如果對應的引腳通過GPIODIR寄存器配置為輸出模式,則寫到GPIODATA寄存器中的值會被傳到對應引腳輸出。GPIODATA寄存器有256個別名地址,偏移值為0x000~0x3ff。一個不同地址別名可以用來直接讀/寫任何八個信號位的組合。這個特性可以避免讀—改—寫和軟件讀的位掩碼的時間消耗。在該方案中,為了寫GPIODATA寄存器,掩碼中對應于總線中的[9:2]位,必須被置位;否則,在進行寫操作時對應位的值不會被改變。同樣,進行讀操作時也是對應總線中的[9:2]位,在讀取對應位時也必須被置位,否則讀取為0。如果引腳配置為輸出模式,則讀取GPIODATA寄存器,返回最后一次寫入的值;如果配置為輸入模式,則返回對應引腳的值。所有位都可以通過復位清零。如圖2.1-4所示為GPIODATA寄存器。(2)?GPIODIR寄存器是數(shù)據(jù)方向寄存器。在GPIODIR寄存器中,設置一位對應的引腳配置為輸出,清除一位對應的引腳配置為輸入。復位時所有位都清零,也就是說所有的GPIO引腳默認是輸入。如圖2.1-5所示為GPIODIR寄存器。選擇配套的代碼例程,打開GPIO文件夾下的IAR工程,主函數(shù)見代碼清單2.1-1。PinMuxconfig()函數(shù)可由TIPinMuxTools工具生成。打開TIPinMuxTools工具,如圖2.1-6所示。第一步,在Device內(nèi)找到CC3200;第二步,點擊“Start”。如圖2.1-7所示,第一步,點擊“GPIO”處的“添加”,默認是選取全部GPIO;第二步,把“GPIOSignals”前面的鉤去除,不全選;第三步,選擇“GPIO_9”、“GPIO_10”、“GPIO_11”,對應開發(fā)板上的3個LED,驅(qū)動LED需要GPIO輸出;第四步,將3個GPIO的“Output”勾選上。最終完成配置的界面如圖2.1-8所示,在最右邊的GeneratedFiles處,點擊“pin_mux_config.c”和“pin_mux_config.h”圖標,把代碼下載下來并添加到工程中即可。生成好的端口配置函數(shù)如代碼清單2.1-2所示。該函數(shù)主要是對LED對應的端口開啟時鐘、設置方向等。配置好后通過GPIO_IF_LedConfigure()函數(shù)對LED端口進行處理,即將各個LED的端口所對應的端口組及屬于該組中的第幾個IO提取出來,如代碼清單2.1-3所示。完成上述兩步后先關閉所有的LED,然后在一個死循環(huán)內(nèi)執(zhí)行“流水”部分,即按順序以一定的時間間隔開閉LED,如代碼清單2.1-4為“流水”效果實現(xiàn)代碼。編譯程序,生成了相對應的bin文件,下載前先插上仿真調(diào)試器TiStellaris,再將旁邊的撥碼開關“RX”和“TX”撥到“ON”,把啟動方式撥碼選擇為FLASH啟動,即把SOP2撥到“ON”。打開下載工具UniFlash,點擊快速啟動向?qū)е械摹靶履繕伺渲谩?,在彈出的配置對話框中選擇CC3xSerial(UART)Interface,然后點擊“OK”。然后,在COMPort中輸入板子連接的串口號(根據(jù)電腦進行選擇)。初次使用板子時先燒寫SevciePack,否則程序可能無法運行。點擊“SevicePackProgramming”,選擇之前安裝的SevicePack安裝文件夾目錄下的bin文件即可。點擊左側(cè)界面“/sys/mcuimg.bin”,再在右側(cè)Url中選擇剛剛編譯生成的bin文件,然后選中下方的“Erase”和“Update”,如圖2.1-12所示。選擇“CC31xx/CC32xxFlashSetupandControl”,再點擊“Program”進行下載,如圖2.1-13所示。根據(jù)軟件下方的提示,按下復位按鍵就可以看到下載的相關信息。下載完成后如圖2.1-15所示。首先,將下載前改變的撥碼開關撥回原處,再把撥碼開關“D5”“D6”和“D7”分別撥到“ON”,使I/O口與LED建立連接關系,按下復位開關,可以看到3個LED呈“流水”狀閃爍,如圖2.1-16所示。2.1.3定時器CC3200包含的32位用戶可編程通用定時器共有4個(TimerA0~TimerA3),通用定時器可以對定時器輸入引腳的外部事件進行計數(shù)或定時。每個定時器模塊包含的16位定時/計數(shù)器有兩個(TimerA和TimerB),可以作為定時器或事件計數(shù)器獨立工作,也可以作為一個32位定時器工作。通用定時器模塊具有多種操作模式:16位或32位可編程單次定時器;16位或32位可編程周期定時器;16位通用定時器,帶8位預分頻器;16位輸入邊沿計數(shù)或時間捕獲模式,帶8位預分頻器;16位脈沖寬度調(diào)制模式(PWM),帶8位預分頻器和軟件可編程輸入。這類多種操作模式具有以下特性:①向上或向下計數(shù);②16個16位或32位捕捉比較PWM(CCP)引腳;③可確定產(chǎn)生定時器中斷到進入中斷服務程序(ISR)的時間;④可觸發(fā)使用DMA的高效傳輸;⑤系統(tǒng)時鐘運行(80?MHz)。下面介紹與定時器編程相關的常用寄存器。(1)GPTMCFG寄存器主要是配置通用定時器模塊的全局操作,明確通用定時器工作于32位模式還是16位模式下。該寄存器中的值只能是在GPTMCTL寄存器中的TAEN和TBEN兩位被清零時改變。GPTMCFG寄存器如圖2.1-17所示。(2)?GPTMTAMR寄存器配置是基于GPTMCFG寄存器的配置來進行選擇的。在PWM模式中,置位TAAMS位、清除TACMR位和配置TAMR為0x01或者0x02。寄存器如圖2.1-18所示。(3)?GPTMTBMR寄存器控制獨立定時器B的工作模式。當定時器A和定時器B同時使用時,該寄存器被忽略,而是通過GPTMTAMR來控制定時器A和定時器B的工作模式。注意:除了TCACT位外,其他位都必須在GPTMCTL寄存器中的TBEN位清零時進行配置。GPTMTBMR寄存器如圖2.1-19所示。(4)?GPTMCTL寄存器為定時器的控制寄存器,如圖2.1-20所示。(5)?GPTMIMR寄存器可以軟件使能/關閉定時器的控制電平中斷。置位可以打開對應的中斷,清零可以關閉對應的中斷。寄存器如圖2.1-21所示。(6)?GPTMRIS寄存器為中斷源狀態(tài)寄存器,通過該寄存器可以獲取中斷源。GPTMRIS寄存器如圖2.1-22所示。(7)GPTMMIS寄存器為中斷掩碼狀態(tài)寄存器,可以檢測是否產(chǎn)生中斷。如圖2.1-23所示為其寄存器。(8)?GPTMICR寄存器用于清除GPTMRIS和GPTMIS寄存器中的狀態(tài)位,寫入1則清除對應的中斷。GPTMICR寄存器如圖2.1-24所示。(9)當通用定時器被配置為32位模式,GPTMTAILR作為一個32位寄存器(高16位對應與定時器B裝載值寄存器的內(nèi)容)。在16位模式,寄存器的高16位讀取值為0,并且對GPTMTBILR寄存器的狀態(tài)沒有影響。如圖2.1-25所示為其寄存器。(10)當通用定時器配置為32位模式時,GPTMTBILR寄存器中[15:0]位的內(nèi)容被裝載到GPTMTAILR寄存器的高16位。讀取該寄存器,則返回定時器B的當前值,寫操作無效。在16位模式,[15:0]位用于裝載值,[31:16]位保留不使用。如圖2.1-26所示為GPTMTBILR寄存器。(11)當通用定時器被配置為32位模式時,GPTMTAMATCHR作為32位寄存器(高16位對應GPTMTBMATCHR寄存器的內(nèi)容)。在16位模式,寄存器的高16位讀取為0,并且對GPTMTBMATCHR的狀態(tài)沒有影響。如圖2.1-27所示為GPTMTAMATCHR寄存器。(12)當通用定時器配置為32位模式時,GPTMTBMATCHR寄存器的[15:0]位被裝載到寄存器GPTMTAMATCHR寄存器的高16位。讀取該寄存器得到定時器B的當前值,寫操作無效。在16位模式中,[15:0]位用于匹配值,[31:16]位保留不使用。如圖2.1-28所示GPTMTBMATCHR寄存器。(13)GPTMTAPR寄存器通過軟件來擴展獨立定時器的范圍。在單次或者周期減計數(shù)模式,該寄存器作為定時計數(shù)器的預分頻器。如圖2.1-29所示為其寄存器。(14)?GPTMTBPR寄存器通過軟件來擴展獨立定時器的范圍。在單次或者周期減計數(shù)模式,該寄存器作為定時計數(shù)器的預分頻器。如圖2.1-30所示為其寄存器。(15)?GPTMTAPMR寄存器擴展獨立定時器GPTMTAMATCHR的范圍。當寄存器工作于16位模式時,該寄存器表示[23:16]位。如圖2.1-31所示為其寄存器。(16)?GPTMTBPMR寄存器擴展獨立定時器GPTMTAMATCHR的范圍。當寄存器工作于16位模式時,該寄存器表示[23:16]位。如圖2.1-32所示為其寄存器。(17)當定時器配置為32位模式時,GPTMTAR作為32位寄存器使用(高16位對應GPTMTBR寄存器的內(nèi)容)。在16位輸入邊沿計數(shù),輸入邊沿定時和PEM模式,[15:0]位包含計數(shù)器的值,[23:16]位包含預分頻高8位的值。[31:24]位讀取值始終為0??梢宰x取GPTMTAV的[23:16]位來獲取16位模式單次和周期模式的預分頻值。讀取GPTMTAPS寄存器可以獲取定期快照模式下的預分頻值。如圖2.1-33所示為GPTMTAR寄存器。(18)當通用定時器配置為32位模式時,GPTMTBR寄存器的[15:0]位被裝載到GPTMTAR寄存器的高16位。讀取該寄存器發(fā)揮定時器B的當前值。在16位模式,[15:0]位包含計數(shù)器的值,[23:16]位包含在輸入邊沿計數(shù)、邊沿定時和PWM模式下的預分頻。[31:24]位讀取為0。可以通過讀取GPTMTBV寄存器中的[23:16]位可以獲取16位單次和周期模式的預分頻值。讀取GPTMTBPS寄存器可以獲取周期快照模式下的預分頻。如圖2.1-34所示為GPTMTBR寄存器。(19)當定時器配置為32位模式時,GPTMTAV作為32位寄存器(高16位對應GPTMTBV寄存器的內(nèi)容)。在6位模式,[15:0]位包含計數(shù)器的值,[23:16]位包含分頻值。在單次或周期減計數(shù)模式,[23:16]位存儲真實的預分頻值,意味著[15:0]位的值之前,先減[23:16]位的值。[31:24]位讀取始終為0。如圖2.1-35所示為GPTMTAV寄存器。(20)當通用定時器配置為32位模式,GPTMTBV寄存器[15:0]位的值被裝載到GPTMTAV寄存器的高16位。讀取該寄存器,則返回定時器B的當前值。在16位模式,[15:0]位包含計數(shù)器的值,[23:16]位包含當前的預分頻值。在單次或周期模式,[23:16]位為真實的預分頻值,意味著在[15:0]位減數(shù)之前,[23:16]位先進行減數(shù)。[31:24]位讀取值為0。如圖2.1-36所示為GPTMTBV寄存器。(21)GPTMDMAEV寄存器允許軟件使能和關閉定時器DMA觸發(fā)事件。置位則對應的DMA觸發(fā)使能,清零則關閉。如圖2.1-37所示GPTMDMAEV寄存器。本實驗在官方CC3200SDK_1.2.0中timer例程代碼的基礎上修改過來的,用IAR打開Timer_Demo里的工程,編譯下載,從程序可以看到是利用CC3200的定時器TimerA0和TimerA1去控制GPIO_9和GPIO_11亮滅時間。如清單2.1-5所示為該工程的main函數(shù)。在main函數(shù)中PinMuxConfig()初始化了GPIO_9和GPIO_11,通過Timer_IF_Init()初始化了TimerA0和TimerA1,頻率和系統(tǒng)時鐘一致(不分頻),在Timer_IF_Start()函數(shù)中對TimerA0裝載了500這一參數(shù),TimerA1裝載了1000,實際上就是TimerA0定時500?ms進入中斷函數(shù)TimerBaseIntHandler()、TimerA1定時1000?ms進入中斷函數(shù)TimerRefIntHandler(),進入中斷后對I/O口輸出狀態(tài)進行反轉(zhuǎn)。打開UniFlash下載bin文件到板子上(參考GPIO小節(jié)),把D5、D7撥碼開關撥到ON(程序中使用的是D5、D7),按下復位鍵,可以看到D5和D7交替閃爍,如圖2.1-38為實驗現(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ù)線外,還有時鐘線。在本次實驗中我們使用的是UART,也就是異步串行接口。UART的相關標準規(guī)定了接口的機械特性、電氣特性和功能特性等,其中電氣特性標準包括RS-232C、RS-422、RS-423和RS-485等。RS-232C是最常用的串行通信標準,也是數(shù)據(jù)終端設備(DTE)和數(shù)據(jù)通信設備(DCE)之間串行二進制數(shù)據(jù)交換接口技術標準,其中DTE包括微機、微控制器和打印機等,DCE包括調(diào)制解調(diào)器MODEM、GSM模塊和Wi-Fi模塊燈。RS-232C的機械特性規(guī)定使用25針D型連接器,后來被簡化為9針D型連接器。RS-232C的電氣特性采用的是負邏輯,即邏輯“1”的電平低于?-3?V,邏輯“0”的電平高于?+3?V。與之相反的是,串口采用的TTL電平是正邏輯不同。邏輯“1”表示高電平,邏輯“0”表示低電平,因此通過RS-232C和TTL器件通信時必須進行電平轉(zhuǎn)換。目前,微控制器的UART接口采用的是TTL正邏輯,與TTL器件相連接時不需要電平轉(zhuǎn)換,而與采用負邏輯的計算機相連接時需要進行電平轉(zhuǎn)換(我們一般使用USB轉(zhuǎn)串模塊)。CC3200包含兩個可編程UART接口(UARTA0~1),主要特性如下:①作為可編程的波特率發(fā)生器,允許速度高達3?Mb/s;②獨立的16×8發(fā)送和接口FIFO,減輕CPU中斷處理負載;③可編程FIFO長度,包括提供傳統(tǒng)雙緩沖接口的單字節(jié)操作;④FIFO觸發(fā)閾值包括1/8、1/4、1/2、3/4和7/8;⑤標準的異步通信起始、停止和奇、偶校驗位。CC3200的UART接口具有以下可編程串行接口特性:①可編程的5、6、7或8位數(shù)據(jù);②奇、偶或無校驗生成/檢測;③一或兩個停止位生成;④支持RTS和CTS調(diào)制解調(diào)器握手;⑤標準的FIFO閾值中斷和傳輸結(jié)束中斷。CC3200的UART支持DMA,使用DMA可實現(xiàn)高效傳輸。UART具有單獨的DMA發(fā)送和接收通道,支持FIFO中有數(shù)據(jù)的單個請求接收和可編程FIFO閾值的突發(fā)請求接收,以及FIFO中有空間的單個請求發(fā)送和可編程FIFO閾值的突發(fā)請求發(fā)送。UARTDR為數(shù)據(jù)寄存器(也是FIFO的接口)。在發(fā)送數(shù)據(jù)時如果FIFO使能了,則寫入該寄存器的數(shù)據(jù)會發(fā)送到FIFO中。如果FIFO關閉,則數(shù)據(jù)會被存儲在發(fā)送保持寄存器中(發(fā)送FIFO中的最低一個字),寫該寄存器意味著通過串口發(fā)送。在接收數(shù)據(jù)時如果FIFO使能了,數(shù)據(jù)字節(jié)和4位狀態(tài)位被發(fā)送到12位寬的接收FIFO中。如果FIFO關閉,則數(shù)據(jù)字節(jié)和狀態(tài)被存儲在接收保持寄存器中(接收FIFO中的最低一個字),可以通過讀取該寄存器來獲取接收數(shù)據(jù)。圖2.1-41所示為UARTDR寄存器。UARTRSR_UARTECR是接收狀態(tài)寄存器/錯誤清除寄存器。除UARTDR寄存器外,接收的狀態(tài)位也可以通過UARTRSR寄存器獲取。如果從該寄存器讀取狀態(tài)信息,則狀態(tài)信息對應于在讀取UARTRSR寄存器之前的UARTDR的狀態(tài)信息。當有溢出條件發(fā)生時,狀態(tài)位中的溢出標志位會立刻被置位。UARTRSR寄存器不能被寫,寫任何值到寄存器UARTECR中將會清除幀、校驗、打斷和溢出錯誤。復位會清零所有的位。圖2.1-42所示為UARTRSR_UARTECR寄存器。UARTFR為標志寄存器,在復位后TXFF、RXFF和BUSY標志位為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ù)部分,復位之后所有的位被清零。最小值為1,UARTIBRD為0,UARTFBRD寄存器無效。當改變UARTIBRD寄存器時,只有在當前的字節(jié)傳輸完成之后才生效。波特率除數(shù)的任何改變都必須在寫UARTLCRH寄存器之后。UARTFBRD寄存器是波特率除數(shù)的小數(shù)部分,復位之后所有的位被清零。當修改UARTFBRD寄存器的值時,只有在當前字節(jié)發(fā)送/接收完成之后才會有效。波特率除數(shù)的任何改變都必須在寫UARTLCRH寄存器之后。圖2.1-44所示為UARTFBRD寄存器。UARTLCRH寄存器是線控制寄存器,可控制串口的數(shù)據(jù)長度、校驗和停止位的選擇。當更新波特率除數(shù)寄存器時,必須也要重寫該寄存器,是因為波特率除數(shù)寄存器的寫選通信號與該寄存器是連接在一起的。圖2.1-45所示為UARTLCRH寄存器UARTCTL是控制寄存器,在復位后除發(fā)送和接收使能位外,其他位都被清零。UARTEN位用于使能UART模塊,在配置串口模塊時必須將該位清零。如果在串口進行發(fā)送或者接收的操作時關閉串口模塊功能,則在完成當前發(fā)送或者接收操作之后才關閉。圖2.1-46所示為UARTCTL寄存器。UARTIFLS是選擇FIFO產(chǎn)生中斷閾值的寄存器,可以用其來定義FIFO的閾值,同時UARTRIS寄存器中的TXRIS和RXRIS位被觸發(fā)。產(chǎn)生中斷是基于一個發(fā)送操作超過閾值而不是等于閾值。也就是說,F(xiàn)IFO中的數(shù)據(jù)超過規(guī)定的閾值之后才會產(chǎn)生中斷。例如,如果接收的觸發(fā)閾值設置為一般(8字節(jié)),那么在串口模塊接收到第9個字節(jié)時才會產(chǎn)生中斷。因為在復位之后TXIFLSEL和RXIFLSEL位被配置,所以FIFO在接收一半時觸發(fā)中斷。圖2.1-47所示為UARTRIS寄存器。UARTIM是中斷掩碼置位/清零寄存器,讀取該寄存器則獲得當前中斷的掩碼值。進行置位時,對應的中斷將被發(fā)送到中斷控制器;清零操作時,則對應的中斷不會被發(fā)送到中斷控制器。圖2.1-48所示為UARTIM寄存器。UARTRIS是源中斷狀態(tài)寄存器,可以讀取到當前中斷源,寫操作無效。圖2.1-49所示為UARTRIS寄存器。UARTMIS是中斷掩碼狀態(tài)寄存器,可獲取對應中斷的掩碼值,寫操作無效。圖2.1-50所示為UARTMIS寄存器。UARTICR是中斷清零寄存器,置位則對應的中斷被清除(清除中斷源寄存器和中斷掩碼寄存器中對應的位),清零操作無效。圖2.1-51所示為UARTICR寄存器。UARTDMACTL是DMA控制寄存器。圖2.1-52所示為UARTDMACTL寄存器。打開CC3200_Uart_Demo文件夾里的工程,將CC3200的UARTA0的波特率設置為115?200?b/s,8位數(shù)據(jù)位,1個停止位,無奇偶校驗位,代碼清單如2.1-6所示。當串口接收到數(shù)據(jù)后,把接收到的數(shù)據(jù)再通過串口發(fā)送出去,編譯工程,打開UniFlash,把bin文件下載到CC3200板子上(具體步驟請參考GPIO小節(jié))。把“CH340G_VCC”和串口選擇的第一個“RXD”和第二個“TXD”撥碼開關均撥到“ON”。插上USB數(shù)據(jù)線接到電腦,打開串口助手,選擇串口號,波特率設置為115?200?b/s,按下板子的復位可見串口打印,如圖2.1-53所示。在發(fā)送框內(nèi)輸入瘋殼的網(wǎng)址,點擊“發(fā)送”,串口助手收到CC3200的回傳,如圖2.1-54所示。2.1.5外部中斷接口數(shù)據(jù)傳送控制方式有查詢、中斷和DMA等,其中中斷是重要的接口數(shù)據(jù)傳送控制方式。中斷控制分為全局和局部兩級,前者由NVIC控制,后者由外設控制。嵌套向量中斷控制器NVIC支持多個內(nèi)部異常和240個外部中斷。從廣義上講,異常和中斷都是暫停正在執(zhí)行的程序,轉(zhuǎn)去執(zhí)行異?;蛑袛嗵幚沓绦颍缓蠓祷卦瓉淼某绦蚶^續(xù)執(zhí)行。從狹義上講,異常由內(nèi)部事件引起,而中斷由外部硬件產(chǎn)生。異常和中斷的處理與子程序調(diào)用有相似之處,但也有下列本質(zhì)區(qū)別:①何時調(diào)用子程序是確定的,而何時產(chǎn)生異常和中斷是不確定的。子程序的起始地址由調(diào)用程序給出,而異常和中斷程序的起始地址則存放在地址表中。②子程序的執(zhí)行一般是無條件的,而異常和中斷處理程序的執(zhí)行要先使能。CC3200的NVIC具有下列特性:①確定的、快速的中斷處理,總是12個時鐘周期;②每個中斷的優(yōu)先級(0~7,0表示最高優(yōu)先級)可編程;③有3~8位優(yōu)先級配置;④動態(tài)重新分配中斷優(yōu)先級;⑤中斷優(yōu)先級分組允許選擇中斷優(yōu)先級分組和中斷子優(yōu)先級的數(shù)量;⑥中斷信號電平和邊沿檢測。本小節(jié)將使用GPIO外部中斷來實現(xiàn)按鍵的功能。每個GPIO端口的中斷功能通過7個寄存器來進行控制,這些寄存器可用來選擇中斷源、中斷優(yōu)先級和邊沿特性。當一個或者多個GPIO輸入引起中斷時,一個單中斷信號輸出到整個GPIO端口的中斷控制器。以下三個寄存器定義了引起中斷的邊沿或檢測:①GPIOIS:GPIO中斷檢測寄存器。②GPIOIBE:GPIO中斷邊沿寄存器。③GPIOIEV:GPIO中斷時間寄存器。中斷功能通過GPIO中斷掩碼(GPIOIM)寄存器來進行使能和關閉。當一個中斷條件產(chǎn)生時,有兩個地方可以查看中斷信號的狀態(tài):GPIO源中斷狀態(tài)(GPIORIS)寄存器和GPIO掩碼中斷狀態(tài)(GPIOMIS)寄存器。GPIORIS寄存器表示一個GPIO引腳達到了產(chǎn)生中斷的條件,但是不一定會發(fā)送給中斷控制器,而GPIOMIS寄存器只顯示可以發(fā)送給中斷控制器的中斷條件。如果是GPIO電平檢測中斷,產(chǎn)生中斷的電平信號必須保持到中斷服務的產(chǎn)生。一旦輸入的信號解除中斷產(chǎn)生的邏輯信號,對應的GPIORIS寄存器中的源中斷寄存器位將被清零。對于GPIO邊沿檢測中斷,GPIORIS寄存器中的RIS位通過向寄存器GPIOICR中的對應位寫入1來進行清零。GPIOMIS寄存器中的對應位反應源中斷狀態(tài)位的掩碼值。當編輯中斷控制寄存器時,應當將中斷全部關閉(GPIOIM清零)。如果對應的位使能的話,則寫任何中斷控制寄存器都會產(chǎn)生不必要的中斷。GPIOIS是中斷檢測寄存器。置位對應的引腳進行電平檢測,清零則對應的引腳進行邊沿檢測。在復位時,所有的位清零。圖2.1-55所示為其寄存器。GPIOIBE寄存器允許雙邊沿來觸發(fā)中斷。當GPIOIS寄存器設置為檢測邊沿時,則設置GPIOIBE寄存器來配置對應的引腳來檢測上升和下降沿,而忽略GPIOIEV寄存器中的對應位的配置。清零一位,則配置為引腳受GPIOIEV寄存器的控制。復位之后,所有的位都被清零。圖2.1-56所示為其寄存器。GPIOIEV寄存器是中斷事件寄存器,通過置位其中對應的位來配置對應的引腳檢測上升沿或者高電平,這取決于GPIOIS寄存器對應位的配置。清零該寄存器中的對應位則對應的引腳檢測下降沿或者低電平,取決于GPIOIS寄存器中對應位的配置,復位之后所有的位都清零。如圖2.1-57所示為寄存器。GPIOIM寄存器是中斷掩碼寄存器,通過置位其中的對應位,則對應引腳上產(chǎn)生的中斷將通過組合中斷信號發(fā)送給中斷控制器。清零則對應的引腳產(chǎn)生的中斷不會發(fā)送給中斷控制器。復位之后所有的位都清零。圖2.1-58所示為GPIOIM寄存器。GPIORIS寄存器是源中斷狀態(tài)寄存器。當對應的引腳達到中斷條件時,該寄存器中對應的位被置位。如果中斷掩碼(GPIOIM)寄存器中的對應位被置位,則發(fā)送中斷信號到中斷控制寄存器。如果某一位讀取為0,則說明對應的引腳沒有產(chǎn)生中斷。對于電平觸發(fā)中斷,引腳上的中斷信號必須保持到中斷服務。一旦中斷信號達不到中斷邏輯檢測要求,則GPIORIS寄存器對應的RIS位將被清零。對于一個GPIO邊沿檢測中斷,GPIORIS寄存器中的RIS位通過置位GPIOICR寄存器中對應的位進行清零。GPIOMIS寄存器中的位反映了RIS位的掩碼值。圖2.1-59所示為GPIORIS寄存器。GPIOMIS寄存器是掩碼中斷狀態(tài)寄存器。如果寄存器中對應位被置位,則對應的中斷將被發(fā)送到中斷控制器。如果某一位被清零,則無論是否有中斷產(chǎn)生,中斷都會被屏蔽掉。GPIOMIS寄存器是中斷掩碼之后的狀態(tài),圖2.1-60所示為其寄存器。GPIOICR寄存器是中斷清零寄存器。對于邊沿檢測中斷,置位GPIOICR寄存器中對應的位,則會清除GPIORIS和GPIOMIS寄存器中對應的位。如果中斷是電平檢測,則該寄存器中的對應位沒有影響。另外,向該寄存器中寫入0也沒有任何影響,圖2.1-61所示為其寄存器。本實驗在是官方CC3200SDK_1.2.0中Interrupt例程代碼的基礎上修改得來的,打開Interrupt_Demo。由于本次實驗用到串口和按鍵,所以在mian函數(shù)的PinMuxConfig()中配置了串口0的輸入、輸出,以及GPIO_13和GPIO_22的方向為輸入。本次實驗的關鍵是ButtonIntInit()函數(shù),該函數(shù)如代碼清單2.1-7所示。在該函數(shù)中把GPIO_13與GOIO_22配置為下降沿觸發(fā),觸發(fā)的中斷函數(shù)為Button1IntHandler()及Button2IntHandler()。進入中斷后首先清除標志位,然后通過串口0打印出“Button1”及“Button2”。打開UniFlash,把編譯后生成的bin文件下載到板子上(參考GPIO小節(jié)),把串口選擇的撥碼的第一個“RXD”及“CH340G_VCC”撥到ON。這里我們用到了串口0的接收,打開串口調(diào)試助手,選擇對應的串口號,波特率設置為115?200;打開串口,a按下復位,可以看到串口打印信息如圖2.1-62所示。按下板子上的SW2和SW3,可以看到串口打印信息如圖2.1-63所示。2.1.6PWMPWM(PulseWidthModulation)即脈沖寬度調(diào)制。PWM運用非常廣泛,大到航天飛船,小到便攜式USB風扇,都可以見到PWM的身影。許多MCU的定時器均帶有PWM模式,CC3200也不例外。CC3200通用定時器支持PWM模式。在PWM模式下定時器被配置為一個24位的減計數(shù)器,初始值在GPTMTnILR和GPTMTnPR寄存器中進行定義。在該模式中PWM頻率和周期是同步事件,這樣可以消除毛刺。PWM模式可以通過向寄存器GPTMTnMR中的TnAMS位寫入0x01,TnCMR位寫入0x00,TnMR位寫入0x02。當定時器使能時,裝載到定時器寄存器中的值如表2.1-46所示。當通過軟件寫GPTMCTL寄存器中的TnEN位時,計數(shù)器開始進行減計數(shù),直到0。在周期模式中的下一個計數(shù)循環(huán),計數(shù)器從GPTMTnILR和GPTMTnPR寄存器中裝載初始值,并重新開始計數(shù),直到通過軟件清除GPTMCTL寄存器中的TnEN位進行關閉。該定時器可以通過上升沿、下降沿和邊沿觸發(fā)這3種類型的事件來產(chǎn)生中斷。事件類型通過GPTMCTL寄存器中的TnEVENT位來進行配置,中斷通過GPTMTnMR寄存器中的TnPWMIE位來進行使能。當事件發(fā)生時GPTMRIS寄存器中的CnERIS位被置位,并且一直保持到通過GPTMICR寄存器來進行清除。如果捕獲模式事件中斷通過GPTMIMR寄存器進行使能,則通用定時器也要置位GPTMMIS寄存器中的CnEMIS位。另外,通過置位GPTMCTL寄存器中的TnOTE位和GPTMDMAEV寄存器中的CnEDMAEN位,使能DMA觸發(fā)模式。當TnPWMIE被置位并且發(fā)生捕捉時間時,定時器自動產(chǎn)生DMA的觸發(fā)事件。在PWM模式中GPTMTnR和GPTMTnV寄存器始終保持相同的值。當計數(shù)器的值等于GPTMTnILR和GPTMTnPR寄存器的值時,輸出PWM信號;當計數(shù)器的值等于GPTMTnMATCHR和GPTMTnPMR寄存器的值時,信號進行翻轉(zhuǎn),可以通過軟件設置GPTMCTL寄存器中的TnPWML位來對PWM信號的電平進行翻轉(zhuǎn)。圖2.1-64就是一個產(chǎn)生PWM信號的例子。GPTMCFG寄存器配置通用定時器模塊的全局操作。確定通用定時器工作于32位模式,還是16位模式。該寄存器中的值只能是在GPTMCTL寄存器中的TAEN和TBEN兩位被清零時改變,圖2.1-65所示為其寄存器。把2~0位寫入0,配置為32位定時器模式;如寫入4,配置為16位定時器模式。GPTMTAMR寄存器的配置是基于GPTMCFG寄存器的配置來進行選擇的。在PWM模式中,置位TAAMS位、清除TACMR位和配置TAMR為0x01或者0x02。圖2.1-66所示為其寄存器。GPTMTBMR寄存器控制獨立定時器B的工作模式。當定時器A和定時器B一起使用時該寄存器被忽略,而是通過GPTMTAMR來控制定時器A和定時器B的工作模式。注意:除了TCACT位,其他位都必須在GPTMCTL寄存器中的TBEN位清零時進行配置。圖2.1-67所示為GPTMTBMR寄存器。GPTMCTL寄存器為定時器的控制寄存器,圖2.1-68為GPTMCTL寄存器。GPTMIMR寄存器可以通過軟件使能/關閉定時器的控制電平中斷。置位可以打開對應的中斷,清零可以關閉對應的中斷,圖2.1-69所示為GPTMIMR寄存器。GPTMRIS寄存器為中斷源狀態(tài)寄存器,通過該寄存器可以獲取中斷源。圖2.1-70為GPTMRIS寄存器。GPTMMIS寄存器為中斷掩碼狀態(tài)寄存器,可以檢測是否產(chǎn)生中斷。圖2.1-71所示為GPTMMIS寄存器。GPTMICR寄存器用于清除GPTMRIS和GPTMIS寄存器中的狀態(tài)位,寫入1則清除對應的中斷。圖2.1-72所示為GPTMICR寄存器。當通用定時器被配置為32位模式,GPTMTAILR作為一個32位寄存器(高16位對應與定時器B裝載值寄存器的內(nèi)容)。在16位模式中寄存器的高16位讀取值為0,并且對GPTMTBILR寄存器的狀態(tài)沒有影響。圖2.1-73所示為GPTMTAILR寄存器。當通用定時器配置為32位模式時,GPTMTBILR寄存器中[15:0]位的內(nèi)容被裝載到GPTMTAILR寄存器的高16位。讀取GPTMTBILR寄存器,則返回定時器B的當前值,寫操作無效。在16位模式,[15:0]位用于裝載值,[31:16]位保留不使用。圖2.1-74所示為GPTMTBILR寄存器。當通用定時器被配置為32位模式時,GPTMTAMATCHR作為32位寄存器(高16位對應于GPTMTBMATCHR寄存器的內(nèi)容)。在16位模式,寄存器的高16位讀取為0,并且對GPTMTBMATCHR的狀態(tài)沒有影響。圖2.1-75所示為GPTMTAMATCHR寄存器。當通用定時器配置為32位模式時,GPTMTBMATCHR寄存器的[15:0]位被裝載到寄存器GPTMTAMATCHR寄存器的高16位。讀取GPTMTBMATCHR寄存器得到定時器B的當前值,寫操作無效。在16位模式中,[15:0]位用于匹配值。[31:16]位保留不使用。圖2.1-76所示為GPTMTBMATCHR寄存器。GPTMTAPR寄存器通過軟件來擴展獨立定時器的范圍。在單次或者周期減計數(shù)模式下該寄存器作為定時計數(shù)器的預分頻器。圖2.1-77所示為GPTMTAPR寄存器。GPTMTBPR寄存器通過軟件來擴展獨立定時器的范圍,在單次或者周期減計數(shù)模式下該寄存器作為定時計數(shù)器的預分頻器。圖2.1-78所示為GPTMTBPR寄存器。GPTMTAPMR寄存器擴展獨立定時器GPTMTAMATCHR的范圍。當寄存器工作于16位模式時,該寄存器表示[23:16]位。圖2.1-79所示為GPTMTAPMR寄存器。GPTMTBPMR寄存器擴展獨立定時器GPTMTAMATCHR的范圍。當寄存器工作于16位模式時,該寄存器表示[23:16]位。圖2.1-80所示為GPTMTBPMR寄存器。當定時器配置為32位模式時,GPTMTAR作為32位寄存器使用(高16位對應GPTMTBR寄存器的內(nèi)容)。在16位輸入邊沿計數(shù),輸入邊沿定時和PEM模式,[15:0]位包含計數(shù)器的值,[23:16]位包含預分頻高8位的值。[31:24]位讀取值始終為0??梢宰x取[GPTMTAV]的[23:16]位來獲取16位模式單次和周期模式的預分頻值。讀取GPTMTAPS寄存器可以獲取定期快照模式下的預分頻值。圖2.1-81所示為GPTMTAR寄存器。當通用定時器配置為32位模式時,GPTMTBR寄存器的[15:0]位被裝載到GPTMTAR寄存器的高16位。讀取GPTMTBR寄存器得到定時器B的當前值。在16位模式下[15:0]位包含計數(shù)器的值,[23:16]位包含在輸入邊沿計數(shù)、邊沿定時和PWM模式下的預分頻。[31:24]位讀取為0。可以通過讀取GPTMTBV寄存器中的[23:16]位可以獲取16位單次和周期模式的預分頻值。讀取GPTMTBPS寄存器可以獲取周期快照模式下的預分頻。圖2.1-82所示為GPTMTBR寄存器。當定時器配置為32位模式時,GPTMTAV作為32位寄存器(高16位對應GPTMTBV寄存器的內(nèi)容)。在16位模式,[15:0]位包含計數(shù)器的值,[23:16]位包含分頻值。在單次或周期減計數(shù)模式,[23:16]位存儲真實的預分頻值,意味著在減[15:0]位的值之前,先減[23:16]位的值,[31:24]位讀取始終為0。圖2.1-83所示為GPTMTAV寄存器。當通用定時器配置為32位模式,GPTMTBV寄存器[15:0]位的值被裝載到GPTMTAV寄存器的高16位。讀取GPTMTBV寄存器,則返回定時器B的當前值。在16位模式,[15:0]位包含計數(shù)器的值,[23:16]位包含當前的預分頻值。在單次或周期模式,[23:16]位為真實的預分頻值,意味著在[15:0]位減數(shù)之前,[23:16]位先進行減數(shù)。[31:24]位讀取值為0。圖2.1-84所示為GPTMTAV寄存器。GPTMDMAEV寄存器允許軟件使能和關閉定時器DMA觸發(fā)事件。置位對應的DMA觸發(fā)使能,清零則關閉。圖2.1-85所示為GPTMDMAEV寄存器。打開Pwm_Demo,在該次工程中主要是實現(xiàn)板子上三顆LED的“呼吸燈”效果,即要把GPIO_9、GPIO_10和GPIO_11三個IO口配置為PWM模式,逐次增加或降低這些端口的占空比即可使LED“呼吸”,如代碼清單2.1-8為Pwm_Demo的main函數(shù)。首先,看到main函數(shù)中的PinMuxConfig()函數(shù),如代碼清單2.1-9所示為該函數(shù)的代碼。在該代碼中先使能時鐘,然后把Pin64(GPIO_9)、Pin01(GPIO_10)及Pin02(GPIO11)分別配置為模式3,即PWM模式。為什么呢?在datasheet中可以里看到,如圖2.1-86以及圖2.1-87所示的端口復用圖,在該圖中可以看到Pin64(GPIO_9)在模式3下會被復用為PWM_05,Pin01(GPIO_10)在模式3下會被復用為PWM_06,Pin02(GPIO_11)在模式3下會被復用為PWM_07。配置好PWM輸出引腳后,就將定時器與該輸出引腳相關聯(lián)起來,在main函數(shù)中的InitPWMModules()函數(shù)是關鍵,如代碼清單2.1-10為InitPWMModules()函數(shù)。在該函數(shù)中的SetupTimerPWMMode()把Timer2的TimerB與PWM_5(即GPIO_9)相關聯(lián)起來,把Timer3的TimerB與PWM_6(即GPIO_10)相關聯(lián)起來,把Timer3的TimerA與PWM_7(即GPIO_11)相關聯(lián)起來。問題來了,為什么這樣就能關聯(lián)起來了呢?打開CC3200的《TechnicalReferenceManual》,即常說的參考手冊,可以看到一個定時器與引腳映射圖,如圖2.1-88所示。在該圖中可以清楚地看到,PWM_5正是對應著Timer2的TimerB,PWM_6正是對應著Timer3的TimerA,PWM_7正是對應著Timer3的TimerB。返回到main函數(shù)中,實現(xiàn)LED呼吸的部分代碼,如代碼清單2.1-11所示。該代碼主要就是不斷地改變輸出端的占空比,從而實現(xiàn)LED的“呼吸”。編譯代碼時打開UniFlash,把Bin文件下載到板子上(參考GPIO小節(jié)),再把撥碼開關D5、D6、D7撥到“ON”,按下復位,可以看到如圖2.1-89所示的LED“呼吸”效果。2.1.7WiFi-UDP網(wǎng)絡通信UDP是UserDatagramProtocol的簡稱,中文名是用戶數(shù)據(jù)報協(xié)議。在網(wǎng)絡中UDP與TCP協(xié)議一樣,用于處理數(shù)據(jù)包。與TCP不一樣的是,UDP是一種無連接的協(xié)議,只能是盡可能地傳輸?shù)侥康牡?,所以UDP也是具有一定的不可靠性。那么為什么還會存在UDP呢?因為在早期的網(wǎng)絡開發(fā)中,人們發(fā)現(xiàn)一些簡單的網(wǎng)絡通信不需要經(jīng)過TCP復雜的建立關系,而且過多的建立TCP連接會造成很大的網(wǎng)絡負擔,而UDP協(xié)議可以相對快速地處理這些簡單通信,如表2.1-68所示為UDP組成結(jié)構(gòu)。CC3200支持多種基于WiFi的網(wǎng)絡通信,UDP也不例外。打開Udp_Socket_Demo,如代碼清單2.1-12所示為main函數(shù)。在main函數(shù)中有InitializeAppVariables,該函數(shù)主要在于實現(xiàn)把宏定義中的UDP服務器的IP及端口號取出,進入建立UDP的就緒狀態(tài)。ConfigureSimpleLinkToDefaultState()函數(shù)主要是實現(xiàn)CC3200的接入網(wǎng)絡部分,把CC3200設置為STA模式,并且把CC3200接入到在common.h中定義好的路由器上,如代碼清單2.1-13所示為common.h中定義好的路由器SSID、密鑰及加密方式等。最重要的函數(shù)是如代碼清單2.1-14所示的BsdUdpClient(),通過該函數(shù)建立UDP。該函數(shù)先通過函數(shù)sl_SendTo()向網(wǎng)絡中發(fā)送瘋殼的官網(wǎng),然后通過函數(shù)sl_RecvFrom()進入等待接收。打開網(wǎng)絡調(diào)試助手,然后點擊“打開”,將協(xié)議類型設置為“UDP”,點擊“打開”。把網(wǎng)絡調(diào)試助手的“本地主機地址”和“本地主機端口”,填寫到程序中定義IP及端口號處,如代碼清單2.1-15所示(注意IP要為16進制),如圖2.1-90所示為網(wǎng)絡調(diào)試助手打開時的畫面。編譯代碼,打開UniFlash,下載bin文件到板子上(下載方法參考GPIO小節(jié))。下載完成后打開UARTA0的“RXD”,并將“CH340G_VCC”(即撥碼開關)撥到“ON”。打開串口調(diào)試助手,選擇相應的串口號,并且把波特率設置為115?200?b/s,點擊“打開”。按下板子上的復位鍵,可看到串口助手打印如圖2.1-91所示的信息。由此可見,CC3200已經(jīng)連接上了指定的路由器,并通過UDP發(fā)送了一段消息。此時網(wǎng)絡調(diào)試助手也收到CC3200發(fā)來的信息,并自動獲取IP等信息,如圖2.1-92所示。在網(wǎng)絡調(diào)試助手中輸入一串信息,點擊“發(fā)送”,如圖2.1-93所示。此時,串口調(diào)試助手也把CC3200收到的信息打印出來,并發(fā)送一串新的信息,如圖2.1-94所示。2.1.8WiFi-TCP網(wǎng)絡通信傳輸控制協(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服務器發(fā)送信息及接收服務器端發(fā)來的信息。打開網(wǎng)絡調(diào)試助手,然后點擊“打開”,設置協(xié)議類型為“TCPServer”,點擊“打開”。把網(wǎng)絡調(diào)試助手的“本地主機地址”和“本地主機端口”填寫到程序中定義IP及端口號處,如代碼清單2.1-18所示(注意IP要為16進制)。圖2.1-95所示為網(wǎng)絡調(diào)試助手打開時的界面。編譯代碼,打開UniFlash,下載bin文件到板子上(下載方法參考GPIO小節(jié))。下載完成后打開UARTA0的“RXD”,并將“CH340G_VCC”(即撥碼開關)撥到“ON”。打開串口調(diào)試助手,選擇相應的串口號,并且把波特率設置為115?200?b/s,點擊“打開”。按下板子上的復位鍵,可看到串口助手打印如圖2.1-96所示的信息。由此可見,CC3200已經(jīng)連接到指定的路由器上,并通過TCP發(fā)送了一段消息。此刻網(wǎng)絡調(diào)試助手也收到CC3200發(fā)來的信息,并自動獲取到IP等信息,如圖2.1-97所示。在網(wǎng)絡調(diào)試助手中輸入一串信息,點擊“發(fā)送”,如圖2.1-98所示。此時,串口調(diào)試助手也把CC3200收到的信息打印出來,并且發(fā)送一串新的信息,如圖2.1-99所示。2.2軟件開發(fā)基礎2.2.1Java簡介1.?Java的概念Java是一種跨平臺的、高級的、面向?qū)ο蟮某绦蛟O計語言。2.?JVM(JavaVirtualMachine,Java虛擬機)JVM(JavaVirtualMachine,Java虛擬機)是Java程序跨平臺的關鍵,不同的平臺有不同的JVM,而Java字節(jié)碼不包含任何與平臺相關的信息,不直接與平臺交互,而是通過JVM間接地與平臺交互。應用程序在執(zhí)行時JVM加載字節(jié)碼,將字節(jié)碼解釋成特定平臺的機器碼,讓平臺執(zhí)行。任何一個應用程序都必須轉(zhuǎn)化為機器碼,才能與計算機進行交互。如果機器碼的來源依賴于具體的平臺,那么這個應用程序就不能跨平臺。而在Java應用程序運行時機器碼由Java體系的一部分JVM提供,不受平臺的限制,故而實現(xiàn)了跨平臺。3.?Java程序運行過程程序員編寫的源碼經(jīng)編譯器編譯轉(zhuǎn)化為字節(jié)碼,生成的字節(jié)碼被加載到JVM,由JVM解釋成機器碼,并在計算機上運行,如圖2.2-1所示。4.?Java特性Java的主要特性有:(1)簡單:Java語言是從C++?發(fā)展起來的,取消了C++?中復雜而難以掌握的部分,如指針。(2)面向?qū)ο螅篔ava語言的基礎是Java將一切問題都看作對象與對象之間的交互,將對象抽象成方法與屬性的集合。(3)分布性:包含操作分布性與數(shù)據(jù)分布性兩方面。操作分布性是指由多個主機共同完成一項功能,而數(shù)據(jù)分布性則是指分布在多臺主機上的數(shù)據(jù)被當作一個完成的整體處理。(4)跨平臺:Java語言編寫的應用程序不受平臺限制,可以由一種平臺遷移到另一種平臺。(5)解釋型:使用Java語言編寫的源碼被轉(zhuǎn)化為字節(jié)碼,而字節(jié)碼只有被JVM解釋成機器碼才能被計算機執(zhí)行。(6)??安全性:Java語言的底層設計可以有效地避免非法操作。(7)健壯性:Java提供了許多機制來防止運行時出現(xiàn)的嚴重錯誤,如編譯時類型檢查、異常處理。(8)多線程:Java支持多線程,允許進程內(nèi)部多個線程同時工作。5.?Java中的一些基本概念(1)類(class):代表了一些具有某些共同特征的對象的抽象。(2)屬性(特征)的定義格式:訪問權限類型屬性名。(3)方法(行為)的定義格式:訪問權限返回類型方法名(參數(shù)列表){}。(4)創(chuàng)建對象的格式:類名對象名?=?new類名()。(5)調(diào)用屬性:對象名.屬性名。(6)調(diào)用方法:對象名.方法名(參數(shù))。(7)包(package):代表類的存放路徑。(8)引入(import):有一些類的功能需要用到其他類,就需要使用import將其他類引入進來。(9)項目(project):可以理解為很多類的一個集合,共同對外提供一個或多個完整的功能。示例代碼段見代碼清單2.2-1所示。編寫第一個Java程序時,首先打開Eclipse(如果出現(xiàn)歡迎頁面,則關掉此頁面),單擊右上角File-new-JavaProject,進入新建項目對話框,填寫項目名稱,選擇運行環(huán)境,然后點擊“完成”,這樣一個Java項目就創(chuàng)建好了,如圖2.2-2所示。這是創(chuàng)建好的項目目錄結(jié)構(gòu),上面的JRESystemLibrary里存放的是程序運行所必需依賴的環(huán)境(即所安裝的JRE),不必去管它。下面的src目錄就是我們真正編寫自己代碼的地方,如圖2.2-3所示。鼠標右鍵單擊src-New-Class,進入新建Java類對話框,填寫好包名(也可不填)和類名,點擊“完成”,這樣一個Java類就新建好了,如圖2.2-4所示。現(xiàn)在,我們就要開始寫自己的代碼了。程序要想運行必須要有一個入口方法main,我們就來寫一個main方法。我們的目的只是在eclipse上成功運行一個Java程序,那么第一個Java程序就在控制臺輸入“Hello,World!”。需要書寫的main方法代碼,如代碼清單2.2-2所示。運行結(jié)果,如圖2.2-5所示。Gradle是一個基于ApacheAnt和ApacheMavenJava的項目管理工具,JDK提供給我們的一些原生的基礎類庫,其功能簡單、有限。如果我們使用這些基礎類庫去開發(fā)一些功能復雜的應用,將會非常費時、費力,不過好在我們可以通過依賴第三方開發(fā)的jar包來使用第三方開發(fā)好的功能。一個大型的項目可以引用到多個jar包,各個jar包之間又有可能存在著互相依賴。由于它們之間的關系錯綜復雜,所以我們使用了項目自動化構(gòu)建工具Gradle來管理項目,它會自動幫助我們處理這些依賴關系,并節(jié)省大量時間。Gradle的項目自動化建構(gòu)工具,是使用一種基于Groovy的特定領域語言(DSL)來聲明項目設置,拋棄了基于XML的各種繁瑣配置。以面向Java應用為主,當前其支持的語言限于Java、Groovy和Scala,計劃未來將支持更多的語言。Gradle的主要功能如下:①按約定聲明構(gòu)建和建設;②強大地支持多工程的構(gòu)建;③強大的依賴管理(基于ApacheIvy),提供最大的便利去構(gòu)建工程;④全面支持已有的Maven或Ivy倉庫的基礎建設;⑤在不需要遠程倉庫、pom.xml和ivy配置文件的前提下支持傳遞性依賴管理;⑥基于Groovy腳本構(gòu)建,其build腳本使用Groovy語言編寫;⑦具有廣泛的領域模型支持構(gòu)建;⑧深度API;⑨易遷移。自由和開放源碼,Gradle是一個開源項目,基于ASL許可。本書涉及的源碼大多數(shù)都是Gradle項目,需要按照以下步驟將項目導入eclipse中。下面以geek_intelligent項目為例加以說明。(1)打開eclipse,鼠標右鍵單擊左邊欄空白區(qū)域,選擇“Import”,彈出導入項目對話框,然后把默認的勾選去掉,點擊“Next”,如圖2.2-6所示。(2)選擇項目存在的文件夾,點擊“Finish”,如圖2.2-7所示。eclipse右下角會提示正在導入,導入完成后我們會發(fā)現(xiàn)eclipse中多了一個項目,這是新項目的目錄結(jié)構(gòu)。(3)如果在打開Java文件中發(fā)現(xiàn)里面的中文是亂碼的話,就需要更改項目的編碼集。鼠標右鍵單擊項目→Properties,彈出項目屬性對話框,點擊“Resource”,“Textfileencoding”,選擇“Other”,下拉框選擇“UTF-8”,點擊“ApplyandClose”,現(xiàn)在中文就能正常顯示,如圖2.2-9所示。2.2.2網(wǎng)絡協(xié)議基礎網(wǎng)絡協(xié)議是計算機網(wǎng)絡中進行數(shù)據(jù)交換而建立的規(guī)則、標準或約定的集合,計算機之間想要交換數(shù)據(jù)就必須遵守相同的協(xié)議。而在網(wǎng)絡中為了完成通信,必須使用多層上的多種協(xié)議。這些協(xié)議按照層次順序組合在一起,構(gòu)成了協(xié)議棧(ProtocolStack),也稱為協(xié)議族(ProtocolSuite)。目前國際互聯(lián)網(wǎng)遵循的是TCP/IP協(xié)議組。TCP/IP是個協(xié)議組,可分為四個層次,從下到上依次是鏈路層(網(wǎng)絡接口層)、網(wǎng)絡層(互聯(lián)網(wǎng)層)、運輸層(傳輸層)和應用層。鏈路層有ARP、RARP、PPP等協(xié)議,網(wǎng)絡層有IP、ICMP、ARP、RARP、BOOTP等協(xié)議,運輸層有TCP與UDP等協(xié)議,應用層有FTP、HTTP、TELNET、SMTP、DNS等協(xié)議,如圖2.2-10所示。下面重點介紹我們最常接觸到的幾種通信協(xié)議:HTTP、TCP與UDP協(xié)議。1.HTTP協(xié)議HTTP(HyperTextTransferProtocol,超文本傳輸協(xié)議)是一種建立在請求/響應模型上的通信協(xié)議。首

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論