平台:linux2.6.18 + s3c2440 + isp1582
编译环境:redhat9.0 + arm-linux-gcc-3.4.1
硬件连接
s3c2440 isp1582
LADDR 1-8 ADDR 0-7
LDATA 0-15 LDATA0-15
cs1 CE
rd RD
wr WR
RST RST
添加ISP的IO resource
在 arm/arch/mach-s3c2440/devs.c 文件中添加
/* ISP1582 */
static struct resource isp1582_resource[] = {
[0] = {
.start = S3C24XX_PA_ISP1582,
.end = S3C24XX_PA_ISP1582 + S3C24XX_SZ_ISP1582 -1,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = IRQ_S3C2440_ISP1582,
.end = IRQ_S3C2440_ISP1582,
.flags = IORESOURCE_IRQ,
}
};
struct platform_device device_isp1582 = {
.name = "isp1582_hal",
.id = -1,
.num_resources = ARRAY_SIZE(isp1582_resource),
.resource = isp1582_resource,
};
在 arch/arm/smdk-s3c2410/mach-smdk2440.c 中添加以下:
static struct platform_device *smdk2440_devices[] __initdata = {
...
&device_isp1582,
...
}
在 arch/arm/mach-s3c2410/devs.h 中添加以下
extern struct platform_device device_isp1582;
一些相关的定义:
include/asm-arm/arch-s3c2410/map.h
#define S3C24XX_VA_ISP1582 S3C2410_ADDR(0x01400000)
#define S3C24XX_PA_ISP1582 (0x08000000) // use cs1
#define S3C24XX_SZ_ISP1582 SZ_1M
include/asm-arm/arch-s3c2410/irqs.h
#define IRQ_S3C2440_ISP1582 IRQ_EINT18
device_isp1582结构体中的name成员名称必须和驱动的名称相同,否则注册时不能 probe.
在phHal_Isp1582_Probe函数中必须获取IO端口和重映射,将PA映射成VA才能操作IO端口,下面是一些相关的代码(x86与arm的映射和对io端口的操作不同):
halDev->ioRes = platform_get_resource(pdev, IORESOURCE_MEM, 0);
halDev->irqRes = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
i = res_size(halDev->ioRes);
halDev->resReq = request_mem_region(halDev->ioRes->start, i,pdev->name);
halDev->io_addr = ioremap(halDev->ioRes->start, 0x400);
io_addr就是重映射之后的VA,ISP1582的端口操作与NAND FLASH和DM9000的操作有所不同,ISP1582是并行的,而NAND FLASH和DM9000是串行操作的(因为这2颗芯片都有CMD pin,而ISP有8根的地址线,这就决定的isp读写的方式与它们不同),比如 DM9000 的cmd 脚是连接到 s3c2440中的 A2, 那么
io_data = io_addr + 4; 选择发送的是数据还是命令;
而ISP是并行方式的,写命令的话总是 将数据送到 halDev->io_addr 中;
读写数据时 hal->io_data = halDev->io_addr + (reg << 1);
因为地址总线错位所以 reg 必须左移一位,reg 是isp的内部寄存器;
这样s3c2440就可以正确的读到ISP的CHIP ID了。
如果不确定是重映射是否正确,可以在UBOOT中查看ISP1582的CHIP ID
比如cs线是用到cs1的,那么PA就是0x08000000
那么在UBOOT可以用以下命令查看CHIP_ID:
md 80000e0
#0x80000e0 31f08230 31f00015 xxxxxxxx xxxxxxxx
#0x80000f0 31f00000 31f00000 31f00000 31f00000
阅读(1913) | 评论(0) | 转发(0) |