網(wǎng)絡(luò)處理器IP2022及其在嵌入式牌照識(shí)別系統(tǒng)中的應(yīng)用
3.2軟件功能
本文引用地址:http://butianyuan.cn/article/82973.htm以太網(wǎng)軟件執(zhí)行以下操作
(1)極性檢測(cè)與反轉(zhuǎn);
(2)載波偵聽;
(3)超時(shí)檢測(cè);
(4)連接完整性測(cè)試與連接脈沖產(chǎn)生;
(5)一旦沖突,隨機(jī)后退;
(6)檢測(cè)到?jīng)_突時(shí),發(fā)送一個(gè)32 bit的jam序列;
(7)以太網(wǎng)包的形成,通過把報(bào)頭、目的地址、源地址、長(zhǎng)度/類型、MAC客戶數(shù)據(jù)放人到發(fā)送緩沖區(qū),軟件必須計(jì)算幀校驗(yàn);
(8)MAC層函數(shù)。
發(fā)送連接通過把Ser/Des的發(fā)送管腳改為通用I/0腳,產(chǎn)生一個(gè)連接脈沖。它使用實(shí)時(shí)時(shí)鐘定時(shí)器產(chǎn)生一16ms的時(shí)基。發(fā)送后,連接脈沖定時(shí)器復(fù)位為0。
接收連接刷新一個(gè)定時(shí)器,上界檢查是在24ms,不執(zhí)行下界檢查。連接脈沖寬度由硬件檢測(cè)。
在發(fā)送幀,包含了駐留在IP2022 PRAM中硬編碼的數(shù)據(jù)。幀包括目的/源地址、幀長(zhǎng)、數(shù)據(jù)和32 bit的CRC。如果通道不忙,則開始傳送幀。若檢測(cè)到?jīng)_突,發(fā)送ISR執(zhí)行以下操作:
(1)停止傳送;
(2)發(fā)送32bit的jam序列;
(3)等待載波空閑;
(4)產(chǎn)生隨機(jī)延遲;
(5)返回,重傳條件集。
在接收幀,每個(gè)接收ISR檢查接收到的包尾EOP(End Of Packet)。一幀接收到時(shí),接收函數(shù)執(zhí)行以下操作:
(1)幀校驗(yàn)序列;
(2)地址檢查,單址通信和多址通信;
(3)檢查保留地址;
(4)幀長(zhǎng)度(太長(zhǎng)或太短)檢查。
沖突檢測(cè)是通過監(jiān)聽載波偵聽指示位來進(jìn)行的。最大的延遲為16bit的時(shí)間。
在MAC層應(yīng)用程序接口,MAC客戶(上層)通過初始化數(shù)據(jù)指針和緩沖區(qū)長(zhǎng)度發(fā)送一個(gè)包。然后調(diào)用“Transmit_Packet”函數(shù),返回值是發(fā)送的結(jié)果。主程序通過輪詢調(diào)用一個(gè)“Receive_ Packet”函數(shù)接收一個(gè)包。非零返回值指示接收到一個(gè)有效的包。
在網(wǎng)絡(luò)緩沖區(qū)(Netbuffer),較高層定義一個(gè)叫netbuffer的數(shù)據(jù)結(jié)構(gòu)。這是訪問TCP/UDP數(shù)據(jù)報(bào)不同元素的最好方法。與原始IP包一起,有一些分配給數(shù)據(jù)包元素(例如:源IP地址、目的IP地址、選項(xiàng)等)的指針。這些指針是靜態(tài)的。與指針相關(guān)的還有長(zhǎng)度域,這樣很容易改變netbuffer的選項(xiàng)數(shù)目。為了構(gòu)成一個(gè)MAC幀,發(fā)送程序必須根據(jù)指針和長(zhǎng)度域從netbuffer中把數(shù)據(jù)級(jí)聯(lián)起來。
4 ipOS應(yīng)用程序的編寫
ipOS操作系統(tǒng)可工作在單任務(wù)模式或多任務(wù)模式下。在大多數(shù)情況下單任務(wù)模式的程序足以滿足實(shí)時(shí)應(yīng)用需求。利用Ubicom的Unity IDE開發(fā)環(huán)境生成的一個(gè)工程,最基本的有3個(gè)文件:entry.s、isr.s和main.c。
4.1引導(dǎo)程序代碼
所有引導(dǎo)程序代碼都放在entry.s文件中。這段代碼在復(fù)位向量處加載了一個(gè)占位程序。當(dāng)IP2022上電時(shí),IP2022跳到復(fù)位向量處執(zhí)行引導(dǎo)程序代碼。該代碼完成以下功能:
(1)更新FCFG寄存器,這樣代碼執(zhí)行速度對(duì)時(shí)鐘頻率而言是優(yōu)化的;
(2)設(shè)置堆棧指針指向數(shù)據(jù)存儲(chǔ)器的末端;
(3)通用寄存器初始化為0;
(4)把.data段從FLASH中加載到數(shù)據(jù)存儲(chǔ)器的開始處;
(5)將.data段之后的數(shù)據(jù)存儲(chǔ)器區(qū)域設(shè)置為0來容納.bss段;
(6)把.pram段從FLASH加載到程序SRAM的開始處;
(7)將程序SRAM區(qū)域設(shè)置為0來容納.pram_data段;
(8)引導(dǎo)程序完成,跳到main()主函數(shù)。
注意:用戶的任何初始化代碼應(yīng)該加入到main()函數(shù)中,不應(yīng)該加到entry.s文件中。
4.2中斷服務(wù)函數(shù)
isr.s是中斷服務(wù)函數(shù)(1SR)文件。當(dāng)一個(gè)異步事件發(fā)生時(shí),就會(huì)執(zhí)行對(duì)應(yīng)的ISR。在大多數(shù)使用虛擬外設(shè)的應(yīng)用中,都要用到定時(shí)器timer0中斷來控制周期性的進(jìn)程。有兩種ISR模板用于幫助基于timer0虛擬外設(shè)的開發(fā)。第一種是“Simple ISR template using timer0”,另一種是“Complex ISR Template”。
如果僅有一個(gè)虛擬外設(shè)或所有的虛擬外設(shè)需要以同樣的頻率執(zhí)行,那么使用第一個(gè)模板是很合適的。對(duì)于較為復(fù)雜的應(yīng)用,可以使用“Complex ISR template”模板。詳細(xì)的例子可參考其SDK幫助文件。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)tcp/ip相關(guān)文章:tcp/ip是什么
評(píng)論