<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 消費(fèi)電子 > 設(shè)計(jì)應(yīng)用 > 基于S3C2410的MPEG-4數(shù)字錄像機(jī)的設(shè)計(jì)與實(shí)現(xiàn)

          基于S3C2410的MPEG-4數(shù)字錄像機(jī)的設(shè)計(jì)與實(shí)現(xiàn)

          作者: 時(shí)間:2007-08-23 來(lái)源:網(wǎng)絡(luò) 收藏

          【摘要】本文介紹了一種嵌入式微處理器專用視頻壓縮芯片IME6400及大容量電子硬盤的。討論了系統(tǒng)總體,介紹了各功能模塊及關(guān)鍵接口電路,介紹了linux下驅(qū)動(dòng)程序及應(yīng)用程序的。
          【關(guān)鍵詞】IME6400Linux設(shè)備驅(qū)動(dòng)

          視頻信息在現(xiàn)代信息化戰(zhàn)爭(zhēng)發(fā)揮日益重要的作用,在視頻監(jiān)控、偵察、機(jī)載或車載視頻記錄等方面都得到了越來(lái)越廣泛應(yīng)用,這種形勢(shì)對(duì)視頻監(jiān)控記錄設(shè)備的研制提出了新的要求:大批量的應(yīng)用要求降低監(jiān)控記錄設(shè)備成本,多樣的應(yīng)用環(huán)境、分散、孤立的監(jiān)控點(diǎn)要求監(jiān)控記錄設(shè)備盡可能一體化、小型化、獨(dú)立、便攜、低功耗、供電方便、性能可靠。針對(duì)這些新問(wèn)題和新要求,筆者設(shè)計(jì)了一種嵌入式系統(tǒng)和編碼標(biāo)準(zhǔn)的,系統(tǒng)集成度高、體積小、功耗低、獨(dú)立、便攜,適合大量的各類視頻監(jiān)控和記錄應(yīng)用。

          1 系統(tǒng)總體設(shè)計(jì)及原理

          圖1

          本系統(tǒng)選擇嵌入式微處理器加專用壓縮編碼芯片的方案,系統(tǒng)電路主體框圖如圖1所示,主要由視音頻解碼芯片、視音頻壓縮編碼芯片、核心微處理器控制模塊、電源模塊以及各種外部接口等組成。系統(tǒng)采用單一5V電源供電,正常啟動(dòng)后,視頻、音頻解碼芯片SAA7114和PCM1800分別對(duì)對(duì)輸入的模擬視頻、音頻信號(hào)進(jìn)行解碼,并分別送入壓縮編碼芯片IME6400進(jìn)行壓縮生成MPEG-4復(fù)合流,控制芯片從IME6400的HOST接口接收數(shù)據(jù)并以文件的形式存儲(chǔ)至硬盤,并完成系統(tǒng)的總體控制。

          2 硬件設(shè)計(jì)

          2.1 視頻音頻解碼及壓縮編碼部分設(shè)計(jì)

          視頻A/D芯片選用Philips公司的SAA7114,該芯片支持多種輸入模式,具有抗混疊濾波、自動(dòng)增益變換、亮度、對(duì)比度調(diào)整等功能。通過(guò)設(shè)定SAA7114的內(nèi)部的配置寄存器93H[6]為1使能其HOST端口,與IME6400的無(wú)縫連接。音頻A/D芯片采用BURR-BROWN公司的PCM1800,它對(duì)模擬音頻進(jìn)行高信噪比20bit數(shù)字采樣,生成PCM數(shù)字音頻流。

          壓縮編碼采用INTIME公司的MPEG-4編碼芯片IME6400。該芯片是一款高性能的單片多通道MPEG-4數(shù)字壓縮編碼芯片,它支持多種編碼模式和比特率控制,并提供了豐富的外圍硬件接口。其外部HOST接口有四種模式,由MODE引腳來(lái)決定,本系統(tǒng)選用異步模式:MODE[1:0] pin = 11。在此模式下,IME6400對(duì)輸入的視頻音頻流進(jìn)行壓縮和復(fù)合,產(chǎn)生MPEG-4的系統(tǒng)流,然后經(jīng)過(guò)輸出端口大小為1K的FIFO緩沖進(jìn)行數(shù)據(jù)的輸出,當(dāng)FIFO滿,其GPIO0腳就產(chǎn)生一個(gè)下降沿的中斷通知主機(jī)讀取FIFO中的數(shù)據(jù),主機(jī)通過(guò)512次(16bit主機(jī))讀IME6400 HOST端口的EncodedStream寄存器完成數(shù)據(jù)的讀取,外部主機(jī)通過(guò)寫一個(gè)不同的值到USER4寄存器來(lái)通知IME6400數(shù)據(jù)傳輸已完成[1]。

          2.2 控制、接口及存儲(chǔ)部分設(shè)計(jì)

          系統(tǒng)控制模塊選用三星的S3C2410微處理器,這是一個(gè)采用ARM920T內(nèi)核,高性能、低功耗、低成本的32位微處理器[2]。為了提高設(shè)計(jì)和應(yīng)用的靈活性,硬件設(shè)計(jì)上采用核心板加底板的模塊化設(shè)計(jì)方法,在核心板上集成了S3C2410的最小系統(tǒng),通過(guò)底板來(lái)擴(kuò)展外部功能。在核心板上主要配置了64MB的NANDFlash 和64MB的SDRAM及提供RTC時(shí)鐘和工作時(shí)鐘的晶體,并將其豐富的外設(shè)接口資源引出。在底板上擴(kuò)展出USB主機(jī)接口、以太網(wǎng)口、UART接口、IDE接口等,以實(shí)現(xiàn)與外部設(shè)備間的數(shù)據(jù)傳輸和通信。

          S3C2410并不帶有IDE控制模塊,接口電路需另行設(shè)計(jì),圖2是IDE接口電路示意圖。電路利用S3C2410的第5個(gè)BANK的片選信號(hào)nGCS4和地址信號(hào)ADD4和ADD5相或后形成IDE接口的兩個(gè)片選信號(hào)nIDE_CS0、nIDE_CS1,S3C2410的讀寫信號(hào)nOE、nWE 則直接用于IDE接口讀寫信號(hào)nIOR、nIOW。該方法將IDE接口映射到了S3C2410的第5個(gè)Memory Bank中, S3C2410將IDE設(shè)備視為普通的存儲(chǔ)器,以相同的方式訪問(wèn),這大大降低了系統(tǒng)軟件開發(fā)的復(fù)雜度[3]。

          采用類似IDE接口的方式將IME6400的HOST接口映射到處理器的第6個(gè)Memory Bank中。系統(tǒng)存儲(chǔ)部分采用體積小、抗震性好、溫度范圍寬的電子硬盤作為存儲(chǔ)器。

          3 軟件設(shè)計(jì)

          由于Linux系統(tǒng)具有穩(wěn)定、高效、易定制、易裁減、開放源碼等優(yōu)點(diǎn),本系統(tǒng)選用嵌入式Linux作為操作系統(tǒng),在此系統(tǒng)下實(shí)現(xiàn)IME6400驅(qū)動(dòng)程序設(shè)計(jì)和相關(guān)應(yīng)用程序設(shè)計(jì)。

          Linux 將設(shè)備當(dāng)作文件處理,編寫linux驅(qū)動(dòng)程序的最主要工作就是file_operations結(jié)構(gòu)中各入口點(diǎn)的實(shí)現(xiàn),即對(duì)應(yīng)于open()、release()、read()、write()、ioctrl()等系統(tǒng)調(diào)用子函數(shù)的編寫[4]。同時(shí)本系統(tǒng)的設(shè)備驅(qū)動(dòng)程序采用靈活性較好的動(dòng)態(tài)加載方式,驅(qū)動(dòng)程序還應(yīng)包括模塊初始化函數(shù)和模塊注銷函數(shù)。下面介紹幾個(gè)主要函數(shù)及其功能:

          l 模塊初始化函數(shù)在驅(qū)動(dòng)程序被加載的時(shí)候被調(diào)用,主要完成以下功能:

          申請(qǐng)掛載總線上的視頻編碼芯片的實(shí)際物理地址空間并且將它映射到虛擬地址空間:

          request_region(BASE_ADDR,0x100,"IME6400")

          vbase = ioremap_nocache(BASE_ADDR,0x100)

          注冊(cè)設(shè)備并獲取主設(shè)備號(hào)[4]

          ret=register_chrdev(IME6400_MAJOR,"ime6400",ime6400_fops)

          設(shè)置并且申請(qǐng)中斷及注冊(cè)中斷處理函數(shù):

          set_external_irq(IRQ_EINT19, EXT_FALLING_EDGE, GPIO_PULLUP_DIS) request_irq(IRQ_EINT19, ime6400_irq, SA_INTERRUPT,"ime6400", NULL)

          注冊(cè)設(shè)備文件系統(tǒng):

          ime6400_devfs_dir= devfs_register(NULL,"ime6400",DEVFS_FL_DEFAULT,IME6400_MAJOR,0, S_IFCHR |S_IRUSR |S_IWUSR |S_IRGRP |S_IWGRP,ime6400_fops, NULL)

          l OPEN函數(shù)遞增模塊使用計(jì)數(shù),防止沒有釋放設(shè)備就把模塊卸載了。

          l READ函數(shù)阻塞等待數(shù)據(jù)緩沖區(qū)滿,然后把數(shù)據(jù)從內(nèi)核空間復(fù)制到用戶空間。

          l IOCTRL函數(shù)實(shí)現(xiàn)從用戶空間向內(nèi)核空間傳遞參數(shù),用于設(shè)置IME6400工作模式。

          l 中斷處理函數(shù)讀取IME6400輸出的MPEG-4碼流數(shù)據(jù)存入內(nèi)核緩沖區(qū),并通知IME6400數(shù)據(jù)讀取完畢。Linux將中斷處理函數(shù)分為兩部分:頂半部(top half)是實(shí)際響應(yīng)中斷的例程,底半部(bottom half)是一個(gè)被頂半部調(diào)用在稍后安全的時(shí)間內(nèi)運(yùn)行的例程[5]。Linux采用Tasklet機(jī)制實(shí)現(xiàn)底半部處理,通過(guò)宏DECLARE_TASKLET可以聲明Tasklet:

          static DECLARE_TASKLET(ime_tasklet,do_tasklet,NULL),其中do_tasklet函數(shù)實(shí)際處理中斷,從IME6400讀取數(shù)據(jù)至內(nèi)核緩沖區(qū)。通過(guò)函數(shù)tasklet_schedule()可以調(diào)度一個(gè)Tasklet運(yùn)行:tasklet_schedule(ime_tasklet) 。

          本系統(tǒng)應(yīng)用程序主要實(shí)現(xiàn)從驅(qū)動(dòng)層接收MPEG-4碼流數(shù)據(jù)并存儲(chǔ)至硬盤,主要采用多線程編程的方式,主程序創(chuàng)建了讀和寫線程兩個(gè)線程:首先,用戶程序讀線程調(diào)用read(),此時(shí)編碼尚未開始,驅(qū)動(dòng)進(jìn)行ime6400_read()無(wú)數(shù)據(jù)可讀,進(jìn)入睡眠態(tài),用戶進(jìn)程被阻塞。此后中斷到來(lái),中斷處理程序從IME6400讀取數(shù)據(jù)存入內(nèi)核緩沖區(qū),若緩沖區(qū)滿則喚醒睡眠的ime6400_read(),并往IME6400的USER4寄存器寫入一個(gè)新值,通知IME6400數(shù)據(jù)已讀取完畢,啟動(dòng)新一輪的編碼。ime6400_read()被喚醒后,將內(nèi)核緩沖區(qū)數(shù)據(jù)拷貝到用戶緩沖區(qū),然后返回并等待用戶進(jìn)程的下一次調(diào)用。ime6400_read()返回后,用戶空間讀到編碼數(shù)據(jù)退出阻塞狀態(tài),然后讀線程以信號(hào)量通知寫線程,由寫線程完成將緩沖區(qū)數(shù)據(jù)存儲(chǔ)至硬盤。

          4 結(jié)束語(yǔ)

          系統(tǒng)目前已完成了初步調(diào)試,可實(shí)時(shí)壓縮存儲(chǔ)最大分辨率為720x576全幀率的4:2:2的彩色視頻,采用2G的電子硬盤,在720x576分辨率下可記錄2小時(shí)以上,且圖像質(zhì)量較好。同時(shí)系統(tǒng)還具有較好的靈活性,可以通過(guò)設(shè)置視頻圖像分辨率大小、量化系數(shù)、幀率等參數(shù),來(lái)達(dá)到對(duì)圖像大小、圖像質(zhì)量及碼率等方面的不同要求,以滿足不同場(chǎng)合應(yīng)用的需要。

          本文作者創(chuàng)新點(diǎn):設(shè)計(jì)并實(shí)現(xiàn)了基于ARM及嵌入式Linux平臺(tái)的MPEG-4壓縮記錄,實(shí)現(xiàn)了系統(tǒng)的一體化、小型化、高性能、低功耗,在硬件設(shè)計(jì)上采用核心板加底板的模塊化設(shè)計(jì)方法,在軟件上完成了Linux系統(tǒng)下驅(qū)動(dòng)程序的開發(fā)。

          參考文獻(xiàn):

          【1】 IME6400 firmware manual. Intime Corporation. 2003
          【2】 S3C2410X 32-BIT RISC MICROPROCESSOR USER’S MANUAL. Samsung Electronics.2001
          【3】 孟柯 李鳳亭 馬惠敏,用于視頻監(jiān)控的便攜式數(shù)字設(shè)計(jì),電視技術(shù),2002.7
          【4】 錢晨 徐榮華 王欽若,基于linux操作系統(tǒng)的設(shè)備驅(qū)動(dòng)程序開發(fā),微計(jì)算機(jī)信息,2004.09, 131-133
          【5】 魏永明 耿岳 鐘書毅 譯,Linux設(shè)備驅(qū)動(dòng)程序(第三版),中國(guó)電力出版社,2006.1



          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();