5843|15

78

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

疯了,spi读函数一加入类似v_SPIReg->SPSTA0 对寄存器的代码,就出Data Abort:问题 [复制链接]

在spi读函数中调用下面的代码

  1. while(!(pSpiHWInfoHead->v_SPIReg->SPSTA0 & 0x01));       
  2.         pSpiHWInfoHead->v_SPIReg->SPTDAT0=0xFF;
  3. while(!(pSpiHWInfoHead->v_SPIReg->SPSTA0 & 0x01));       
  4.         *ui8RxData = *(unsigned char *)pSpiHWInfoHead->v_SPIReg->SPRDAT0;//read
复制代码

串口会打出
Data Abort: Thread=8fbbdc74 Proc=8d126280 'device.exe'
AKY=00000045 PC=02e93e80(s3c2440spi.dll+0x00003e80) RA=02e93e7c(s3c2440spi.dll+0x00003e7c) BVA=cfd15246 FSR=00000003
RaiseException: Thread=8fbbdc74 Proc=8d126280 'device.exe'
AKY=00000045 PC=03f8e060(coredll.dll+0x0001e060) RA=8c206ee4(NK.EXE+0x00006ee4) BVA=00000003 FSR=00000003
这些信息,真是疯了,
我spi写函数也有调用while(!(pSpiHWInfoHead->v_SPIReg->SPSTA0 & 0x1));这样的代码,就没问题,写功能也实现了
怎么读就不行呢?
(wince5.0,polling模式,TX auto Garbage 为0=normal mode)

最新回复

能不能具体说一下是那个内存出问题了呀  详情 回复 发表于 2010-5-11 11:33
点赞 关注

回复
举报

88

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
會不會是有的 register 是限制為 32-bits access, 你用 8-bits access, 可能會產生 data abort, 請回頭看 User's Manual 看看有沒有這個限制.

Paul, Chao @ Techware
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我这样写的读取的代码正确不?我的意思是:如果没有Data Abort信息,我这样写能读到数据吗?
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 1 楼 paul_chao 的回复:
會不會是有的 register 是限制為 32-bits access, 你用 8-bits access, 可能會產生 data abort, 請回頭看 User's Manual 看看有沒有這個限制.

Paul, Chao @ Techware


这个没有关系的。

 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
v_SPIReg 这个指针的值是否正确
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 2 楼 ulovexd 的回复:
我这样写的读取的代码正确不?我的意思是:如果没有Data Abort信息,我这样写能读到数据吗?


不行,Data Abort就退出了。如果在xxx_init函数会导致DLL加载失败的。
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 4 楼 xajhuang 的回复:
v_SPIReg 这个指针的值是否正确


同意,这个v_SPIReg的堆内存你申请正常了吗
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 6 楼 gooogleman 的回复:
引用 4 楼 xajhuang 的回复:
v_SPIReg 这个指针的值是否正确


同意,这个v_SPIReg的堆内存你申请正常了吗

申请了啊,要不然写函数也会有问题啊。

  1. pSpiHWHeadInfo->v_SPIReg = (volatile S3C2440_SPI_REG *)VirtualAlloc(0,sizeof(S3C2440_SPI_REG),MEM_RESERVE,PAGE_NOACCESS);
  2.         if(NULL == pSpiHWHeadInfo->v_SPIReg)
  3.                 {
  4.                         RETAILMSG(1,(TEXT("[SPI] pSpiHWHeadInfo->v_SPIReg : Virtual Alloc failed!\r\n")));
  5.                         goto error_return;
  6.                 }
  7.         else
  8.                 {       
  9.                         if(!VirtualCopy((PVOID)pSpiHWHeadInfo->v_SPIReg,(PVOID)(S3C2440_BASE_REG_PA_SPI>>8),sizeof(S3C2440PI_REG),PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE))                       
  10.                                 {
  11.                                         //DEBUGMSG(ZONE_ERROR,(TEXT("Virtual Copy dwIoBase failed\r\n")));
  12.                                         RETAILMSG(1,(TEXT("[SPI] pSpiHWHeadInfo->v_SPIReg : Virtual Copy failed!\r\n")));
  13.                                         goto error_return;
  14.                                 }
  15.                 }//*/
复制代码
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

9
 
那你的 "*ui8RxData = ..", ui8RxData 是一個有效的 pointer 嗎??

Paul, Chao @ Techware
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

10
 
估计还是内存映射的问题,在Build Options里面将Enable Full Kernel Mode选中,然后重新编译一下试试。
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

11
 
估计还是内存映射的问题,在Build Options里面将Enable Full Kernel Mode选中,然后重新编译一下试试。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

12
 

if(!VirtualCopy((PVOID)pSpiHWHeadInfo->v_SPIReg,(PVOID)(S3C2440_BASE_REG_PA_SPI>>8),sizeof(S3C2440PI_REG),PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE)) 中
sizeof(S3C2440PI_REG) 这个怎么定义的



是不是应该修改为
sizeof(S3C2440_SPI_REG)
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

13
 
谢谢各位哥哥姐姐弟弟妹妹,果然是内存的问题。。。
一会给分,再次感谢!
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

14
 
友情up
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

15
 
友情up
 
 
 

回复

51

帖子

0

TA的资源

一粒金砂(初级)

16
 
能不能具体说一下是那个内存出问题了呀
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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