版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、基于Cortex-M4的配電(pi din)終端實時應用平臺軟件設計報告1 設計(shj)背景看了網(wǎng)絡上有多篇介紹基于飛思卡爾Kinetis的FTU設計方案,筆者對飛思卡的kinetis系列芯片也有所關(guān)注,在飛思卡爾與萬利共同設計推出的MAPS-K64開發(fā)套件初期心理癢癢地就不由自主地購入了一套,由于專注工作等原因一直沒空把這板子(bn zi)用起來。目前筆者手頭還有NXP LPC1768,IMX.287, STM32F4,CC2530,MSP430F等開發(fā)板,這些板子也僅使用過一段時間后就閑置在工具箱里躺著了。當下創(chuàng)客是一個充滿活力與希望年輕群體,李總理大力推進“大眾創(chuàng)業(yè)萬眾創(chuàng)新”,高度關(guān)注
2、并為創(chuàng)客們點贊。當看著這一大堆用真金白銀購入的板子還閑置在工具箱里,某天心頭來勁一定不能白瞎花這個錢得把它們折騰起來,咱也要用實際行動向創(chuàng)客精神致敬。首當其沖被選中是MAPS-K64開發(fā)套件,一是因為K64強悍的性能,二是開發(fā)套件提供的外設資源較為豐富,基于它設計一個FTU軟件方案實現(xiàn)最為強勁的實時響應性能,因為筆者熱鐘于RTOS的應用設計,碼農(nóng)當用上RTOS后完全不想回到“裸奔”時代,配電網(wǎng)的FTU軟件設計一直崇尚“裸奔”,對此我只想以本設計報告來證實應用RTOS實時效果更為優(yōu)越。筆者手中沒有飛思卡爾官方設計的FTU方案軟件源碼,本軟件方案純屬按個人思路進行全新設計,不存在如有雷同的情形,筆
3、者崇尚開源精神,恪守職業(yè)道德,首選應用開源軟件代碼,本方案未采用任何與FTU相關(guān)公司的商業(yè)代碼(可以說完全擁有自主知識產(chǎn)權(quán),嘿嘿,開個玩笑,本軟件方案未申請經(jīng)有關(guān)部門審核頒布認證_),包括MAPS-K64開發(fā)套件提供的例程都未使用,它的部分例程還是完全不能用的,各模塊均按照統(tǒng)一規(guī)范進行設計驗證。芯片驅(qū)動采用飛思卡爾Kinetis最新的軟件開發(fā)包KSDK V1.2,其它中間庫則采用開源軟件代碼(除emWin外,僅個人學習評估使用,未用于商業(yè)用途)。由于資源、時間等因素受限,現(xiàn)階段未具有交流采樣板、開入開出板,專業(yè)試驗設備等無法模模擬饋線故障,因而本期主要成果是搭建FTU軟件設計平臺,具備FTU基
4、礎應用功能,在軟件設計上以極致高效的設計,力求在實時響應上實現(xiàn)最高性能,達到實時應用評估目的,在II期則補充實現(xiàn)FTU其余軟件功能,形成一個完整的軟件實現(xiàn)方案。本方案預期分為三個階段實施,I期為軟件開發(fā)平臺搭建,具備FTU基礎功能,II期為故障判斷,標準通信協(xié)議,數(shù)據(jù)存儲,超低功耗BLE的應用,基于Qt的維護配置工具(gngj)的實現(xiàn),III期為設計交直流和開入開出板驗證,項目眾籌等(大膽(ddn)臆想,不一定具備實施條件)。本文為I期開發(fā)已基本完成的情況(qngkung)作一個總結(jié)報告,主要目的有如下三個方面:1、基于Cortex-M4和RTOS的實時響應特性展現(xiàn);2、闡述個人對FTU軟件框
5、架設計的理解與其高效程序設計的一些思想;3、杜絕閉門造車自我感覺良好的局面,與人分享吸納各方改進提升建議。2 配電網(wǎng)監(jiān)控終端介紹智能配電網(wǎng)是智能電網(wǎng)的重要組成部分,其主要實現(xiàn)配電系統(tǒng)正常運行及事故情況下的監(jiān)測、保護、控制、用電和配電管理的智能化。智能配網(wǎng)系統(tǒng)配用電自動化系統(tǒng)由主站、通信系統(tǒng)、自動化監(jiān)控終端設備三大部分構(gòu)成,形成一個完整的信息傳輸與處理系統(tǒng),實現(xiàn)對配電網(wǎng)運行的遠程管理。其中自動化監(jiān)控終端設備包括饋線終端(Feeder Terminal Unit,F(xiàn)TU)、站所終端(Distribution Terminal Uint, DTU)、配電變壓器終端(Transform Termina
6、l Unit, TTU)等。FTU主要安裝在10kV饋電線路上,對柱上開關(guān)(斷路器、負荷開關(guān)、分段開關(guān))進行監(jiān)控,完成遙信、遙測、遙控,故障檢測功能,并與配電自動化主站通信,提供配電系統(tǒng)運行情況和各種監(jiān)測信息,包括開關(guān)狀態(tài)、電能參數(shù)、相間故障、接地故障以及故障時的參數(shù),可執(zhí)行配電主站下發(fā)的命令,對配電終端進行調(diào)節(jié)和控制,實現(xiàn)故障定位、故障隔離和非故障區(qū)域快速恢復供電功能。DTU一般安裝在常規(guī)的開閉所(站),環(huán)網(wǎng)柜、小型變電站、箱式變電站等處,完成對開關(guān)設備的位置信號、電壓、電流、有功功率,無功功率、功率因數(shù)、電能量等數(shù)據(jù)采集與計算,對開關(guān)進行分合閘操作,實現(xiàn)對饋線開關(guān)的故障識別、隔離和對非故障
7、區(qū)間的恢復供電。TTU主要用于監(jiān)測并記錄配電(pi din)變壓器運行工況,記錄并保存一段時間內(nèi)監(jiān)測參數(shù)的整點值,電壓、電流的最大值、最小值及其出現(xiàn)的時間,供電中斷及恢復時間,形成數(shù)據(jù)表。本文(bnwn)主要構(gòu)建側(cè)重于FTU的配電網(wǎng)實時應用平臺,DTU和TTU的實現(xiàn)亦是通用的。FTU一般(ybn)功能介紹: 交流量采集:采集三相交流電壓和電流(3U3I),本平臺軟件模擬(3U3I+U0I0)共8個交流輸入通道; 實現(xiàn)電壓、電流、零序電壓、零序電流、有功功率、無功功率、功率因數(shù),頻率的測量和計算; 直流量采集:2路直流輸入; 狀態(tài)量采集:開關(guān)狀態(tài)、接地刀閘狀態(tài)采集; 113次諧波分量計算、三相不
8、平衡度的分析計算; 遙信輸入(無源,24V)和遙控輸出(合、分閘、常開觸點); 事件順序記錄、歷史記錄、主站下發(fā)信息可當?shù)卮鎯Γ?支持IEC60870-5-101、 IEC60870-5-104、 MODBUS等常用規(guī)約; 支持多種通信方式、提供多路通信接口,提供2路RS 232或2路RS 485串行通信口,2路10/100M自適應以太網(wǎng)口; 配置GPRS模塊; 具備故障檢測及故障差別功能:過流,過負荷; 配備后備電源,當主電源供電不足或消失時,能自動無縫投入; 具備對時功能,支持SNTP等對時方式,接收主站或其它時間同步裝置的對時命令,與系統(tǒng)保持同步。3 硬件評估板介紹目前暫缺手頭暫缺完整的
9、FTU硬件平臺,只能借助于飛思卡爾聯(lián)合萬利電子推出的MAPS四色板平臺作為本次評估開發(fā)板,其具有豐富的通用接口,具有良好的擴展性,目前開發(fā)套件由MCU主板和通用外設板構(gòu)成。MAPS-K64主板MAPS-K64主板特性(txng): 飛思卡爾K64微控制器-MK64FN1M0VLQ12; 10/100M自適應(shyng)以太網(wǎng)接口; FlexBus擴展(kuzhn)1Mx16 PSRAM,帶地址鎖在器; FlexBus擴展2.8英寸彩色LCD(QVGA 240 x320); 標準的2.54mm 20pin SWD調(diào)試接口; Full Speed USB Device, Micro B接口供電;
10、 支持RTC功能,3.0V鋰電池給VBAT供電; CN3,CN6擴展接口,可與通用外設板對接,提供豐富的擴展功能; 排針座引出微控制器所有IO口,方便擴展MK64FN1M0VLQ12微控制器特性: ARM Cortex-M4內(nèi)核 + DSP,120MHz主頻,單周期MAC,單指令多數(shù)據(jù)(SIMD)擴展,單精度浮點運算單元(FPU); 集成1MB Flash、256KB SRAM、128KB FlexNVM、4KB FlexRAM,F(xiàn)lexBus接口(ji ku)用于連接外部存儲器; 兩個(lin )16位SAR ADC、兩個12位DAC、3個模擬比較(bjio)器、內(nèi)部參考電壓 8兩個8通道定
11、時器(PWM/電機控制),兩個兩通道定時器、實時時鐘等; 10/100 M以太網(wǎng)MAC、CAN、USB OTG(支持無晶振USB設計); 3個SPI模塊、3個I2C模塊、6個UART模塊、SDHC接口、I2S模塊,最大支持100個GPIOs口; 多種低功耗模式,工作電壓:1.713.6V,工作功耗最低可低至250uA/MHz,工作溫度-40105。MAPS通用外設板MAPS-DOCK板的外設資源非常豐富,主要包括: 飛思卡爾K20微控制器,基于Cortex-M4處理器,作為板載調(diào)試器; 一個Micro-SD卡插槽、一個8Mbit SPI Nor Flash、一個2Kbit EEPROM; I2
12、S音頻編解碼器,支持一路立體聲耳機輸出,兩路Speaker輸出,一路麥克風輸入; 板載USB調(diào)試器, 支持CMSIS-DAP協(xié)議(xiy),同時支持USB轉(zhuǎn)UART功能; USB全速接口(ji ku)、紅外收發(fā)接口、兩個UART接口、一個CAN接口; 一個DAC/PWM Audio輸出(shch)接口; 兩路單端或一路差分ADC輸入; 一個128x64單色LCD屏,SPI接口; 四個物理按鍵、四個LED顯示、一個五向按鍵、六個觸摸按鍵。4 實時響應特性驗證汽車沖撞氣囊在汽車發(fā)生碰撞時是否能及時彈出是一個實時響應的最好例子,若在發(fā)生碰撞后某一截止時刻后才彈出,則無法起到應有的保護作用,這是喪失實
13、時響應導致的后果。配電網(wǎng)饋線終端具備故障定位、故障隔離和非故障區(qū)域快速恢復供電功能,若故障檢測實時性得不到保證,最終故障是能識別,但已超過切除故障的理想時間,饋線上的故障有可能引發(fā)更大范圍的故障。所以筆者認為要能快速進行故障定位,就必須提供故障定位的實時響應特性,為此在FTU軟件設計非常有必要結(jié)合RTOS的進行軟件設計。下圖是FTU對1路饋線的所有遙測量模擬計算結(jié)果,這么多項計算結(jié)果是不是有點震撼效果,總共137個遙測值/饋線的計算量,還有3個直流量計算(后兩者轉(zhuǎn)換系數(shù)為1.0,即實際ADC采樣值),幾乎可以囊括所有的測量值。遙測值的計算過程極為復雜,包括64點采樣值的FFT信號處理,有效值的
14、開平方計算,相角的反正切計算,高精度頻率計算,這些計算都是極為消耗MCU使用率的。然后再看看MCU的利用率統(tǒng)計(tngj)結(jié)果:簡直是逆天了,這么繁重的計算(j sun)任務竟然僅占用MCU的33%使用率,還有66%的空閑時間,其實FTU最繁重的遙測計算是在App Core Task那個任務而已,神馬情況,才19%,是的,你一點都沒有看錯,僅僅占用MCU 19%的使用率即可完成一路饋線137個測量值的計算,還包括3個直流量計算以及9路遙信處理,再看下圖。第一通道為AD周期采樣每5ms輸出上升脈沖(michng),配電網(wǎng)正常工頻周期為20ms,本平臺每周期采樣64個點,即每次完成16個點(四分之
15、一周波)采樣值輸出脈沖,下降沿是在計算任務完成瞬時遙測值完畢后輸出的,可通過第一通道的脈寬看出故障判斷固有延遲時長。第2通道的脈沖上升時刻為每次開始進行瞬時遙測值計算時輸出的,下降沿為結(jié)束本次遙測計算時輸出的,其中各次脈寬不一要等長,是因為遙測值處理有選擇地進行濾波計算所致,每次計算都是以本次采樣所得的四分之一周波數(shù)據(jù)與前四分之三數(shù)據(jù)進行組合計算的,這樣的滑動數(shù)據(jù)窗的數(shù)據(jù)方式,確保以最完整的信息進行FFT信息處理。通過觀察第1通道,時標100ms-200ms間共嚴格地出現(xiàn)了20個脈沖,T1-T2時長為99.998750ms,說明采樣完成按照每5ms觸發(fā)App Core Task進行遙測計算。局
16、部放大某一上升沿進行(jnxng)兩個通道對比圖如下可以清晰地看到,T1-T2時差僅為11.750us,意味著每5ms采樣完四分之一周波后觸任務進行計算,任務實時響應僅僅只需要11.750微秒而已,請?zhí)貏e注意是11.750微秒,對于這樣實時響應特性,技藝超眾的碼農(nóng)設計裸奔程序也很難達到如此快速(kui s)的實時響應,以后則可以十分有底氣地說,F(xiàn)TU結(jié)合RTOS進行軟件設計實時響應特性更好。再看看(kn kn)下圖:通道1的脈沖寬度:0.649500ms,這意味著從每5ms采樣完成觸發(fā)計算到瞬時遙測計算完畢,僅僅只需要0.649500ms,這意味著故障判斷的固有延時為:0.65ms左右,完全小
17、于1ms的節(jié)奏啊,所以最為理想的情況是故障在1ms內(nèi)就能夠被檢測出來,最壞的情況是故障被延時5+0.65ms被檢測出來。筆者還有另一手段進行上述時間的對比計時測量,是應用MCU的以120MHz為時鐘源的計數(shù)器進行消耗時鐘計數(shù),求最小值、平均值、最大值,測試結(jié)果與上述IO脈沖測量相差無幾,在此就不重復闡述了。下圖為板上按鍵模塊開入進行遙信處理生成的SOE,以及網(wǎng)絡Ping結(jié)果,同樣具備良好的實時響應效果:5 程序設計(chn x sh j)思想Bob大叔認為在代碼閱讀過程中人們說臟話(zn hu)的頻率是衡量代碼質(zhì)量的唯一標準。軟件系統(tǒng)的質(zhì)量好壞,歸根結(jié)義還是需要代碼來告知。代碼優(yōu)劣不僅直接決定
18、了軟件的質(zhì)量,還將直接影響軟件成本。軟件成本由開發(fā)成本和維護成本組成,而往往維護成本遠高于開發(fā)成本,這其中耗費的主要成本就是理解代碼和修改代碼造成的,代碼的質(zhì)量與其整潔度成正比。干凈的代碼,既在質(zhì)量上較為可靠,也為后期維護、升級奠定了良好的基礎。細節(jié)決定成敗,思路清晰、言簡意賅(yn jin y gi)的代碼讓程序員一目了然;而格式凌亂、拖沓冗長的代碼讓程序員一頭霧水。除了可以正確運行以外,優(yōu)秀代碼必須具備良好的可讀性,編寫的代碼要使人能在最短的時間內(nèi)理解才行。編碼不僅僅只是一們技術(shù),也是一門藝術(shù),編寫可讀性高的代碼尤其如此。代碼最重要的讀者不是編譯器、解釋器或者電腦,而是人,寫出的代碼能讓人
19、快速理解、輕松維護、容易擴展(kuzhn)的程序員才是專業(yè)程序員。精簡、高效、穩(wěn)定、可靠是嵌入式程序設計過程所應該力爭實現(xiàn)的,把有限的資源用到極致發(fā)掘出SOC卓越的性能。除可編程器件的程序外,程序運行時是嚴格按順序執(zhí)行,只有簡單、高效設計的程序才能快速響應事件,并非應用RTOS的程序就具備實時響應功效了。工業(yè)應用的嵌入系統(tǒng)還要求實現(xiàn)無間斷超長時間進行精準(jn zhn)監(jiān)控,因而務必在程序設計中排除各類不穩(wěn)定因素,比如嚴格按MISRA-C(汽車制造業(yè)嵌入式C編碼標準)進行程序設計。省內(nèi)存、模塊化、可配置、可移植的設計也在嵌入式程序設計具有重要意義。雖然微控制器的內(nèi)存資源有很大的提升,相對來說還
20、是比較匱乏的,用最少的內(nèi)存實現(xiàn)既定的功能可縮減??臻g的大小,提升程序的高效性。模塊化的程序設計可最大程度地減少程序的耦合性,抽象封裝優(yōu)良的模塊可移植性強,可用于多個應用平臺??膳渲脛t實現(xiàn)程序維護升級的極大便利性,通過修改一些配置屬性即可實現(xiàn)特定的需求,減少程序的維護成本,如FreeRTOSConfig.h, lwipopt.h等均設計有可配置選項,使其得到廣泛地應用,Micrium公司出品的uCOS-III其代碼堪稱最為規(guī)范而且整潔的程序。軟件設計中的關(guān)鍵思想:代碼應該是易于理解的,遵循統(tǒng)一的編程規(guī)范,實現(xiàn)高效整潔穩(wěn)健的程序設計。要充分借鑒C+的分類設計思想,把功能按模塊進行分類,最大程序減小
21、模塊間的耦合,同時把通用的功能函數(shù)封裝好,做好一經(jīng)驗證正常后續(xù)則可到處快速使用目的。6 軟件架構(gòu)本平臺軟件架構(gòu)劃分為5個層次,分別為用戶應用層App,通用接口層Common,應用支持層Asp,中間層Mid,驅(qū)動層Drv。用戶應用層AppAppOS、 ComApp、 HmiApp、 MainApp、 NetApp、 ShellApp、SoeApp、 WinApp、 YcApp、 YxApp、 YkApp通用接口CommonCommon、 DbgPrintf、 SoftClock、 StrLib、 StrPrintf應用支持層AspExterRam、 FlexBus、 FramFlash、 HwT
22、icker、 I2CBus、LcmDisp、 NorFlash、 GpioPin、 PinMux、 RTC、 SerialCom、SpiBus、 System、 Watchdog中間層MidFreeRTOS V8.20、 LwIP V1.41、 emWin V5.26驅(qū)動層DrvKSDK V1.26.1 驅(qū)動(q dn)層驅(qū)動層為整個軟件架構(gòu)的最底層,采用飛思卡專門為Kinetis系列設計(shj)軟件開發(fā)套件KSDK V1.2,Kinetis軟件開發(fā)套件由強大的外設驅(qū)動、堆棧、中間件和示例應用組成,旨在簡化和加速基于所有Kinetis MCU的應用開發(fā)。隨MAPS-K64開發(fā)套件發(fā)布的是V1
23、.1,兩個版本在程序接口上不兼容,應用支持層則調(diào)用的是KSDK提供的編程接口,用戶應用層則使用應用支持層的編程接口,使得這三者保持獨立性,便于用戶應用層程序無縫移植到其它廠家的MCU上運行,而僅需移植應用支持層即可。6.2 中間層中間層由FreeRTOS、LwIP和emWin構(gòu)成,除emWin外,其余兩者均為開源代碼,emWin為MDK自帶的圖形用戶接口,鑒于工業(yè)應用安全可靠要求目前暫未找到具備掉電保存(bocn),支持磨損平衡特性的開源嵌入式文件系統(tǒng),開源軟件easyFlash是后續(xù)理想的替代方案。FreeRTOS是Real Time Engineers Ltd.推出的市場領先實時操作系統(tǒng),
24、支持30多種架構(gòu)。它擁有專業(yè)的開發(fā)、嚴格的質(zhì)量控制、穩(wěn)定可靠的特點和完善的支持,可免費在商用產(chǎn)品中使用。LwIP是瑞典計算機科學院(SICS)的Adam Dunkels 開發(fā)的一個小型開源的 HYPERLINK /view/7729.htm t /_blank TCP/IP協(xié)議棧。主要應用于嵌入式領域的開源TCP/IP協(xié)議棧,它的實現(xiàn)同BSD的實現(xiàn)有很大的相似性,可以作為TCP/IP協(xié)議的典型代表,它的功能完備,除了實現(xiàn)TCP/IP的基本通信功能外,還支持DNS、SNMP、DHCP、IGMP等高級功能應用。LwIP實現(xiàn)的重點是保證在嵌入式設備RAM、ROM資源有限的情況下實現(xiàn)TCP協(xié)議的主要功
25、能,因此它具有自己獨到的一套數(shù)據(jù)包和內(nèi)存管理機制,使之更適合于在代端的嵌入式系統(tǒng)中使用。emWin是市場上最有效、最全面的GUI產(chǎn)品之一,它和國內(nèi)流行的uCGUI類似,它以ANSI C語言編寫,支持(zhch)任何顯示控制器、顯示器和CPU,本平臺已成功移植emWin用于驅(qū)動彩色LCD,后期做用戶圖形界面開發(fā)。6.3 應用(yngyng)支持層應用支持層相當于板級驅(qū)動包(BSP),統(tǒng)一向上為應用層提供支持服務,故叫應用支持層,是對片上及板上外設資源進行訪問接口的實現(xiàn),使應用層更為便利地訪問片上及板上的資源,把應用層與DRV層完全隔離,增強整個工程程序地可移植(yzh)性,若移植工程到不同廠家的
26、芯片時,僅需重新實現(xiàn)ASP層的函數(shù)接口即可,APP層的程序可實現(xiàn)無縫移植,與此同時按照現(xiàn)代方法的C語言程序設計,可兼容應用于不用的編譯器,如ARMCC, IAR, GCC等。6.4 通用接口層通用接口層是用戶應用層公共通用的功能函數(shù)集,主要包含工程通用頭文件定義,仿printf標準格式字符串轉(zhuǎn)換,累加計數(shù)式算法的軟時鐘日歷實現(xiàn)等。6.5 用戶應用層用戶應用層主要包含與RTOS相關(guān)功能整體實現(xiàn),各個功能模塊的模塊化程序設計等,下文一一詳述。7 應用支持層(ASPs) 應用(yngyng)支持層結(jié)構(gòu)圖UNIX具有標準API模型open-read-write-close,Linux受益于該模型使得它
27、的應用程序無障礙地與Unix程序友好共存,因而程序設計分為應用程序設計與驅(qū)動程序程序,驅(qū)動程序設計與芯片硬件資源配置較為緊密,需要更為高效的程序執(zhí)行效率。在微控制器程序設計中則極少嚴格(yng)劃分驅(qū)動程序和應用程序,這就造成了應用程序設計與芯片完全綁定的惡果,導致應用程序無法移植應用于其他廠家的芯片上,最為悲的情況是按芯片應用程序得重寫。ARM公司(n s)推出ARM Cortex的同時還有一個與之配套的標準-CMSIS(微控制器軟件接口標準),是Cortex-M處理器系列的芯片與供應商無關(guān)的硬件抽象層。使用CMSIS,可以為處理器和外設實現(xiàn)一致且簡單的軟件接口,從而簡化軟件的重用、縮短微控
28、制器新開發(fā)人員的學習過程,并縮短新設備的上市時間,同時方便將現(xiàn)有軟件遷移到新設備。這個標準為供應商設計硬件抽象層軟件接口提供了更為權(quán)威的依據(jù),但到目前為止只能說各廠家的軟件接口逐漸趨于統(tǒng)一,但還無法達到無縫銜接的地步。為此在本工程中參照上述思想,結(jié)合微控制器的通用處理過程形成了Init-Read-Write的應用支持層總體設計思想。按此思路設計各個功能模塊(m kui),在init中是根據(jù)各功能模塊的屬性配置表進行初始化配置,在系統(tǒng)上電復位后統(tǒng)一進行各模塊初始化,然后就可以為用戶應用層各模塊提供友好地Read/Write服務。雖然無法與CMSIS相比較,但經(jīng)過這樣層次劃分后,應用程序與各廠家的
29、硬件抽象層完全隔離,具備良好的移植性,非常有利于在各個廠家的芯片中進行評估。注:鑒于大多數(shù)編程語言都是基于英語的,而且要求很多程序中用英語注釋,文件的函數(shù)名及變量定義禁止一切形式(xngsh)的簡拼,流行的開源軟件也都是清一色的英文doc,所以程序員學好英語也是很有必要的,因為看懂datasheet,用好User Guide是非常重要的技能。為了與世界接軌,筆者英文水準雖然很蹩腳,但抱著多用多學不斷提升的愿憬常用英文,下文中注釋語法或用詞可能不正確,但是關(guān)鍵信息已經(jīng)裝在變量名及函數(shù)名中,看函數(shù)名不用猜測就知道其功能,這已經(jīng)是可讀代碼的藝術(shù)了,函數(shù)頭注釋那只是使格式更為規(guī)范而已了。此外用英文注釋
30、的程序在哪個瀏覽器都不會在在亂碼,不存在UTF-8或GBK編碼導致顯示亂碼問題。7.1 ExterRam模塊(m kui)ExterRam模塊為片外擴展RAM的初始化配置及應用訪問接口實現(xiàn),主要提供如下訪問接口函數(shù):/!=/!brief Initializes the SDRAM device./!param void./!retval None./!note ./!=extern void vExterRamInit(void);/!=/!brief Reads an mount of data from the SDRAM memory in polling mode./!param Iu
31、lAddr - Read start address./!param O*pulData - Pointe to the read data buffer./!param IulSize - Size of read data from the memory./!retval API_NULL / API_SUCC./!note 僅測試使用,在應用中使用地址自動定位技術(shù)(jsh)將變量定義于片外內(nèi)存中./!=extern int16_t iExterRamReadData(uint32_t ulAddr, uint16_t *puiData, uint32_t ulSize);/!=/!bri
32、ef Writes an mount of data to the SDRAM memory in polling mode./!param IulAddr - Write start address./!param I*pulData - Pointer to data to be written./!param IulSize - Size of written data from the memory./!retval API_NULL / API_SUCC./!note 僅測試使用,在應用(yngyng)中使用地址自動定位技術(shù)將變量定義于片外內(nèi)存中./!=extern int16_t
33、iExterRamWriteData(uint32_t ulAddr, uint16_t *puiData, uint32_t ulSize);7.2 FlexBus模塊(m kui)FlexBus模塊為片外護展總線的初始化配置的實現(xiàn),以及可訪問地址空間的定義,主要提供初始化配置接口函數(shù):/!=/!brief Flex Bus Initial./!param void./!retval None./!note ./!=extern void vFlexBusInit(void);/!=/!brief Wrtie data to NorFlash./!param ulAddr - FlexBus
34、 Address./!param bIncr - the address increase or not./!param *puiData - pointer on the write data buffer./!param ulWordNum - the num of word data buffer./!retval API_NULL / API_FAIL / API_SUCC./!note ./!=extern int16_t iFlexBusWrite(uint32_t ulAddr, uint8_t bIncr, uint16_t *puiData, uint32_t ulWordN
35、um);/!=/!brief Read data from FlexBus./!param ulAddr - FlexBus Fix Address./!param bIncr - the address increase or not./!param *puiData - pointer on the read data buffer./!param ulWordNum - the num of word data that expect to read./!retval API_NULL / API_FAIL / API_SUCC./!note ./!=extern int16_t iFl
36、exBusRead(uint32_t ulAddr, uint8_t bIncr, uint16_t *puiData, uint32_t ulWordNum);7.3 FramFlash模塊(m kui)FramFlash模塊為鐵電Flash,EEROM等無需擦除即可直接寫入的Falsh提供驅(qū)動初始(ch sh)配置,以及讀寫訪問接口函數(shù),提供的接口函數(shù):/!=/!brief FramFlash Initial./!param void./!retval None./!note ./!=extern void vFramFlashInit(void);/!=/!brief Read data
37、 form FramFlash./!param I uiAddr - address of FramFlash./!param O *pucBuff - point to the output data buffer./!param IO*puiLen - input the expect to read datas lenght, /! output the real read lenght./!retval API_NULL / API_SUCC./!note ./!=extern int16_t iFramFlashRead(uint16_t uiAddr, uint8_t *pucBu
38、ff, uint16_t *puiLen); /!=/!brief Wrtie data to FramFlash./!param I uiAddr - address of FramFlash./!param O *pucBuff - point to the write data buffer./!param IO*puiLen - input the expect to write datas lenght, /! output the real write lenght./!retval API_NULL / API_FAIL / API_SUCC./!note ./!=extern
39、int16_t iFramFlashWrite(uint16_t uiAddr, uint8_t *pucBuff, uint16_t *puiLen);7.4 HwTicker模塊(m kui)HwTicker模塊主要功能是為應用程序提供周期性定時中斷服務,主要基于片上的定時器實現(xiàn),為了有區(qū)別于曾被廣泛應用的HwTimer而取名HwTicker,寓意滴答時鐘?;诳膳渲贸绦蛟O計思想,HwTicker的定時屬性是可配置的,在不同的使用場合,僅需要更改其中的配置即可達到所需的定時周期服務,而無需進行其他的同步更正。提供(tgng)的訪問接口如下:typedef enum _HwTickerLog
40、icNoDef kHwTickerNo0 = 0, /* 1ms計時. */ kHwTickerNo1, /* AD采樣(ci yn)計時. */ HwTickerNo_t;/!=/!brief Hardware ticker initial./!param void./!retval None./!note ./!=extern void vHwTickerInit(void);/!=/!brief Starts the hardware ticker counting./!param ucTickerNo - logitc ticker No./!retval API_FAIL / API
41、_SUCC./!note ./!=extern int16_t iHwTickerStart(uint8_t ucTickerNo);/!=/!brief Stops the hardware ticker counting./!param ucTickerNo - logitc ticker No./!retval API_FAIL / API_SUCC./!note ./!=extern int16_t iHwTickerStop(uint8_t ucTickerNo);/!=/!brief get hardware ticker count value./!param void./!re
42、tval ticker count value./!note 0毫秒起累加計時./!=extern inline uint32_t ulHwTickerCountGet(void);/!=/!brief Reads the hardware ticker current counting value./!param IucTickerNo - logitc ticker No./!param O*pulCount - pointer to the output valeue./!retval API_NULL / API_SUCC./!note ./!=extern int16_t iHwTi
43、ckerCountGet(uint8_t ucTickerNo, uint32_t *pulCount);/!=/!brief Read the hardware ticker period in units of count./!param IucTickerNo - logitc ticker No./!param O*pulPeriod - pointer to the output value./!retval API_NULL / API_SUCC./!note us = (*pulPeriod + 1) / Fre./!=extern int16_t iHwTickerPeriod
44、Get(uint8_t ucTickerNo, uint32_t *pulPeriod);/!=/!brief Sets the hardware ticker period in units of count./!param ucTickerNo - logitc ticker No./!param ulSetCount - period count value./!retval API_NULL / API_SUCC./!note ulPeriod = (us * Fre / 1000000 - 1)./!=extern int16_t iHwTickerPeriodSet(uint8_t
45、 ucTickerNo, uint32_t ulSetCount);/!=/!brief Read the hardware ticker source frequence./!param IucTickerNo - logitc ticker No./!param O*pulFre - pointer to the output value./!retval API_NULL / API_SUCC./!note ./!=extern int16_t iHwTimerFreGet(uint8_t ucTickerNo, uint32_t *pulFre);/!=/!brief Hardware
46、 timer initialization./!param void./!retval None./!note Use for RTOS Run Time Statistics./!=extern void vHwTickerTimeStampInit(void);/!=/!brief Get hardware time counter value./!param void./!retval None./!note Use for RTOS Run Time Statistics./!=extern uint32_t ulHwTickerTimeStampGet(void);/!=/!brie
47、f CPU Time Stamp Initial./!param void./!retval None./!note ./!=extern void vCPU_TimeStampInit(void);/!=/!brief Get CPU Time Stamp./!param void./!retval None./!note 以系統(tǒng)(xtng)時鐘為時鐘源的32位計數(shù)器,可作為應用層高精計時測量用./!=extern inline uint32_t ulCPU_TimeStampGet(void);7.5 I2cBus模塊(m kui)I2cBus為片上I2C外設總線進行統(tǒng)一配置和訪問管理,主
48、要提供(tgng)初始化配置及發(fā)送、接收接口,在此主要作為主機解色使用。typedef enum _I2CBusNoDef kI2cBusEprom = 0, / EPROM kI2cBusTemp, / 溫度傳感器 I2cBusNo_t;/!=/!brief I2C bus initial./!param void./!retval None./!note ./!=extern void vI2cBusInit(void);/!=/!brief Send data to I2C bus./!param I ucBusNo - I2C Bus No./!param I *pucCmdTxBuf
49、f - pointer on the send buffer,/! include cmd and Tx data./!param I uiCmdLen - the length of commad data./!param IO*puiTextLen - input the length of data hope to send,/! ouput real send lenght./!retval API_NULL / API_FAIL / API_SUCC./!note ./!=extern int16_t iI2cBusMasterSend(uint8_t ucBusNo, uint8_
50、t *pucCmdTxBuff, uint16_t uiCmdLen, uint8_t *puiTextLen);/!=/!brief Send data to I2C bus./!param I ucBusNo - I2C Bus No./!param I *pucCmdTxBuff - pointer on the send buffer,/! include cmd and Rx data./!param I uiCmdLen - the length of commad data./!param IO*puiTextLen - input the length of data hope
51、 to receive,/! ouput real receive lenght./!retval API_NULL / API_FAIL / API_SUCC./!note ./!=extern int16_t iI2cBusMasterReceive(uint8_t ucBusNo, uint8_t* *pucCmdRxBuff, uint16_t uiCmdLen, uint8_t *puiRxLen);7.6 LcmDisp模塊(m kui)LcmDisp模塊為液晶顯示模塊驅(qū)動,SNT為點陣式液晶顯示模塊,TFT為彩色式液晶顯示模塊。分別提供了初始化配置,中英文顯示,畫線等接口。ASC
52、II字符以8*16字模顯示,簡體中文以16*16字模完全顯示GB2312定義的所有可顯示字符,其中(qzhng)一級漢字3755個,二級漢字3008個,還包括拉丁字母、希臘字母、日文平假名及片假名字母、俄語西里爾字母在內(nèi)的682個全角字符。無部分為無需專業(yè)的GUI軟件即可進行字符及描點繪線操作,若移植了GUI則以調(diào)用GUI接口函數(shù)顯示(xinsh),此部分則僅需要執(zhí)行初化而已。提供的訪問接口函數(shù)如下:/!=/!brief Single Color LCM initial./!param void./!retval None./!note ./!=extern void vSntLcmInit(
53、void);/!=/!brief Single Color LCM Clear screen./!param void./!retval None./!note ./!=extern void vSntLcmClearScreen(void);/!=/!brief Renew LCD Screen./!param void./!retval None./!note ./!=extern void vSntLcmRenew(void);/!=/!brief Single Color LCM display character at special position./!param uiChar
54、- character encode./!param uiAxisX - position of X axis./!param uiAxisY - position of Y axis./!retval API_NULL / API_SUCC./!note ./!=extern int16_t iSntLcmDispCharAt(uint16_t uiChar, uint16_t uiAxisX, uint16_t uiAxisY);/!=/!brief Single Color LCM display string at special position./!param pcStr - st
55、ring character encode./!param uiLen - the length of display space./!param uiAxisX - position of X axis./!param uiAxisY - position of Y axis./!retval API_NULL / API_FAIL / API_SUCC./!note ./!=extern int16_t iSntLcmDispStringAt(const char *pcStr, uint16_t uiLen, uint16_t uiAxisX, uint16_t uiAxisY);/!=
56、/!brief Single Color LCM display decimal data at special position./!param lValue - character encode./!param uiLen - the length of display space./!param uiAxisX - position of X axis./!param uiAxisY - position of Y axis./!retval API_NULL / API_SUCC./!note ./!=extern int16_t iSntLcmDispDecAt(int32_t lV
57、alue, uint16_t uiLen, uint16_t uiAxisX, uint16_t uiAxisY);/!=/!brief Single Color LCM display float data at special position./!param fValue - float data value./!param uiLenDec - the length of display space with the length of decimal./!param uiAxisX - position of X axis./!param uiAxisY - position of
58、Y axis./!retval API_NULL / API_SUCC./!note ./!=extern int16_t iSntLcmDispFloatAt(float fValue, uint16_t uiLenDec, uint16_t uiAxisX, uint16_t uiAxisY);/!=/!brief Single Color LCM display binary data at special position./!param fValue - integrate data value./!param uiLenDec - the length of display spa
59、ce with the length of decimal./!param uiAxisX - position of X axis./!param uiAxisY - position of Y axis./!retval API_NULL / API_SUCC./!note ./!=extern int16_t iSntLcmDispBinAt(uint32_t ulValue, uint16_t uiLen, uint16_t uiAxisX, uint16_t uiAxisY);/!=/!brief Single Color LCM display hex data at specia
60、l position./!param fValue - character encode./!param uiLenDec - the length of display space with the length of decimal./!param uiAxisX - position of X axis./!param uiAxisY - position of Y axis./!retval API_NULL / API_SUCC./!note ./!=extern int16_t iSntLcmDispHexAt(uint32_t ulValue, uint16_t uiLen, u
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國卡子發(fā)數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國六缸式氣壓工作臺數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國上下波長型波分復用器數(shù)據(jù)監(jiān)測研究報告
- 2025年中國方形衛(wèi)生桶市場調(diào)查研究報告
- 2025年中國字母讀出器市場調(diào)查研究報告
- 2025年度創(chuàng)新車間承包經(jīng)營與市場拓展協(xié)議4篇
- 二零二五年度購物中心裝修施工監(jiān)理協(xié)議
- 二零二五年度車輛剮蹭私下調(diào)解及賠償款處理協(xié)議
- 二零二五年度退股協(xié)議書:涉及M企業(yè)股權(quán)變動及退股補償?shù)膮f(xié)議
- 二零二五年度遺產(chǎn)繼承分配與遺產(chǎn)管理公司合作協(xié)議
- 2024-2025學年北京石景山區(qū)九年級初三(上)期末語文試卷(含答案)
- 第一章 整式的乘除 單元測試(含答案) 2024-2025學年北師大版數(shù)學七年級下冊
- 春節(jié)聯(lián)歡晚會節(jié)目單課件模板
- 中國高血壓防治指南(2024年修訂版)
- 糖尿病眼病患者血糖管理
- 抖音音樂推廣代運營合同樣本
- 教育促進會會長總結(jié)發(fā)言稿
- 北師大版(2024新版)七年級上冊數(shù)學第四章《基本平面圖形》測試卷(含答案解析)
- 心理調(diào)適教案調(diào)整心態(tài)積極應對挑戰(zhàn)
- 小學數(shù)學6年級應用題100道附答案(完整版)
- 噴漆外包服務合同范本
評論
0/150
提交評論