天嵌 ARM开发社区

 找回密码
 注册
查看: 1510|回复: 4

linux IO内存映射只能读不能写

[复制链接]
愚乐纸上 发表于 2014-5-15 15:59:50 | 显示全部楼层 |阅读模式
    本人外扩一块芯片接nCGS3,物理地址为0x18000000开始,但是用ioremap映射或静态映射过后,寄存器只能读不能写,硬件已经用裸机程序测试过是正常的,并且nCGS3的时序和裸机程序一致,现在好急啊,求大神解啊!!!!!(一下是静态映射的) 本人会一直查看此贴的
static int __init dev_init(void)
{
    unsigned int i = 0x88888888;
    unsigned short int j=0x4321;
    int ret;
     
    my_mem = request_mem_region(S3C24XX_PA_MCX,0x10,DEVICE_NAME);
    if(my_mem == NULL)
    {
        printk("rMCX314 request_mem_region failed");
    }     
    printk(banner);     ret = register_chrdev(LED_MAJOR,DEVICE_NAME,&dev_fops);
    if(ret<0)
    {
            printk (DEVICE_NAME"can't register major number \n");
         return ret;
    }

    gpio_class = class_create(THIS_MODULE,DEVICE_NAME);
    if(IS_ERR(gpio_class))
    {
         printk ("failed in gpio class \n");
            return -1;
    }

    device_create(gpio_class,NULL,MKDEV(LED_MAJOR,0),NULL,DEVICE_NAME);
     printk("MCX = %#x\n",i);     iowrite32(0x12341234,S3C24XX_VA_MCX+0x08);
    mdelay(1);
    i = ioread32(S3C24XX_VA_MCX+0x08);     
    printk("MCX = %#x\n",i);


     

     



TQ-ZQL 发表于 2014-5-15 16:27:49 | 显示全部楼层
request_mem_region
ioremap
iowrite32
建议百度一下这几个函数。
 楼主| 愚乐纸上 发表于 2014-5-15 19:59:42 | 显示全部楼层
TQ-ZQL 发表于 2014-5-15 16:27
request_mem_region
ioremap
iowrite32

映射S3C2440自身的IO端口,不管是动态还是静态映射都可以正常读写,但是映射我自己拓展的IO端口(物理地址0X18000000)只能读不能写,是不是cache问题,还是进程间通信出了问题???
TQ-ZQL 发表于 2014-5-16 15:41:43 | 显示全部楼层
如果操心cache问题,可以用ioremap_nocache。
 楼主| 愚乐纸上 发表于 2014-5-16 20:54:21 | 显示全部楼层
TQ-ZQL 发表于 2014-5-16 15:41
如果操心cache问题,可以用ioremap_nocache。

都试过了#define ioremap_nocache(off,size) ioremap(off,size) 在ARM平台这两函数大多数好像没区别
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-9-28 02:43 , Processed in 1.027383 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表