在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 單片機圖像采集與網(wǎng)絡(luò)傳輸

            單片機圖像采集與網(wǎng)絡(luò)傳輸

            作者: 時間:2012-03-20 來源:網(wǎng)絡(luò) 收藏

            網(wǎng)絡(luò)攝像頭的、打包、發(fā)送的軟件流程如圖2所示,對應(yīng)的主程序源碼見例程1。為了便于接收端正確判斷每幀的開始,主程序在發(fā)送1幀數(shù)據(jù)前,先用Send_lwm( ) 函數(shù)發(fā)送特征字為“lwm”的4字節(jié)長的數(shù)據(jù)包(該函數(shù)從略),然后再發(fā)送圖像數(shù)據(jù)。
            void main(void) //(例程1--循環(huán)和發(fā)送圖像數(shù)據(jù)的主程序):
            { init_8019( ); // RTLS8019AS初始化。
            while(1) // 循環(huán)和發(fā)送圖像:
            { img_capture( ); // 采集1幀圖像。
            Send_lwm( ); // 發(fā)送圖像開始的特征字“lwm”
            Send_img( ); // 發(fā)送1幀圖像數(shù)據(jù)。
            }
            }

            3.2 以太網(wǎng)控制芯片的初始化

            RTL8019AS 芯片有32個寄存器地址,映射到4個頁面,每頁有16個寄存器。本系統(tǒng)只用0頁的14個(00-01H,04-0BH,0D-0EH,0F-10H)寄存器。程序先定義reg00-reg10, 然后用初始化函數(shù)init_8019( )對RTL8019AS各寄存器進行配置:
            #define XBYTE ((unsigned char volatile xdata *) 0)
            #define reg00 XBYTE[0x8000] //對應(yīng)300H A15=1, A14=0,A13=A12=A11=A10=A9=A8=0
            ………………..
            #define reg10 XBYTE[0x9000] //對應(yīng)310H A15=1, A14=0,A13=0,A12=1,A11=A10=A9=A8=0
            sbit RST8019 = P1 ^ 5; // RST8019AS的硬件復(fù)位端。
            void init_8019(void) // (例程2--RTL8019AS的初始化):
            { UINT C1; for(C1=0;C11000;C1++); // 軟件延時,確保芯片進入穩(wěn)定狀態(tài)
            RST8019=1; for(C1=0;C11000;C1++); // 硬件復(fù)位、延時以確保芯片完全復(fù)位
            RST8019=0; for(C1=0;C11000;C1++); // 硬件復(fù)位、延時以確保芯片完全復(fù)位
            reg00=0x21; // 選擇第0頁寄存器,并使芯片停止收發(fā)和DMA操作reg0e=0xC8; // DCR: 采用普通、8位DMA方式
            reg07=0xFF; reg0f=0x00; // 清除和屏蔽所有中斷(本系統(tǒng)未采用中斷)
            reg0d=0xE0; // TCR:采用普通發(fā)送模式、允許CRC產(chǎn)生和校驗
            }


            為了節(jié)省資源,上述對RTLS8019AS的初始化中,凡是與發(fā)送無關(guān)的寄存器都沒有設(shè)置。發(fā)送時所要用的組播地址、物理地址和IP地址,則在打包時再封裝到各協(xié)議層數(shù)據(jù)包的頭部。

            3.3 圖像數(shù)據(jù)的采集

            31.gif

            負責圖像采集的DB200攝像模塊內(nèi)部有數(shù)據(jù)、狀態(tài)、采集控制和地址控制4個寄存器,表1是它們的尋址方式。對各寄存器的操作規(guī)則如下:

            (1)寫操作-對采集控制寄存器(CAP_CTRLr)D0位寫1,可啟動采集過程;對地址控制寄存器(CAP_INCr)D0位寫一次1,其圖像緩存的地址就加1。

            (2)讀操作-如果狀態(tài)寄存器(CAP_STAUSr)的D0=1,表示可以開始圖像采集過程;D1=1表示已完成1幀圖像采集,可以讀取數(shù)據(jù)寄存器(CAP_DATAr)的圖像數(shù)據(jù)。

            DB200工作的地址范圍是:1100 0000 0000 0000 ~ 1110 0000 0000 0000 = 0C00H ~ 0E00H。據(jù)此,我們可寫出如下圖像采集函數(shù)(例程3):
            #define CAP_CONTROLr XBYTE[0X0C000] //A15=1=A14, A13=0
            #define CAP_STATUSr XBYTE[0X0C000]
            void img_capture( ) // (例程3--圖像采集):
            { while(!(CAP_STATUSr 0x01)); // 檢查DB200是否準備就緒?
            CAP_CONTROLr=0xff; // 啟動采集1幀圖像過程。
            while(!(CAP_CONTROLr 0x02)); // 是否采集完1幀圖像?是就結(jié)束。
            }
            img_capture( )函數(shù)只完成了1幀圖像數(shù)據(jù)的采集,采集好的數(shù)據(jù)存在DB200的數(shù)據(jù)緩沖區(qū)內(nèi),留待Send_img( )函數(shù)讀取和發(fā)送。Send_img( )是以讀1行圖像數(shù)據(jù)就發(fā)送1行的方式工作。其源碼如下:
            #define CAP_INCr XBYTE[0X0E000] //A15=1=A14,A13=1
            #define CAP_DATAr XBYTE[0X0E000]
            extern UCHAR xdata outbuf[1520];
            void Send_img( ) // (例程4--圖像數(shù)據(jù)的讀取和發(fā)送):
            { UINT data Colon, Line ;
            for(Line=0;Line288;Line++) // 288行
            { for(Colon=0;Colon385;Colon++) // 385 列
            { databuf[Colon]=CAP_DATAr; // 從 db200讀1個像點到databuf。
            CAP_INCr=0xff; // db200圖像數(shù)據(jù)緩存地址加1。
            }
            udp_send(databuf, UDP_PORT, 386); // 封裝并發(fā)送1行圖像數(shù)據(jù)。
            }
            }



            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉