4411|19

67

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

我改动了RTC中的内容系统就起不来了? [复制链接]

我目前用的是6410+wince6的平台,我改动了RTC中的内容,之前用的是CPU的RTC,目前我们加了一个外部的RTC,我通过iic对它进行读和写。
问题1:如果采用我在驱动中的iic驱动,通过deviceiocontrol的时候单独编译RTC的时候可以编译的过去。但是如果使用编译选项build current bsp的时候就出错了,调试信息显示好像是找不到deviceiocontrol的库。手动加进去也不行,不知道为什么?
问题2:用上面的方面不行了,我便采用了通过gpio模拟了iic但是用的还是iic的那俩个脚,在读写之前,先把这俩个脚设置成普通io口。在读写完之后再设置成iic的sda和scl,这样编译成功后,系统却启动不了了,打印串口消息如下:
Windows CE Kernel for ARM (Thumb Enabled) Built on Sep 30 2007 at 22:37:06
[OAL] S3C6410_APLL_CLK   : 532000000

[OAL] ARMCLK : 532000000

[OAL] HCLK   : 133000000

[OAL] PCLK   : 66500000

[OAL] ++InitializeDisplay()
[OAL] --InitializeDisplay()
[OAL] InitializeGPIO()
DCache: 128 sets, 4 ways, 32 line size, 16384 size
ICache: 128 sets, 4 ways, 32 line size, 16384 size
Arguments area has some values. Do not Initialize
-OALArgsInit()
+OALTimerInit( 1, 33250, 0 )
-OALIntrRequestSysIntr(irq = 38, sysIntr = 16)
++IIC_Open()
--IIC_Open()
Exception 'Data Abort' (4): Thread-Id=00410002(pth=8dfdf024), Proc-Id=00400002(pprc=82531308) 'NK.EXE', VM-active=00400002(pprc=82531308) 'NK.EXE'
PC=8013e584(NK.EXE+0x0003e584) RA=8013e57c(NK.EXE+0x0003e57c) SP=d001fd5c, BVA=00000007
Exception 'Prefetch Abort' (3): Thread-Id=00410002(pth=8dfdf024), Proc-Id=00400002(pprc=82531308) 'NK.EXE', VM-active=00400002(pprc=82531308) 'NK.EXE'
PC=00000000(???+0x00000000) RA=8015fb90(kernel.dll+0x00006b90) SP=d001fb88, BVA=00000000
Exception 'Prefetch Abort' (3): Thread-Id=00410002(pth=8dfdf024), Proc-Id=00400002(pprc=82531308) 'NK.EXE', VM-active=00400002(pprc=82531308) 'NK.EXE'
PC=00000000(???+0x00000000) RA=8015fb90(kernel.dll+0x00006b90) SP=d001f9b4, BVA=00000000
Exception 'Prefetch Abort' (3): Thread-Id=00410002(pth=8dfdf024), Proc-Id=00400002(pprc=82531308) 'NK.EXE', VM-active=00400002(pprc=82531308) 'NK.EXE'
PC=00000000(???+0x00000000) RA=8015fb90(kernel.dll+0x00006b90) SP=d001f7e0, BVA=00000000
Exception 'Prefetch Abort' (3): Thread-Id=00410002(pth=8dfdf024), Proc-Id=00400002(pprc=82531308) 'NK.EXE', VM-active=00400002(pprc=82531308) 'NK.EXE'
PC=00000000(???+0x00000000) RA=8015fb90(kernel.dll+0x00006b90) SP=d001f60c, BVA=00000000
Exception 'Prefetch Abort' (3): Thread-Id=00410002(pth=8dfdf024), Proc-Id=00400002(pprc=82531308) 'NK.EXE', VM-active=00400002(pprc=82531308) 'NK.EXE'
PC=00000000(???+0x00000000) RA=8015fb90(kernel.dll+0x00006b90) SP=d001f438, BVA=00000000
..........,下面基本上是重复了
最后是BVA=1000001b, dwInfo = 00000001
R0=ffffc800  R1=fffd34f8  R2=fffd3570  R3=10000003
R4=8015a638  R5=00000000  R6=8016088c  R7=82533704
R8=fffd34f8  R9=00000000 R10=fffd3570 R11=8016088c
R12=00000000  SP=fffd34c0  Lr=80160a78 Psr=80000113
Exception
希望大牛们给解答

最新回复

系统起不来,应该跟换芯片没有关系,估计是你指针用错了 或者是如果你在oal里面改东西,要注意了,即使不在一个文件中,也不能有同名函数,因为最后它们要连到一个库中,因此可以仔细查查有没有同名的函数,我以前被这个问题绊倒过   详情 回复 发表于 2010-5-14 15:30
点赞 关注

回复
举报

81

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
自己顶一下。。。。
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
估计是你实现上有问题。你改RTC,是直接在OAL的代码中改的吗?

建议不直接修改那个地方,而是另外写一个驱动,在系统启动时获取到准确时间后写入到MCU的RTC中,
系统运行过程中还是用MCU内部的RTC控制器。
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

4
 
问题1:RTC是在OAL中初始化的,在oal中调用不了驱动的,因为此时设备管理器还没运行呢。

问题2:wince使用的是虚拟地址,在使用IO的寄存器时,必须先对虚拟地址和物理地址进行映射。请问楼主映射了吗?
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 2 楼 sunrain_hjb 的回复:
估计是你实现上有问题。你改RTC,是直接在OAL的代码中改的吗?

建议不直接修改那个地方,而是另外写一个驱动,在系统启动时获取到准确时间后写入到MCU的RTC中,
系统运行过程中还是用MCU内部的RTC控制器。

目前我们是想实现当设备电池拿掉后,通过备电来给RTC供电,保持时间准确,如果用cpu的RTC的话可能会耗电比用我们这个外加的RTC芯片耗电大,那么备电用的时间就短,想尽可能的加大备电在电池掉电情况下的使用时间。所以如果按您的这种方法是不是我们的这个效果就没法实现了
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 3 楼 jnu_kinke 的回复:
问题1:RTC是在OAL中初始化的,在oal中调用不了驱动的,因为此时设备管理器还没运行呢。

问题2:wince使用的是虚拟地址,在使用IO的寄存器时,必须先对虚拟地址和物理地址进行映射。请问楼主映射了吗?


问题1,原来是这样,多谢了
问题2中已经使用了映射通过
g_GPIOReg = (S3C6410_GPIO_REG *)OALPAtoVA(S3C6410_BASE_REG_PA_GPIO, FALSE);
实现的

 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

7
 
我的意思是开机的时候从RTC芯片中通过IIC的方式读取值,然后设置到MCU内部的RTC,很多平台都是这么做的。

在OAL中实现IIC读取RTC芯片不太合理。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

8
 
再问各位一下,根据我的调试信息看系统起不来应该是数据异常造成的对吧,那么为何会造成这种异常呢
我目前是不知道该从哪里下手分析了
希望各位能够指点一下
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

9
 
++IIC_Open()
--IIC_Open()
Exception 'Data Abort' (4): Thread-Id=00410002(pth=8dfdf024), Proc-Id=00400002(pprc=82531308) 'NK.EXE', VM-active=00400002(pprc=82531308) 'NK.EXE'

#######################################

看信息,异常是在执行完IIC_Open()后出现的。应该是IIC_Open()这个函数引起的。

可能1:IIC_Open()中设置RTC错了,或者RTC根本就不工作了,导致NK引用时间出现异常。

可能2:IIC_Open()中执行了什么非法操作,一步一步排除咯
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 8 楼 jnu_kinke 的回复:
++IIC_Open()
--IIC_Open()
Exception 'Data Abort' (4): Thread-Id=00410002(pth=8dfdf024), Proc-Id=00400002(pprc=82531308) 'NK.EXE', VM-active=00400002(pprc=82531308) 'NK.EXE'

######################……

有些地方不太明白,望给详解:
1、系统启动的时候必须要读RTC正确吗?
2、系统是在什么时候读的RTC?
我iic_open的时候把系统用的IIC总线设置成了普通的gpio口。这样的话其他用到iic总线的模块应该就不能正常工作了,是不是这个是系统起不来,数据出现异常的原因??
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(中级)

11
 
引用 6 楼 sunrain_hjb 的回复:
我的意思是开机的时候从RTC芯片中通过IIC的方式读取值,然后设置到MCU内部的RTC,很多平台都是这么做的。

在OAL中实现IIC读取RTC芯片不太合理。

有些问题还得请教一下:
1、如果开机的时候从RTC芯片读取时间,按您说的单独做一个驱动,那么这个从驱动读时间的函数由谁来调用呢,驱动的加载是在OAL中执行完之后才加载的吧?
2、怎么能实现如果电池掉的话,不给cpu的供电不让cpu的RTC工作,而让我芯片的RTC工作呢?
3、能具体点指明oal中实现iic读取RTC芯片不合理吗?比如说可能会出现哪些方面的问题,对系统造成什么影响?
多谢了
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

12
 
1.在XXX_Init中实现上面所说的功能就可以了。虽然是在OAL执行完成之后,但没有任何影响。就好像你进入系统后也可以修改系统时间一样。

2.让你的RTC保持工作是硬件需要做的事情吧?跟软件没有关系。

3.OAL中实现IIC读取RTC,实现上不是很方便。即使实现了,由于系统会一直读取RTC,如果不是读取MCU内部的RTC,就会导致频繁操作IIC,感觉不太好。

我的思路是外部的RTC作为基准,每次开机时读取其中的值,并同步到MCU内部的RTC上,系统运行时直接用MCU内部的RTC控制器就可以。
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 11 楼 sunrain_hjb 的回复:
1.在XXX_Init中实现上面所说的功能就可以了。虽然是在OAL执行完成之后,但没有任何影响。就好像你进入系统后也可以修改系统时间一样。

2.让你的RTC保持工作是硬件需要做的事情吧?跟软件没有关系。

3.OAL中实现IIC读取RTC,实现上不是很方便。即使实现了,由于系统会一直读取RTC,如果不是读取MCU内部的RTC,就会导致频繁操作IIC,感觉不太好。

我的思路是外部的R……

恩,我大致明白了
多谢这位大侠
呵呵
oal中的东西我基本上不用动就可以了对吧
只需要自己在驱动中再实现一下读取RTC芯片的时间,并写到MCU内部的RTC中对吧?
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

14
 
引用 12 楼 benbentobecow 的回复:
引用 11 楼 sunrain_hjb 的回复:
1.在XXX_Init中实现上面所说的功能就可以了。虽然是在OAL执行完成之后,但没有任何影响。就好像你进入系统后也可以修改系统时间一样。

2.让你的RTC保持工作是硬件需要做的事情吧?跟软件没有关系。

3.OAL中实现IIC读取RTC,实现上不是很方便。即使实现了,由于系统会一直读取RTC,如果不是读取MCU内部的RTC,就会导致频……


是这个意思。个人感觉比较好一点。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

15
 

有道理
呵呵
我试试哈
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

16
 
各位大师
目前我的程序还是有问题
1.加入我做的程序后,系统起不来了,一直在
IIC_IOControl: CeOpenCallerBuffer failed in IOCTL_IIC_READ for IN buf.
IOCTL_IIC_WRITE ERROR: 31
I2CRead ERROR: 31
这个调试信息处循环
2.若要实现sunrain_hjb大师所说的那种“每次开机时读取其中的值,并同步到MCU内部的RTC上,系统运行时直接用MCU内部的RTC控制器”那如果改动系统的时间也应该同步到外部的RTC芯片中吧?应该在什么地方实现这个设置外部RTC芯片时间的同步??
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

17
 
这个应该在oal里面实现,setoemtime()函数里面实现它,通过读写寄存器或者io口的方法来实现。这属于接近硬件部分的代码了。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

18
 
引用 16 楼 paul85 的回复:
这个应该在oal里面实现,setoemtime()函数里面实现它,通过读写寄存器或者io口的方法来实现。这属于接近硬件部分的代码了。

您指的是哪个代码啊?
我目前是不想用cpu的RTC,而是用一个外界的RTC芯片啊
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

19
 
引用 11 楼 sunrain_hjb 的回复:
1.在XXX_Init中实现上面所说的功能就可以了。虽然是在OAL执行完成之后,但没有任何影响。就好像你进入系统后也可以修改系统时间一样。

2.让你的RTC保持工作是硬件需要做的事情吧?跟软件没有关系。

3.OAL中实现IIC读取RTC,实现上不是很方便。即使实现了,由于系统会一直读取RTC,如果不是读取MCU内部的RTC,就会导致频繁操作IIC,感觉不太好。

我的思路是外部的R……

还得问您一下,就是我系统的时间什么时候同步到外部rtc芯片中呢,要不然怎么修改rtc芯片的时间呢?
 
 
 

回复

92

帖子

0

TA的资源

一粒金砂(初级)

20
 
系统起不来,应该跟换芯片没有关系,估计是你指针用错了
或者是如果你在oal里面改东西,要注意了,即使不在一个文件中,也不能有同名函数,因为最后它们要连到一个库中,因此可以仔细查查有没有同名的函数,我以前被这个问题绊倒过
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表