摘要: request_irq()和free_irq()分析完毕后,接下来开始编写上升沿中断的按键驱动 如下图,需要设置4个按键的EINT0, EINT2, EINT11, EINT19的模式为双边沿,且设置按键引脚为中断引脚 这里我们只需要使用request_irq函数就行了, 在request_irq函 阅读全文
posted @ 2017-09-11 20:07 诺谦 阅读(9968) 评论(0) 推荐(5) 编辑
摘要: 上一节讲了如何实现运行中断,这些都是系统给做好的,当我们想自己写个中断处理程序,去执行自己的代码,就需要写irq_desc->action->handler,然后通过request_irq()来向内核申请注册中断 本节目标: 分析request_irq()如何申请注册中断,free_irq()如何注 阅读全文
posted @ 2017-09-11 19:43 诺谦 阅读(15463) 评论(0) 推荐(4) 编辑
摘要: 本节目标: 分析在linux中的中断是如何运行的,以及中断3大结构体:irq_desc、irq_chip、irqaction 在裸板程序中(参考stmdb和ldmia详解): 1.按键按下, 2.cpu发生中断, 3.强制跳到异常向量入口执行(0x18中断地址处) 3.1使用stmdb将寄存器值保存 阅读全文
posted @ 2017-09-11 19:19 诺谦 阅读(9360) 评论(1) 推荐(4) 编辑
摘要: 本节目标: 写second程序,内容:通过查询方式驱动按键 1.写出框架 1.1写file_oprations结构体,second_drv_open函数,second_drv_read函数 1.2写入口函数,并自动创建设备节点,修饰入口函数 1.3写出口函数,并自动注销设备节点,修饰出口函数 1.4 阅读全文
posted @ 2017-09-11 18:43 诺谦 阅读(5220) 评论(2) 推荐(2) 编辑
摘要: 在上一节中已经将驱动程序框架搭建好了 接下来开始写硬件的操作(控制LED): (1)看原理图,确定引脚 (2)看2440手册 (3)写代码(需要使用ioremap()函数映射虚拟地址,在linux中只能使用虚拟地址) (4)修改上一节的测试程序 (5)使用次设备号来控制设备下不同的灯 1.看led引 阅读全文
posted @ 2017-09-11 18:30 诺谦 阅读(4344) 评论(2) 推荐(4) 编辑
摘要: 先讲解驱动框架,然后写出first_drv驱动程序,来打印一些信息 写出first_drv驱动程序需要以下几步: (1)写出驱动程序first_drv_open first_drv_write (2)需要定义file_operations结构体来封装驱动函数first_drv_open first_ 阅读全文
posted @ 2017-09-11 18:11 诺谦 阅读(9480) 评论(21) 推荐(8) 编辑
摘要: u-boot的任务是启动内核,内核的任务是启动应用程序 ,应用程序会涉及很多文件和硬件操作(当然不会直接操作硬件),比如读写文件,点灯、获取按键值。 比如对于控制led灯的用户程序与驱动程序,最简单的实现方法是: 应用程序中需要打开led灯,就需要open函数,在内核中的驱动程序中也有对应的led_ 阅读全文
posted @ 2017-09-11 17:39 诺谦 阅读(5475) 评论(3) 推荐(6) 编辑