日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

以uClinux為背景,介紹中斷驅(qū)動的I/O設(shè)備驅(qū)動的開發(fā)

電子工程師 ? 來源:工程網(wǎng) ? 2021-03-25 10:27 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

引 言

在32位微處理器逐漸成為嵌入式系統(tǒng)主流的同時,嵌入式應(yīng)用也變得越來越復(fù)雜。許多嵌入式系統(tǒng)都不得不借助于專用的操作系統(tǒng)來支撐自己的應(yīng)用。uClinux作為類Unix操作系統(tǒng),繼承了Linux的各種優(yōu)秀的品質(zhì),成為首選的嵌入式系統(tǒng)的操作系統(tǒng)。

為自己的設(shè)備在操作系統(tǒng)下添加驅(qū)動程序,是嵌入式設(shè)計(jì)必不可少的部分。針對不同的設(shè)備類型,選擇合適的驅(qū)動程序的模式,同樣也是十分重要的。通常的設(shè)備驅(qū)動采用直接I/O的方式,如存儲器、看門狗等;而對于象網(wǎng)絡(luò)這樣的數(shù)據(jù)流設(shè)備的驅(qū)動,則應(yīng)該用到中斷機(jī)制。

本文以uClinux為背景,以一種數(shù)據(jù)流設(shè)備為目標(biāo),介紹中斷驅(qū)動的I/O設(shè)備驅(qū)動的開發(fā)。

1 應(yīng)用背景

1.1 硬件描述

本文介紹的驅(qū)動程序是應(yīng)用在一種電信E1線路和以太網(wǎng)互聯(lián)設(shè)備上的。它是旁路接收E1數(shù)據(jù)并將其發(fā)送到以太網(wǎng)的某一臺服務(wù)器上,在服務(wù)器上對E1的話路和信令時隙分析。

該設(shè)備中的處理器是采用三星公司出品的網(wǎng)絡(luò)型ARM處理器S3C4510B。E1線路接口采用Dallas半導(dǎo)體公司的專用El接口單元(LIU)芯片 DS2148,它完成波形整理、時鐘恢復(fù)和HDB3解碼。DS2148將整理后的E1數(shù)據(jù)流送給一片Altera公司的Cyclone系列的 FPGA(EPlC3T144C8),它將串行的E1數(shù)據(jù)流存入到FIFO,再通過ARM的32位外部總線將數(shù)據(jù)傳送給ARM。ARM將數(shù)據(jù)打包通過以太網(wǎng)發(fā)送到服務(wù)器上。圖l所示是本系統(tǒng)的硬件框圖。本文主要介紹接在ARM的外部總線上的FPGA,在uClinux下的驅(qū)動程序中斷機(jī)制的設(shè)計(jì)。

1.2硬件連接

S3C4510B處理器和FPGA的連接電路如圖2所示。

以uClinux為背景,介紹中斷驅(qū)動的I/O設(shè)備驅(qū)動的開發(fā)

以uClinux為背景,介紹中斷驅(qū)動的I/O設(shè)備驅(qū)動的開發(fā)

1.3 FPGA內(nèi)FIFO的結(jié)構(gòu)

在FPGA內(nèi)部設(shè)置了兩個FIFO。為了防止ARM和FPGA操作的沖突,ARM和FPGA對兩個FIFO操作采用乒乓方式,這樣ARM和FPGA就可以同時操作不同的FIFO,而不需要等待。FIFO的大小是4096位,能容納一個E1復(fù)幀的數(shù)據(jù)量。當(dāng)FPGA將一個FIFO填滿后,會用中斷的方式通知ARM來讀FIFO,同時FPGA會置內(nèi)部的F1FO狀態(tài)寄存器。 FIFO)狀態(tài)寄存器命名為fpga_imf,是一個32位的寄存器,用其中某幾位置“l(fā)”,表示對應(yīng)的FIFO需要讀取。

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

中斷驅(qū)動的I/O是指,輸人數(shù)據(jù)在中斷期間被填充到緩沖區(qū)內(nèi),并由讀取該設(shè)備的進(jìn)程取走緩沖區(qū)內(nèi)的數(shù)據(jù);輸出緩沖區(qū)由寫設(shè)備的進(jìn)程填充,并在中斷期間取走數(shù)據(jù)。數(shù)據(jù)緩沖可以將數(shù)據(jù)的發(fā)送和接收與write及read系統(tǒng)調(diào)用分離開來,提高系統(tǒng)的整體性能。下面是uCllnux下的中斷程序的設(shè)計(jì)。

2.1 uClinux下的中斷程序

在uClinux系統(tǒng)中,通過調(diào)用下面這個函數(shù)向系統(tǒng)申請一個中斷通道(或中斷請求IRQ),并在處理完以后釋放掉它。

mt reqLIest_irq(unsigned int irq,void(*handler)(int,vold*,

struct pt_regs*),unsigned 10ng flags,const chat*device,

vold*dev_id);

void free_irq(unstgned int lrq,VOid*dev_id);

其中,irq是中斷號。在本系統(tǒng)中它對應(yīng)于S3C4510B的21個中斷源。這里用的是中斷源O。handler指向要安裝的中斷處理函數(shù)的指針。 flags是一個與中斷管理有關(guān)的各種選項(xiàng)的字節(jié)掩碼。device傳遞給request_irq的字符串,在/proc/interrupts中用于顯示中斷的擁有者。dev_id指針用于共享的中斷信號線。函數(shù)的返回值為O時表示成功,或者返回一個負(fù)的錯誤碼。函數(shù)返回一EBUJSY通知另一個設(shè)備驅(qū)動程序已經(jīng)使用了要申請的中斷信號線。下面是FPGA的設(shè)備中斷申請函數(shù)。這個函數(shù)是在驅(qū)動中的fpga_open函數(shù)中被調(diào)用的。

int fpga_open(struct inode*inocle,stuct_file*file){

int result;

result=request_irq(FPGA_IRQ,δfpga_isr,SA_INTER-RUPT,″fpga″,NULL);

if(resuIt!=O){

printk(KERN_INFO”Can not register FPGA ISR!\n”);}else{

printk(KERN_INFO″FPGA ISR Register successfully!\n”);

}

}

在申請了中斷通道后,系統(tǒng)會響應(yīng)外部中斷0,而進(jìn)入中斷處理程序。中斷處理程序的第一步是要先清除S3C4510B的中斷懸掛寄存器的外部中斷O位。這是為了讓FPGA可以產(chǎn)生新的中斷。在uClinux系統(tǒng)中是調(diào)用下面的宏來實(shí)現(xiàn)的。

責(zé)任編輯:lq6

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5620

    瀏覽量

    130454
  • 嵌入式系統(tǒng)
    +關(guān)注

    關(guān)注

    41

    文章

    3831

    瀏覽量

    133910
  • 微處理器
    +關(guān)注

    關(guān)注

    11

    文章

    2440

    瀏覽量

    86174
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    如何在 Yocto 中集成由 HID 設(shè)備控制的 I2C 觸摸驅(qū)動程序?

    我使用的是匯頂科技觸摸,它通過 hid-ft260 等 hid 設(shè)備連接到 imx 處理器。 如何在 Yocto 中集成由 HID 設(shè)備控制的 I2C 觸摸驅(qū)動程序。目前,我正在 HI
    發(fā)表于 04-23 07:22

    Linux內(nèi)核驅(qū)動開發(fā)的技術(shù)核心精要

    嵌入式Linux驅(qū)動開發(fā)是連接硬件與操作系統(tǒng)的關(guān)鍵環(huán)節(jié)。隨著內(nèi)核演進(jìn)(如Linux 6.13)和硬件復(fù)雜度提升,開發(fā)者需掌握并發(fā)控制、中斷分層、內(nèi)存管理、
    發(fā)表于 03-10 13:56

    MAX6967:10端口恒流LED驅(qū)動器與I/O擴(kuò)展器的深度解析

    微處理器提供10個額定電壓7V的I/O端口。每個端口可獨(dú)立配置20mA或10mA的恒流LED驅(qū)動器(靜態(tài)或PWM)、開漏邏輯輸出或
    的頭像 發(fā)表于 02-03 15:35 ?288次閱讀

    MAX6966:10端口恒流LED驅(qū)動器與I/O擴(kuò)展器深度解析

    MAX6966/MAX6967:10端口恒流LED驅(qū)動器與I/O擴(kuò)展器深度解析 在電子設(shè)計(jì)領(lǐng)域,對于LED驅(qū)動I/
    的頭像 發(fā)表于 02-03 15:35 ?438次閱讀

    MAX6956:2 線接口的 LED 顯示驅(qū)動I/O 擴(kuò)展器的深度解析

    MAX6956:2 線接口的 LED 顯示驅(qū)動I/O 擴(kuò)展器的深度解析 在電子設(shè)計(jì)領(lǐng)域,LED 顯示驅(qū)動I/
    的頭像 發(fā)表于 02-03 15:15 ?338次閱讀

    MAX6957:2.5V至5.5V,20端口和28端口LED顯示驅(qū)動器及I/O擴(kuò)展器的深入解析

    MAX6957:2.5V至5.5V,20端口和28端口LED顯示驅(qū)動器及I/O擴(kuò)展器的深入解析 在電子設(shè)計(jì)中,顯示驅(qū)動I/
    的頭像 發(fā)表于 02-03 15:15 ?820次閱讀

    MAX6946:10端口恒流LED驅(qū)動器與I/O擴(kuò)展器的技術(shù)解析

    MAX6946/MAX6947:10端口恒流LED驅(qū)動器與I/O擴(kuò)展器的技術(shù)解析 在電子設(shè)計(jì)領(lǐng)域,LED驅(qū)動器和I/
    的頭像 發(fā)表于 02-02 15:55 ?338次閱讀

    MAX6947:10端口恒流LED驅(qū)動I/O擴(kuò)展器的深度解析

    MAX6946/MAX6947:10端口恒流LED驅(qū)動I/O擴(kuò)展器的深度解析 在電子設(shè)計(jì)領(lǐng)域,LED驅(qū)動I/
    的頭像 發(fā)表于 02-02 15:50 ?368次閱讀

    【「Linux 設(shè)備驅(qū)動開發(fā)(第 2 版)」閱讀體驗(yàn)】Linux內(nèi)核開發(fā)基礎(chǔ)

    感謝電子發(fā)燒友論壇提供的《Linux設(shè)備驅(qū)動開發(fā)(第2版)》閱讀機(jī)會,測評將從Linux內(nèi)核開發(fā)基礎(chǔ)、Linux內(nèi)核平臺抽象和設(shè)備
    發(fā)表于 01-12 22:45

    單片機(jī) I/O 口到底能帶多大電流?開發(fā)者必看驅(qū)動電路指南03

    能輸出多大的電流?不同的負(fù)載應(yīng)該如何驅(qū)動?今天我們就來系統(tǒng)講清楚這個問題。一、GPIO的電流輸出能力有多大?不同MCU的I/O驅(qū)動能力差異很大。一般情況下,數(shù)據(jù)手冊會
    的頭像 發(fā)表于 01-04 09:15 ?956次閱讀
    單片機(jī) <b class='flag-5'>I</b>/<b class='flag-5'>O</b> 口到底能帶多大電流?<b class='flag-5'>開發(fā)</b>者必看<b class='flag-5'>驅(qū)動</b>電路指南03

    Linux驅(qū)動開發(fā)的必備知識

    。 熟悉 GNU C 的擴(kuò)展特性,如內(nèi)聯(lián)匯編、特殊的語法等。 3、硬件知識: 了解硬件設(shè)備的工作原理,包括寄存器、中斷、DMA 等。 熟悉常見的硬件接口,如 PCI、USB、I2C 等。 4
    發(fā)表于 12-04 07:58

    【免費(fèi)送書】成為硬核Linux開發(fā)者:《Linux 設(shè)備驅(qū)動開發(fā)(第 2 版)》

    Linux系統(tǒng)的設(shè)備驅(qū)動開發(fā),一直給人門檻較高的印象,主要因內(nèi)核機(jī)制抽象、需深度理解硬件原理、開發(fā)調(diào)試難度大所致。2021年,一本講解驅(qū)動
    的頭像 發(fā)表于 11-18 08:06 ?1872次閱讀
    【免費(fèi)送書】成為硬核Linux<b class='flag-5'>開發(fā)</b>者:《Linux <b class='flag-5'>設(shè)備</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>(第 2 版)》

    【書籍評測活動NO.67】成為硬核Linux開發(fā)者:《Linux 設(shè)備驅(qū)動開發(fā)(第 2 版)》

    設(shè)備驅(qū)動實(shí)例,涵蓋設(shè)備號管理、核心數(shù)據(jù)結(jié)構(gòu)填充及用戶與內(nèi)核空間數(shù)據(jù)交互,幫助讀者完成從理論到簡單驅(qū)動
    發(fā)表于 11-17 17:52

    基于RT-Thread的EK-RA2E2 設(shè)備驅(qū)動移植與應(yīng)用 | 技術(shù)集結(jié)

    目錄前言環(huán)境配置HelloRT-ThreadGPIO輸入與中斷I2C主機(jī)驅(qū)動SPI主機(jī)驅(qū)動ADC設(shè)備驅(qū)動
    的頭像 發(fā)表于 10-05 10:06 ?6367次閱讀
    基于RT-Thread的EK-RA2E2 <b class='flag-5'>設(shè)備</b><b class='flag-5'>驅(qū)動</b>移植與應(yīng)用 | 技術(shù)集結(jié)

    zephyr設(shè)備驅(qū)動程序模型

    ? ? 1:Zephyr 內(nèi)核支持多種設(shè)備驅(qū)動程序。驅(qū)動程序是否可用取決于board 和驅(qū)動程序。 Zephyr 設(shè)備模型
    的頭像 發(fā)表于 07-29 10:34 ?865次閱讀
    zephyr<b class='flag-5'>設(shè)備</b><b class='flag-5'>驅(qū)動</b>程序模型
    武川县| 廊坊市| 新竹市| 固原市| 枣阳市| 布拖县| 京山县| 化隆| 姜堰市| 杨浦区| 淳化县| 涿鹿县| 闽清县| 庆元县| 陈巴尔虎旗| 邓州市| 宁明县| 崇礼县| 潢川县| 常德市| 中山市| 河曲县| 普安县| 襄垣县| 遵义市| 金华市| 许昌市| 弋阳县| 马边| 孝感市| 仁怀市| 温泉县| 汉阴县| 宝清县| 浮梁县| 上饶县| 新营市| 当雄县| 静乐县| 丰县| 中山市|