- 积分
- 64
贡献450
飞刀117 FD
注册时间2018-5-31
在线时间11 小时
|
楼主 |
发表于 2019-1-19 21:15:14
|
显示全部楼层
#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);
感谢技术支持的解答! |
|