[国嵌攻略][132][串口驱动实现]

如何开发Linux驱动程序

一般情况下都会有现成的驱动程序,不需要从零开始开发驱动程序。所以Linux驱动开发主要分为两个步骤:1.读得懂驱动程序;2.写的了核心功能。

 

发送中断处理程序

发送中断处理函数在/drivers/serial/samsung.c的s3c24xx_serial_tx_chars

 

循环缓冲

struct circ_buf {

    char *buf;

    int head;

    int tail;

};

存数据的时候移动head,取数据的时候移动tail。

static irqreturn_t s3c24xx_serial_tx_chars(int irq, void *id){    //判断发送流控    struct s3c24xx_uart_port *ourport = id;struct uart_port *port = &ourport->port;if(port->x_char){   //是否有发送流控字符//写入流控字符wr_regb(port, S3C2410_UTXH, port->x_char);//修改发送计数port->icount.tx++;//清除流控字符port->x_char = 0;return IRQ_HANDLED;   //中断处理完成
    }//判断数据发送struct circ_buf *xmit = &port->state->xmit;if(uart_circ_empty(xmit) || uart_tx_stopped(port)){   //是否循环缓冲为空或者串口停止发送
        s3c24xx_serial_stop_tx(port);return IRQ_HANDLED;   //中断处理完成
    }//循环发送数据int count = 256;while(!uart_circ_empty(xmit) && (count-- > 0)){   //是否循环缓冲不为空并且发送数据小于256字节//判断循环缓冲if(rd_regl(port, S3C2410_UFSTAT) & (1<<14)){   //是否循环缓冲已满break;}//写入发送数据wr_regb(port, S3C2410_UTXH, xmit->buf[xmit->tail]);//移动缓冲位置xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);   //循环移动尾部//修改发送计数port->icount.tx++;}//唤醒阻塞进程if(uart_circ_chars_pending(xmit) < 256){   //是否循环缓冲数目小于256
        uart_write_wakeup(port);}//关闭发送使能if(uart_circ_empty(xmit)){   //是否循环缓冲为空
        s3c24xx_serial_stop_tx(port);}return IRQ_HANDLED;   //中断处理完成
}

 

接收中断处理程序

接收中断处理函数在/drivers/serial/samsung.c的s3c24xx_serial_rx_chars

 

static irqreturn_t s3c24xx_serial_rx_chars(int irq, void *dev_id){//循环接收数据struct s3c24xx_uart_port *ourport = dev_id;struct uart_port *port = &ourport->port;int max_count = 64;while((max_count--) > 0){   //是否接收数据小于64字节//判断接收缓冲unsigned int ufstat;ufstat = rd_regl(port, S3C2410_UFSTAT);if((ufstat & 0x3F) == 0){   //是否接收缓冲为空break;}//读取错误状态unsigned int uerstat;uerstat = rd_regl(port, S3C2410_UERSTAT);//读取接收数据unsigned int ch;ch = rd_regb(port, S3C2410_URXH);//写入接收缓冲
        uart_insert_char(port, uerstat, S3C2410_UERSTAT_OVERRUN, ch, TTY_NORMAL);}//写入线路规程struct tty_struct *tty = port->state->port.tty;tty_flip_buffer_push(tty);return IRQ_HANDLED;   //中断处理完成
}

 

转载于:https://www.cnblogs.com/d442130165/p/5265703.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373470.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Regions ADF 11g进行Master Detail CRUD操作

你好 此示例演示了如何使用Regions在表之间创建Master Detail关系。 区域的主要目的是可重用性的概念。 使用区域和有限的任务流&#xff0c;我们可以将页面重用到许多其他页面中&#xff0c;以保持相同的功能并采用更简洁的方法。 下载示例应用程序。 在此示例中&#xff0c;…

[转] vim自定义配置 和 在ubnetu中安装vim

Ubuntu 12.04安装vim和配置 问题&#xff1a; ubuntu默认没有安装vim&#xff0c;出现&#xff1a; jygubuntu:~$ vim test.cThe program vim can be found in the following packages: * vim * vim-gnome * vim-tiny * vim-athena * vim-gtk * vim-noxTry: sudo apt-get insta…

win7 mysql php apache myadmin_windows下Apache+mysql+php+phpMyAdmin的安装及配置 | 学步园

1、下载Apache ( httpd-2.2.25-win32-x86-no_ssl.msi )http://httpd.apache.org/download.cgi#apache24根据提示安装到路径(建议自定义路径)&#xff0c;NetWork Domain和Server Name都输入 localhost(访问时使用的域名);2、下载mysql (mysql-5.5.34-win32.msi )http://dev.m…

(15) PHP 随笔---LAMP Linux基本操作 对文件、目录的操作

◇对目录的操作&#xff1a; ◇创建目录&#xff1a; mkdir Xmu //在当前目录下创建一个名为Xmu的目录 ◇创建多个级别目录关系&#xff1a; mkdir -p newdir/newdir/newdir //在当前目录下创建多个连续目录&#xff0c;-p的意思是以递归的方式 ◇移动目录(也可以针对…

具有NetBeans,嵌入式GlassFish,JPA和MySQL数据源的Arquillian

这是一个偶然的帖子。 我一直在研究交易CDI观察者&#xff0c;并尝试使用嵌入式GlassFish对它进行一些集成测试。 但是令人惊讶的是&#xff0c;这种方法不能很好地工作&#xff0c;我仍在弄清楚&#xff0c;使用普通的嵌入式GlassFish时问题出在哪里。 同时&#xff0c;我转到…

hmcl手机版下载_最新HMCL下载地址

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼[16:49:27][AWT-EventQueue-0/ERROR]---- Hello Minecraft! Crash Report ----Version: 2.3.1Time: 2016-7-14Thread: Thread[AWT-EventQueue-0,6,main]Advice:无建议。Content:java.lang.IllegalStateException: Buffers have not…

为什么我会在2012年的新企业Java项目中使用Java EE而不是Spring

这个问题经常出现。 我的新项目也在2011年11月发布。 在这个新的Enterprise Java项目中&#xff0c;我将使用Java EE&#xff08;JEE&#xff09;代替Spring框架。 我知道&#xff1a;关于此主题的文章&#xff0c;博客和论坛讨论都可以找到。 为什么还需要一个&#xff1f; 因…

jsp mysql 音乐网站_Maven+JSP+SSM+Mysql实现的音乐网站

项目简介本系统基于MavenJSPSSMMysql实现的音乐网站。主要实现的功能有音乐播放、下载、上传等几个模块。难度等级&#xff1a;中等技术栈编辑器Eclipse Version: 2020-03 (4.15.0)前端技术基础&#xff1a;htmlcssJavaScript框架&#xff1a;JQueryBootstrap后端技术SpringSpr…

遥感影像滤波处理软件 — timesat3.2

最近因为要做遥感影像的滤波处理&#xff0c;经过女神推荐&#xff0c;决定用Timesat&#xff0c;可是该软件3.1版本只适合xp系统以及2011的matlab&#xff0c;后来在官网上找到了最新的3.2版本。支持64位操作系统以及2014的matlab。大家可以直接上官网&#xff08;http://www.…

持久化API(JPA)系列(三)实体Bean的开发技术-建立与数据库的连接

在EJB 2.x中。EJB有3种类型的Bean。各自是会话Bean&#xff08;Session Bean&#xff09;、消息驱动Bean&#xff08;Message-Driven Bean&#xff09;和实体Bean&#xff08;Entity Bean&#xff09;。 随着EJB 3的推出&#xff0c;EJB2.x中的实体Bean逐渐被JPA规范所替代&…

WebSphere Classloader内存泄漏预防

解决应用程序类加载器泄漏 应用领域 倾向于&#xff1a; 使用应用程序类加载器中的Runnable实现启动新线程。 即使JEE编程模型不支持此功能&#xff0c;客户也经常直接创建新线程或通过使用间接创建它们 计时器 客户必须确保在停止相应的应用程序&#xff08;或WAR模块&…

airflow sql_alchemy_conn mysql_airflow使用mysql数据库,LocalExecutor并发调度

mysql-airflow在mysql上执行create database airflow; —— 创建数据库GRANT all privileges on airflow.* TO airflow% IDENTIFIED BY 123456; —— 将数据库airflow的所有权限授权airflow用户&#xff0c;密码123456且该用户可在任何IP段登录操作FLUSH PRIVILEGES; —— 刷新…

【SAP业务模式】之ICS(四):组织单元的配置

SAP的ICS业务后台配置主要有以下几个配置点&#xff1a; 1、组织单元的配置&#xff08;公司代码、销售组织、工厂、采购组织等&#xff09;&#xff1b; 2、主数据的部分&#xff1b; 3、订单和开票的定价过程&#xff1b; 4、开票输出类型&#xff1b; 5、公司间发票的配置&a…

poj-2478 Farey Sequence(dp,欧拉函数)

题目链接&#xff1a; Farey Sequence Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 14230 Accepted: 5624Description The Farey Sequence Fn for any integer n with n > 2 is the set of irreducible rational numbers a/b with 0 < a < b < n a…

Twitter4j和Esper:在Twitter上跟踪用户情绪

对于复杂事件处理和Twitter API的新手&#xff0c;我希望这是一个简短的教程&#xff0c;可以帮助他们Swift起步。 管理大数据并从中挖掘有用的信息是当前技术中最热门的讨论主题。 来自Twitter&#xff0c;Facebook和Linkedin等社交网络的半结构化数据的爆炸式增长使Hadoop&am…

webase crud查看所有表_Laravel-Gii 可视化代码生成工具 CRUD +GUI

Laravel-Gii 可视化代码生成工具 CRUD GUI适用于快速B端后台开发&#xff0c;根据MySQL的表结构生成对应的Model、Observer、Controller、View、Route等相关项目文件[TOC]注意因为是解析MySQL的表结构&#xff0c;并且根据字段生成模板&#xff0c;所以目前生成的Model类时只支…

20145231第二周Java学习笔记

20145231 《Java程序设计》第2周学习总结 教材学习内容总结 本周的学习采用的依然是先看课本&#xff0c;再看视频&#xff0c;然后实践敲代码&#xff0c;最后根据学习笔记总结完成博客。 第三章&#xff1a;基础语法 知识点比较多比较零碎&#xff0c;整理的都是实际操作中可…

JavaFX 2.0和Scala,像牛奶和饼干

JavaFX 2.0和Scala都是很好的技术&#xff0c;但是一起使用时效果会更好。 JavaFX 2.0是一种功能强大的富客户端技术&#xff0c;具有先进的图形&#xff0c;动画和媒体功能。 Scala是一种简单但功能强大的语言&#xff0c;具有用于编写特定于域的语言&#xff08;DSL&#xff…

ASP.NET WebAPi之断点续传下载(上)

前言 之前一直感觉断点续传比较神秘&#xff0c;于是想去一探究竟&#xff0c;不知从何入手&#xff0c;以为就写写逻辑就行&#xff0c;结果搜索一番&#xff0c;还得了解相关http协议知识&#xff0c;又花了许久功夫去看http协议中有关断点续传知识&#xff0c;有时候发觉东西…

贪吃蛇(C++实现,VC6.0编译,使用了EasyX图形库)

程序效果&#xff1a; 代码&#xff1a; //main.cpp 1 #include <iostream>2 #include<fstream>3 #include <graphics.h>4 #include <conio.h>5 #include<ctime>6 #include<windows.h>7 #include<mmsystem.h>8 #pragma comment(lib…