xiaozhi 发表于 2018-12-18 15:29:15

imx6q修改寄存器的值,用ioremap映射不可以,换成MX6_IO_ADDRESS就可以,为什么?

imx6q修改寄存器的值,用ioremap映射后writel写值修改不成功,换成MX6_IO_ADDRESS这个宏就可以,为什么?

飞凌-chongzi 发表于 2018-12-21 13:30:44

您好
您那边是怎么配置的,可以给您看一看

xiaozhi 发表于 2019-1-19 21:15:14

飞凌-chongzi 发表于 2018-12-21 13:30
您好
您那边是怎么配置的,可以给您看一看

      #define SPI_BASE_REG_ADDR    0x0200c000

      unsigned int *spi_base_reg_addr = ioremap(SPI_BASE_REG_ADDR, 0x40);
        writel(0x00748828, spi_base_reg_addr+0x08);    //复位SPI模块
       
        writel(0x00740029, spi_base_reg_addr+0x08);    //配置SPI寄存器,spi时钟频率在此寄存器设置
        writel(0x02200, spi_base_reg_addr+0x0c);      
       
        ccm_ccgr1 = ioremap(CCM_CCGR1, 4);             //使能SPI时钟
        writel(0x300c0c, ccm_ccgr1);
       
        val0 = readl(spi_base_reg_addr);       
        val1 = readl(spi_base_reg_addr+0x4);       
        val2 = readl(spi_base_reg_addr+0x8);       
        val3 = readl(spi_base_reg_addr+0xc);
        val4 = readl(spi_base_reg_addr+0x10);
        val5 = readl(spi_base_reg_addr+0x14);       
        val6 = readl(spi_base_reg_addr+0x18);
        val7 = readl(spi_base_reg_addr+0x1c);       
        val8 = readl(spi_base_reg_addr+0x20);       
      printk("<0>""%x\n %x\n %x\n %x\n", val0,val2,val3,val4);
        printk("<0>""\n %x\n %x\n %x\n %x\n", val5,val6,val7,val8);
       
问题:我用的是imx6q-c开发板,Linux-3.0.35内核。
       unsigned int *spi_base_reg_addr = ioremap(SPI_BASE_REG_ADDR, 0x40);
       此函数映射后不能修改imx6q寄存器中的值 , 而经过下面的宏后,则读出来的数值是正确的!为什么?
        void __iomem *spi_base_reg_addr = MX6_IO_ADDRESS(SPI_BASE_REG_ADDR);

感谢技术支持的解答!
页: [1]
查看完整版本: imx6q修改寄存器的值,用ioremap映射不可以,换成MX6_IO_ADDRESS就可以,为什么?