本节目标:
学习platform机制,如何实现驱动层分离
1.先来看看我们之前分析输入子系统的分层概念,如下图所示:
如上图所示,分层就是将一个复杂的工作分成了4层, 分而做之,降低难度,每一层专注于自己的事情, 系统只将其中的核心层和事件处理层写好了,所以我们只需
1.异常中断概述
在arm架构的处理器中,cpu有7中工作模式,2中工作状态。
1.CPU模式(Mode):
7种Mode: 除了usr/sys,其他5种都是异常模式。我们知道中断属于异常的2中,中断有irq,fiq。
usr
sys
undefined(und)
Supervisor(sv
在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时的初始化,中断上下文的保存和恢复,对性能要求非常苛刻的函数等。
在S3C2440的数据手册中,对各种汇编指令的作用及使用方法都有详细说明,这里只对一些常用的汇编指令进行介绍。
一、ARM寄存器介绍
1.1 32位体系
ARM 处理器在3
本节学习目的
1)分析printk()函数
2)使用printk()调试驱动
1.在驱动调试中,使用printk(),是最简单,最方便的办法
当uboot的命令行里的“console=tty1”时,表示printk()输出在开发板的LCD屏上
当uboot的命令行里的“console=ttyS
首先,我们应该知道一点,Mini2440开发板在没有开启时钟前,整个开发板全靠一个12MHz的外部晶振提供频率来工作运行的,也就是说CPU、内存、UART、ADC等所有需要用到时钟频率的硬件都工作在12MHz下,而S3C2440A可以正常工作在400MHz下,可想而知两者速度相差会有多大了。
如果
在linux驱动移植-usb驱动基础中我们介绍了USB主机控制器主要有OHCI、UHCI,EHCI,xHCI,其中HCI表示Host Controller Interface。usb主机控制器通过usb根集线器和其他的usb设备相连。
在linux驱动移植-usb总线设备驱动中我们介绍了usb子系
一、SPI概述
SPI是串行外设接口(Serial Peripheral Interface)的缩写,是美国摩托罗拉公司(Motorola)最先推出的一种同步串行传输规范,也是一种单片机外设芯片串行扩展接口,是一种高速、全双工、同步通信总线,所以可以在同一时间发送和接收数据,SPI没有定义速度限制
在前面阅读理解了I2C的官方协议文档后,就拿s3c2440和EEPROM来验证一下.
本来是想用s3c2440的SDA和SCL管脚复用为GPIO来模拟的,但在没有示波器的情况下搞了一周,怎么都出不来,最后还是放弃了.甚至参考了linux下i2c-algo-bit.c和i2c-gpi
1.I2c主控与从设备关系
对于写操作,主控作为transmitter,从设备作为receiver
对于读操作,主控作为receiver, 从设备作为transmitter
2.I2c控制器
2.1总框图
Pclk = 50Mhz, 经过prescaler分频,可以得到SCL。
IICST
1.硬件电路
I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。如下图:
SDA(串行数据线)和SCL(串行时钟线)都是双向I/O线,需通过上拉电阻接电源VCC.当总线空闲时.两根线都是高电平。
2.i2c协议规则
传输过程如下:
主控发送start讯号(S)
主控
一、I2C概述
I2C(Intel Interface Circuit,简称IIC、I2C),是应用广泛的芯片间串行扩展总线。由飞利浦公司开发用于微控制器(MCU)和外围设备(从设备)进行通信的一种总线,属于一主多从(一个主设备(Master),多个从设备(Slave))的总线结构,总线上的每个设
上一节 我们学习了:
IIC接口下的24C02 驱动分析: http://www.cnblogs.com/lifexy/p/7793686.html
接下来本节, 学习Linux下如何利用linux下I2C驱动体系结构来操作24C02
1. I2C体系结构分析
1.1首先进入linux内核
一、Mini2440地址空间
1.1 存储器控制器介绍
在之前的文章中,我们已经介绍过S3C2440自带4KB SRAM和2MB的NOR FALSH。片内4KB的内存其实是很小,为了能够运行操作系统和更大的应用程序,需要在处理器存储接口上进行扩展,如SDRAM、SRAM、ROM、FLASH等。AR
1.顺寻访问(Page Read)
下图的表格,来说明NAND FLASH内部结构,前面2K(02047)表示页数据,后边64字节(20482111)表示oob。
CPU想读取,第2048个数据,它是哪以一个?
是Page1的第0个字节。CPU使用某个地址访问数据的时候,是在页数据空间来寻址的。
nandFlash命令表
对NAND FLASH的操作需要发出命令,下面有个NAND FLASH的命令表格,那么我们可以此表格上的命令来访问我们的nandflash.
1)时序分析
上面命令表中的读id还不太直观,下图是从nand芯片手册中截取出的读id时序图:
①第一条竖线位置,发送了nCE,C
一.Steppingstone
我们知道nand没有独立地址线,cpu无法直接访问nand上的指令,所以nand不能片上执行。那么为何程序还能支持nand启动的呢?
为了支持NAND启动,S3C2440A配备了一个称为“ Steppingstone”的内部SRAM缓冲区,容量为4K。 开机时,Na
1.nandflash的原理图如下:
引脚属性见下表:
引脚名称
引脚功能
IO0~IO7
数据输入输出(命令、地址、数据共用数据总线)
CLE
命令使能
ALE
地址使能
/CE
芯片使能(片选)
/RE
读使能
/WE
写使能
R/B
就绪/忙输出信号(低电平表示操作还在进行中,高电平表示
在上一节分析输入子系统内的intput_handler软件处理部分后,接下来我们开始写input_dev驱动
本节目标:
实现键盘驱动,让开发板的4个按键代表键盘中的L、S、空格键、回车键
1.先来介绍以下几个结构体使用和函数,下面代码中会用到
1)input_dev驱动设备
1.准备框架
为了让程序更加好扩展,体现出”高内聚、低耦合"的特点,能够兼容各种不同型号的lcd,假如有两款尺寸大小的lcd,如何快速的在两个lcd上切换?
首先我们抽象出lcd_3.5.c和lcd_4.3.c的共同点,比如都有初始化函数init(),我们可以新建一个lcd.c,然后定义一个结构体
1.LCD控制器框图
从上图看出,S3C2440 LCD控制器用于传输视频数据并且生成必要的控制信号,如VFRAME,VLINE,VCLK,VM等。除了控制信号,S3C2440还有视频数据端口,即VD [23:0]。通过设置REGBANK(寄存器组),LCDCDMA会自动(无需CPU参与)把内存