作者Smile365Day (微笑)
看板LinuxDev
标题[问题] ARM的SPI无法使用iowrite8()
时间Sun Sep 27 20:48:47 2009
各位先进好
我使用的kernel是 2.6.14
为什麽使用iowrite8()去写入值到SPCON这类型暂存器时
之後去使用mdelay()
最後利用ioread8()读取时都是0x00
对了,
我有先使用ioremap()把物理位址应射到虚拟位址
这边都是ok的,没出错
最後补充一下
同样动作我对GPIO暂存器读写都很正常
唯独在SPI就怪怪的
麻烦各位了,谢谢
我把部分程式码贴上来,让大家看看那边有问题
以下是照者执行顺序所贴上的
static void __iomem *s3c2410_SPI_base;
.
.
.
if (request_mem_region(0x59000020, 0x59000034 - 0x59000020 +1
,"s3c2410-spi") == NULL) goto error;
s3c2410_SPI_base = ioremap(0x59000020, 0x59000034 - 0x59000020 +1 );
if (s3c2410_SPI_base == NULL) goto error;
.
.
.
gpgcon &= 0xffff033f;
gpgcon |= 0x0000fcc0;
iowrite32(gpgcon,S3C2410_GPGCON);
udelay(10);
printk("GPGCON = %x \n",ioread32(S3C2410_GPGCON));//这边有印出正确的值
gpgup &= (0xff00);
gpgup |= 0x0088;
iowrite16(gpgup,S3C2410_GPGUP);
udelay(10);
printk("GPGUP = %x \n",ioread16(S3C2410_GPGUP));//这边也ok
.
.
.
iowrite8(0xc1,s3c2410_SPI_base+S3C2410_SPCON);
mdelay(1);
printk("SPCON = 0x%x \n",ioread8(s3c2410_SPI_base+S3C2410_SPCON));
但是印出来的都是0x00
这边就搞不懂了,为什麽会这样
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 211.74.90.208
※ 编辑: Smile365Day 来自: 219.87.77.101 (09/28 10:54)
1F:→ mefuck:你在做SPI的printk时, 下面同样在多复制几行printk()看有没 09/29 15:37
2F:→ mefuck:有其他数据跑出来 09/29 15:38
3F:→ Smile365Day:已经加上mdelay()就是怕她有延迟时间,但还是不行 10/09 15:00
4F:→ Smile365Day:我想应该是跟2.6.14版本有关西吧...此版并没有spi 10/09 15:01