S3C44B0X 的 IDE 接口在 uClinux 上的驱动移植
1
S3C44B0X 的 IDE 接口在 uClinux 上的驱动移植
一. 硬件接口描述
本人使用的是思创的开发板,其提供的 IDE 接口的相关数据如下:
寄存器部分的描述:
#define IDE_DATA 0x06020000 //
#define IDE_ERROR 0x06020002 //
#define IDE_NSECTOR 0x06020004 //
#define IDE_SECTOR 0x06020006 //
#define IDE_LCYL 0x06020008 //
#define IDE_HCYL 0x0602000A //
#define IDE_SELECT 0x0602000C //
#define IDE_STATUS 0x0602000E //
#define IDE_CTRL 0x0604000C //
#define IDE_IRQ INT_EINT4 //使用的外部中断号 4 作为 IDE 的中断
IDE 的复位线是一个内建在 CPLD 的控制寄存器的一个位的输出:
寄存器地址 0x0A200000 R/W 8bit 位D6 是用于 IDE 复位线控制
D6=0 IDE 的复位线为低,IDE 进入复位态
D6=1 IDE 的复位线为高,IDE 进入工作态
因此要把复位线置为高,如下:
(*(volatile unsigned short *)0x0A200000)|=0x0040; // Set IDE Reset to High
IDE 中断使用了 S3C44B0X 的外部中断 4,应当设置该 IO 口成上升沿触发中断模式,代
码如下:
PCONG |= 0x0300; //Enable EINT4 Func 设置该端口为外部中断功能
PUPG &= 0xFFEF; //Enable Pull-up for EXTINT4 使能内部上拉电阻
EXTINT &= 0xFFF8FFFF; //Set Rising edge 设置为上升沿触发中断
EXTINT |= 0x00040000; //Set Rising edge
二.我们需要作什么?
由于 uClinux 已经带有相当完整的 IDE 驱动代码,因此我们不需要做太多的事情,我们要
做的是:
A 初始化硬件
B 通知驱动我们的硬件接口地址中断等
初始化硬件在这里主要是:
置 IDE 复位线为高,是 IDE 可以进入工作态
初始化 IO 口,使得它能接收到 IDE 的中断
初始化硬件可以在的 BIOS 启动时完成,这样在 uClinux 启动时硬件已经准备好了。
初始化硬件也一样可以在 uClinux 下完成,不过必须是在 uClinux 真正使用 IDE 之前。通
过修改 uClinux 的代码实现。