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

    文章

    5590

    浏览量

    129092
  • 嵌入式系统
    +关注

    关注

    41

    文章

    3716

    浏览量

    133114
  • 微处理器
    +关注

    关注

    11

    文章

    2416

    浏览量

    85352
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Linux驱动开发的必备知识

    。 熟悉 GNU C 的扩展特性,如内联汇编、特殊的语法等。 3、硬件知识: 了解硬件设备的工作原理,包括寄存器、中断、DMA 等。 熟悉常见的硬件接口,如 PCI、USB、I2C 等。 4
    发表于 12-04 07:58

    【免费送书】成为硬核Linux开发者:《Linux 设备驱动开发(第 2 版)》

    Linux系统的设备驱动开发,一直给人门槛较高的印象,主要因内核机制抽象、需深度理解硬件原理、开发调试难度大所致。2021年,一本讲解驱动
    的头像 发表于 11-18 08:06 467次阅读
    【免费送书】成为硬核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 5742次阅读
    基于RT-Thread的EK-RA2E2 <b class='flag-5'>设备</b><b class='flag-5'>驱动</b>移植与应用 | 技术集结

    zephyr设备驱动程序模型

        1:Zephyr 内核支持多种设备驱动程序。驱动程序是否可用取决于board 和驱动程序。 Zephyr 设备模型
    的头像 发表于 07-29 10:34 490次阅读
    zephyr<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 1565次阅读
    北京迅<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>框架架构

    恩智浦无线连接SoC开发的统一WiFi驱动程序多芯片多接口驱动(MXM)

    本文将重点介绍恩智浦无线连接SoC开发的统一Wi-Fi驱动程序——多芯片多接口驱动 (MXM),详细说明其架构设计如何简化基于恩智浦无线连
    发表于 02-28 09:13 1137次阅读
    恩智浦<b class='flag-5'>为</b>无线连接SoC<b class='flag-5'>开发</b>的统一WiFi<b class='flag-5'>驱动</b>程序多芯片多接口<b class='flag-5'>驱动</b>(MXM)

    I/O接口与I/O端口的区别

    在计算机系统中,I/O接口与I/O端口是实现CPU与外部设备数据交换的关键组件,它们在功能、结构、作用及运作机制上均存在显著差异,却又相互协
    的头像 发表于 02-02 16:00 2854次阅读

    单片机I/O接口的传输方式

    着数据传输的任务,还影响着整个系统的性能和可靠性。本文将深入探讨单片机I/O接口的传输方式,包括无条件传送、查询传送、中断传送和DMA传送等,以期单片机应用
    的头像 发表于 02-02 15:56 1658次阅读

    I/O中断问题

    一个I/O中断,initP3的中断使能,能用P3.2/P3.3两个中断吗?
    发表于 01-26 09:35

    RK3568开发驱动指南Linux中通用SPI设备驱动

    RK3568开发驱动指南Linux中通用SPI设备驱动
    的头像 发表于 01-23 11:02 3449次阅读
    迅<b class='flag-5'>为</b>RK3568<b class='flag-5'>开发</b>板<b class='flag-5'>驱动</b>指南Linux中通用SPI<b class='flag-5'>设备</b><b class='flag-5'>驱动</b>

    宜科数智化I/O模块驱动汽车涂胶设备高效升级

    。       涂胶设备工艺复杂,需要精确控制涂胶过程中的各种参数,如温度、速度、出胶量等,同时需要实时监测涂胶温度,确保涂胶质量,控制器和I/O系统适应不同使用环境和使用需求,往往
    的头像 发表于 01-09 15:49 614次阅读

    全志模块设备开发I2C编程基础介绍

    eeprom例简要概述操作过程): ​第一,打开I2C控制器文件节点: fd =open(“/dev/i2c-0”, O_RDWR);
    发表于 12-16 09:45