国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

以uClinux為背景,介紹中斷驅動的I/O設備驅動的開發

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

掃碼添加小助手

加入工程師交流群

引 言

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

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

本文以uClinux為背景,以一種數據流設備為目標,介紹中斷驅動的I/O設備驅動的開發。

1 應用背景

1.1 硬件描述

本文介紹的驅動程序是應用在一種電信E1線路和以太網互聯設備上的。它是旁路接收E1數據并將其發送到以太網的某一臺服務器上,在服務器上對E1的話路和信令時隙分析。

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

1.2硬件連接

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

以uClinux為背景,介紹中斷驅動的I/O設備驅動的開發

以uClinux為背景,介紹中斷驅動的I/O設備驅動的開發

1.3 FPGA內FIFO的結構

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

2 軟件設計

中斷驅動的I/O是指,輸人數據在中斷期間被填充到緩沖區內,并由讀取該設備的進程取走緩沖區內的數據;輸出緩沖區由寫設備的進程填充,并在中斷期間取走數據。數據緩沖可以將數據的發送和接收與write及read系統調用分離開來,提高系統的整體性能。下面是uCllnux下的中斷程序的設計。

2.1 uClinux下的中斷程序

在uClinux系統中,通過調用下面這個函數向系統申請一個中斷通道(或中斷請求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是中斷號。在本系統中它對應于S3C4510B的21個中斷源。這里用的是中斷源O。handler指向要安裝的中斷處理函數的指針。 flags是一個與中斷管理有關的各種選項的字節掩碼。device傳遞給request_irq的字符串,在/proc/interrupts中用于顯示中斷的擁有者。dev_id指針用于共享的中斷信號線。函數的返回值為O時表示成功,或者返回一個負的錯誤碼。函數返回一EBUJSY通知另一個設備驅動程序已經使用了要申請的中斷信號線。下面是FPGA的設備中斷申請函數。這個函數是在驅動中的fpga_open函數中被調用的。

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”);

}

}

在申請了中斷通道后,系統會響應外部中斷0,而進入中斷處理程序。中斷處理程序的第一步是要先清除S3C4510B的中斷懸掛寄存器的外部中斷O位。這是為了讓FPGA可以產生新的中斷。在uClinux系統中是調用下面的宏來實現的。

責任編輯:lq6

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5608

    瀏覽量

    130016
  • 嵌入式系統
    +關注

    關注

    41

    文章

    3747

    瀏覽量

    133664
  • 微處理器
    +關注

    關注

    11

    文章

    2431

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    MAX6967:10端口恒流LED驅動器與I/O擴展器的深度解析

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

    MAX6966:10端口恒流LED驅動器與I/O擴展器深度解析

    MAX6966/MAX6967:10端口恒流LED驅動器與I/O擴展器深度解析 在電子設計領域,對于LED驅動I/
    的頭像 發表于 02-03 15:35 ?172次閱讀

    MAX6956:2 線接口的 LED 顯示驅動I/O 擴展器的深度解析

    MAX6956:2 線接口的 LED 顯示驅動I/O 擴展器的深度解析 在電子設計領域,LED 顯示驅動I/
    的頭像 發表于 02-03 15:15 ?158次閱讀

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

    MAX6957:2.5V至5.5V,20端口和28端口LED顯示驅動器及I/O擴展器的深入解析 在電子設計中,顯示驅動I/
    的頭像 發表于 02-03 15:15 ?329次閱讀

    MAX6946:10端口恒流LED驅動器與I/O擴展器的技術解析

    MAX6946/MAX6947:10端口恒流LED驅動器與I/O擴展器的技術解析 在電子設計領域,LED驅動器和I/
    的頭像 發表于 02-02 15:55 ?164次閱讀

    MAX6947:10端口恒流LED驅動I/O擴展器的深度解析

    MAX6946/MAX6947:10端口恒流LED驅動I/O擴展器的深度解析 在電子設計領域,LED驅動I/
    的頭像 發表于 02-02 15:50 ?154次閱讀

    【「Linux 設備驅動開發(第 2 版)」閱讀體驗】Linux內核開發基礎

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

    單片機 I/O 口到底能帶多大電流?開發者必看驅動電路指南03

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

    Linux驅動開發的必備知識

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

    【免費送書】成為硬核Linux開發者:《Linux 設備驅動開發(第 2 版)》

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

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

    設備驅動實例,涵蓋設備號管理、核心數據結構填充及用戶與內核空間數據交互,幫助讀者完成從理論到簡單驅動
    發表于 11-17 17:52

    基于RT-Thread的EK-RA2E2 設備驅動移植與應用 | 技術集結

    目錄前言環境配置HelloRT-ThreadGPIO輸入與中斷I2C主機驅動SPI主機驅動ADC設備驅動
    的頭像 發表于 10-05 10:06 ?6172次閱讀
    基于RT-Thread的EK-RA2E2 <b class='flag-5'>設備</b><b class='flag-5'>驅動</b>移植與應用 | 技術集結

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-I2C設備驅動之Linux下的I2C驅動簡介

    設備進行通信。它還負責解析設備的數據格式,并提供一組API或接口供上層應用程序使用。在使用I2C總線時,通常需要同時開發I2C總線
    發表于 04-15 10:39

    飛凌嵌入式ElfBoard ELF 1板卡-I2C設備驅動之Linux下的I2C驅動簡介

    設備進行通信。它還負責解析設備的數據格式,并提供一組API或接口供上層應用程序使用。在使用I2C總線時,通常需要同時開發I2C總線
    發表于 04-15 10:19

    北京迅RK3568開發板OpenHarmony系統南向驅動開發內核HDF驅動框架架構

    北京迅RK3568開發板OpenHarmony系統南向驅動開發內核HDF驅動框架架構
    的頭像 發表于 03-11 14:13 ?1874次閱讀
    北京迅<b class='flag-5'>為</b>RK3568<b class='flag-5'>開發</b>板OpenHarmony系統南向<b class='flag-5'>驅動</b><b class='flag-5'>開發</b>內核HDF<b class='flag-5'>驅動</b>框架架構