阅读:1730回复:2
请大家帮我看一下一个简单的字符设备驱动程序问题。片选信号一直为高,不解
请大家帮我看一下一个简单的字符设备驱动程序问题。
我对2410 datasheet的理解:当对0x10000001~0x18000000地址空间寻址时,nGCS2会变为低电平一片选外部芯片。但是当我读取这个设备的时候,为什么nGCS2老是保持为高啊?请教大牛! #include <linux/config.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #include <asm/io.h> #include <linux/miscdevice.h> #include <linux/sched.h> #include <linux/delay.h> #include <linux/poll.h> #include <linux/spinlock.h> #include <linux/irq.h> #include <linux/delay.h> #include <asm/arch/S3C2410.h> #include <asm/hardware.h> #define DEVICE_NAME"FPGA_LINUX" #define FPGA_LINUX_MAJOR 232 #define IRQ_FPGA_LINUX IRQ_EINT0 #define MAX_COLUMN 720 #define GET_DATA(x) (*(volatile unsigned int *)x) unsigned long FPGA_DATA; static int key_value[MAX_COLUMN]; static void s3c2410_io_port_init(void) { set_gpio_ctrl(GPIO_F0 | GPIO_PULLUP_DIS | GPIO_MODE_ALT0); (void *)FPGA_DATA=ioremap(0x11000000,4); } static int s3c2410_read(struct file * file, char * buffer, size_t count, loff_t *ppos) { int i; if (count != sizeof key_value) return -EINVAL; for(i=0;i<720;i++) { key_value = GET_DATA(FPGA_DATA); } copy_to_user(buffer, &key_value, i*4); return i; } static struct file_operations s3c2410_fops = { owner:THIS_MODULE, read: s3c2410_read, }; static devfs_handle_t devfs_handle; static int __init s3c2410_init(void) { int ret; int i; for(i=0;i<MAX_COLUMN;i++) key_value=0; ret = register_chrdev(FPGA_LINUX_MAJOR, DEVICE_NAME, &s3c2410_fops); if (ret < 0) { printk(DEVICE_NAME " can't register major number\n"); return ret; } s3c2410_io_port_init(); devfs_handle = devfs_register(NULL, DEVICE_NAME, DEVFS_FL_DEFAULT,FPGA_LINUX_MAJOR, 0, S_IFCHR | S_IRUSR | S_IWUSR,&s3c2410_fops, NULL); return 0; } static void __exit s3c2410_exit(void) { devfs_unregister(devfs_handle); unregister_chrdev(FPGA_LINUX_MAJOR, DEVICE_NAME); } module_init(s3c2410_init); module_exit(s3c2410_exit); |
|
沙发#
发布于:2005-07-12 00:03
帮你顶一下
|
|
|
板凳#
发布于:2005-07-17 21:52
你在物理地址映射成虚拟地址之前,好像没有向系统注册所使用的资源!!!
|
|