摘要: 尽管一个特定的UART设备驱动完全可以按照tty驱动的设计方法来设计,即定义tty_driver并实现tty_operations其中的成员函数,但是Linux已经在文件serial_core.c中实现了UART设备的通用tty驱动层,称为串口核心层,这样,UART驱动的主要任务变成了实现ser... 阅读全文
posted @ 2015-04-03 20:54 Fight_for_a_sweet 阅读(490) 评论(0) 推荐(0) 编辑
摘要: 首先,我们要先搞明白两个问题:1. 为什么要去抖动? 按键所用开关为机械弹性开关,当机械触点断开,闭合时,由于机械触点的弹性作用,开关不会马上稳定地接通或者断开。因而在闭合及断开的瞬间总是伴随一连串的抖动。2. linux中为什么要用定时器去抖? 按键去抖动的方法主要有两种,一是硬件电路去抖动;... 阅读全文
posted @ 2015-03-26 20:27 Fight_for_a_sweet 阅读(895) 评论(0) 推荐(0) 编辑
摘要: 首先,在做这个实验之前有三件事是要明确的:1. linux下的中断实验不需要像裸机实验一样要自己写取消屏蔽,清除中断标志位的操作,系统会自动帮你完成;2.中断号的申请我使用的是gpio_to_irq()这个宏,它会帮我们自动分配中断号,返回值为中断号;3. 在每个板子配套来的内核代码大部分都是已经包... 阅读全文
posted @ 2015-03-26 19:17 Fight_for_a_sweet 阅读(1003) 评论(0) 推荐(0) 编辑
摘要: 为什么要中断分层?中断嵌套1.当一个中断处理的时候,发生另一个中断。2.如果是慢速中断:(1)同类型的中断会被忽略(2)不同类型的会被响应3.如果是快速中断:不管是否是同类型,都会被忽略4.基于以上分析,为了避免中断丢失,我们要尽可能缩短中断处理的时间,从而引出了中断分层的概念。中断分层1.将中断分... 阅读全文
posted @ 2015-03-25 00:04 Fight_for_a_sweet 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 为什么需要中断机制?1.外设的处理速度一般慢于CPU2.CPU不能一直等待外部设备所以设备必须要有一种方法通知CPU它的工作进度,这种机制就是中断一. linux中断处理流程1.entry-armv.S文件的irq_svc标号就是统一的中断入口2.接下来是保护现场3.展开irq_handler宏,进... 阅读全文
posted @ 2015-03-24 20:34 Fight_for_a_sweet 阅读(1107) 评论(0) 推荐(0) 编辑
摘要: 实验板子:tiny210(芯片:s5pv210)实验目的:通过外部中断操作两个按键实现对LED灯的亮灭控制步骤:①初始化GPIO端口,使GPIO为外部中断状态;(寄存器:GPxxCON) 例: ②配置外部中断触发模式,上升沿触发,下降沿触发,双边触发,高电平触发,低电平触... 阅读全文
posted @ 2015-03-24 00:16 Fight_for_a_sweet 阅读(1166) 评论(0) 推荐(0) 编辑
摘要: 1.中断概念 CPU在工作的过程中,经常需要与外设进行交互,交互的方式包括‘轮询方式’,‘中断方式’。 1.轮询方式: CPU不断地查询设备的状态,该方式实现简单,但是CPU的利用率低,不适合多任务系统。 2.中断方式: CPU告知硬件开始一项工作后,就去做别的事了,当硬件将这... 阅读全文
posted @ 2015-03-23 17:14 Fight_for_a_sweet 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 概述:MMU:内存管理单元MMU功能:1.将虚拟地址转化为物理地址2.地址访问权限的管理地址转化类型ARM系统支持3种类型的地址转化:①段式转化(一个段大小为1MB)②粗粒度页面转化(粗页转化)③细粒度页面转化(细页转化)(一页一般为4K,16K,64K)TTB寄存器MMU要自动进行虚拟地址到物理地... 阅读全文
posted @ 2015-03-23 11:33 Fight_for_a_sweet 阅读(1028) 评论(0) 推荐(0) 编辑
摘要: 最近在学习linux下的内核链表,发现linux的内核链表不同于传统的链表,于是打算把这套内核链表移植出来,方便以后使用,不过在移植offsetof(TYPE, MEMBER)这个宏的时候遇到了很多之前不懂的问题,经过几天的努力终于把offsetof这个宏弄的明明白白了。 正确源代码: 1 #... 阅读全文
posted @ 2015-03-22 11:36 Fight_for_a_sweet 阅读(607) 评论(0) 推荐(0) 编辑
摘要: #define OFFSETOF(type, field) ((size_t)&(((type *)0)->field))(type *)0:把0地址当成type类型的指针。((type *)0)->field:对应域的变量。&((type *)0)->field:取该变量的地址,其实就等于该域相对... 阅读全文
posted @ 2015-03-22 10:40 Fight_for_a_sweet 阅读(701) 评论(0) 推荐(0) 编辑