2996|2

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

arm+linux 驱动的问题 [复制链接]

最近在弄一个,arm的最底层驱动,但怎么调,都的不到想要的结果,主要是对硬件i/o的读写还不是怎么的理解,望诸位指点,下面是源代码,
目的是,当数据线上出现D2D1D0=011时,地址线的信号A15---A0=0000 1000 0000 0000
源代码:诚盼各位指点,小弟以迷糊了几个星期了

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

#define ADC0809_MAJOR 231

#define adc0809_sle (*(volatile unsigned long *)ADC_GPACON)
#define adc0809_sle_data (*(volatile unsigned long *)ADC_GPADATA)
unsigned long ADC_GPACON, ADC_GPADATA;
unsigned long ADC_4051;
devfs_handle_t devfs_adc;
int  adc0809_open(struct inode *, struct file *);
int  adc0809_release(struct inode *, struct file *);
ssize_t adc0809_write(struct file *, const char *, size_t , loff_t *);
static struct file_operations adc0809_fops = {
        open:           adc0809_open,
        write:          adc0809_write,
        release:        adc0809_release,
};
/*
* Open/close code for raw IO.
*/
int adc0809_open(struct inode *inode, struct file *filp)
{
  printk("open ok\n");
  return 0;
}

ssize_t adc0809_write(struct file *filp, const char *buf,
                      size_t size,loff_t *offp)
  {
     char key;                          /int(key)=3;
     if(get_user(key,buf))
     return -EFAULT;
     (*(volatile unsigned char *)ADC_4051)=key;
     printk("addr=0x%x\n",addr);
     udelay(100000);
     return key;
}

//__ioremap
int adc0809_release(struct inode *inode, struct file *filp)
{
        printk("release ok\n");
        return 0;
}

int __init adc0809_init(void)
{
volatile unsigned int bankcon2;       
  
  printk("*********************adc0809_init**************\n");

  ADC_GPACON = (unsigned int)ioremap(0x56000000,4);
  ADC_GPADATA =(unsigned int)ioremap(0x56000004,4);
  
  ADC_4051 = (unsigned int)ioremap(0x10000800,4);
  bankcon2=(volatile unsigned int)ioremap(0x4800000c,4);
  *(volatile unsigned int*)bankcon2 |= 3<<13;
  /* select NGCS2 */
  adc0809_sle |= 0x2000;
  adc0809_sle_data &= (~0x2000);
/* register char device */
  devfs_adc =
        devfs_register(NULL,"adc0809",DEVFS_FL_DEFAULT,
                       ADC0809_MAJOR, 0,
             S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP,
                       &adc0809_fops,NULL);
        return 0;
}

int __init adc0809_exit(void)
{
  devfs_unregister(devfs_adc);
  return 0;
}

/*
__initcall(adc0809_init);
*/
module_init(adc0809_init);
module_exit(adc0809_exit);


主要帮我看看那个写函数,是不是能实现我要实现的目的?
此帖出自Linux开发论坛

最新回复

俺用的是,华恒的实验箱,arm9 ,s3c2410... 还望多交流 qq:50076491  详情 回复 发表于 2007-5-22 18:19
点赞 关注

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
顶!

LZ,

你用的什么开发板?
不好意思
我初学,不能给解决你的问题,
但是“迷糊了几个星期了“,那确实够郁闷的。
此帖出自Linux开发论坛
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
俺用的是,华恒的实验箱,arm9 ,s3c2410...

还望多交流
qq:50076491
此帖出自Linux开发论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表