8085|23

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

winCE5下 EBOOT 系列问题 ----------------4 HELP!! [复制链接]

问题1:在:\WINCE500\PLATFORM\COMMON\SRC\ARM\INTEL\PXA27X\STARTUP\startup.s中执行bl      OALXScaleSetFrequencies没有正常返回
       发现在OALXScaleSetFrequencies函数中执行
      ldr        r1, =xlli_CLKREGS_PHYSICAL_BASE    ; OSCC = OON | TOUT | CRI
      mov        r2, #(xlli_OSCC_OON :OR: xlli_OSCC_TOUT_EN :OR: xlli_OSCC_CRI)
     str        r2, [r1, #xlli_OSCC_offset]后死掉
      我把OALXScaleSetFrequencies函数中除了
      bl      xlli_setClocks
     bl      xlli_freq_change之外所有语句去掉后,执行正常,可以正常返回,
      请问OALXScaleSetFrequencies这个函数的作用是什么?是否可以象这样消掉?(我在WINCE42下并没有找到这个函数)
问题2:在bl      OALXScaleSetFrequencies正常返回后,就顺利的从startup进入到OALStartUp中
       我在开启MMU之前,即:
       ;Enable the MMU.
      mcr     p15, 0, r1, c1, c0, 0   ; MMU ON:  All memory accesses are now virtual.
       之前
       通过点亮LED调试程序发现都可以正常执行是依然不能正常进入C语言的MAIN函数中打印出启动信息  !
       所以现在不能确定是在开启MMU之后出现了问题,还是进入了C语言的MAIN函数,在MAIN中初始化串口失败了!!
       请问我在开启MMU之后需要通过什么方式调试???
      在开启MMU之前是直接访问GPIO的物理地址,开启之后我将所有点亮LED的程序中的物理地址都通过OEMAddressTable计算出对应的虚拟地址(应该是CACHED)直接替换掉原来的
       物理地址,可以不能正确点亮LED,打印信息也只有在开启MMU之间的程序,开启MMU之后,在进入MAIN之前如何用汇编打印信息----不清楚!!
       请问还有什么高招吗??各位!!
3:以下是点亮LED的程序:
   Light_xillLEDs FUNCTION
                ldr         r2,  =xlli_GPIOREGS_PHYSICAL_BASE  将此物理地址换成对应的虚拟地址
                ;Light D1, D2
                ldr                r3,  [r2, #xlli_GPCR0_offset]  这个没换(偏移量都没换)
                ldr                r1,  =0x0600   
                orr                r3,  r3,  r1
                str                r3,  [r2, #xlli_GPCR0_offset]
                ldr                r3,  [r2, #xlli_GPCR0_offset]

                ldr                r2,  =xlli_OSTREGS_PHYSICAL_BASE ; Load OS timer base address 将此物理地址换成对应的虚拟地址
                ldr                r3,  [r2, #xlli_OSCR0_offset]    ; Fetch starting value of OSCR0
                ldr                r1,  =0xB4000
                add                r3,  r3,  r1                                         ; about 200ms, 0x384000 about 1000ms

       delay    ldr                r1,  [r2, #xlli_OSCR0_offset]    ; Fetch current OSCR0 value
                cmp                r1,  r3                          ; Is the timer past the time out value?
                bmi                delay

                ;Black D1, D2
                ldr                r2,  =xlli_GPIOREGS_PHYSICAL_BASE 将此物理地址换成对应的虚拟地址
                ldr                r3,  [r2, #xlli_GPSR0_offset]
                ldr                r1,  =0x0600
                orr                r3,  r3,  r1
                str                r3,  [r2, #xlli_GPSR0_offset]
                ldr                r3,  [r2, #xlli_GPSR0_offset]

                ldr                r2,  =xlli_OSTREGS_PHYSICAL_BASE ; Load OS timer base address将此物理地址换成对应的虚拟地址
                ldr                r3,  [r2, #xlli_OSCR0_offset]    ; Fetch starting value of OSCR0
                ldr                r1,  =0xB4000
                add                r3,  r3,  r1                                         ; about 200ms, 0x384000 about 1000ms

        delay1  ldr                r1,  [r2, #xlli_OSCR0_offset]    ; Fetch current OSCR0 value
                cmp                r1,  r3                          ; Is the timer past the time out value?
                bmi                delay1

                mov                pc, lr
        ENDFUNC

   谢谢各位!!!
此帖出自WindowsCE论坛

最新回复

不知楼主现在有没成功? 既然你已经在物理地址上电灯可以实现,那你完全可以在开启MMU后的虚拟地址上实现 要提醒你的是 1:必须得确保你已经将PIO口的寄存器通过CFG.INC文件里的g_oalAddressTable表格映射到虚拟地址上 2:你要最终操作的虚拟地址必须是无缓存的虚拟地址内即:0xA0000000 --0xC0000000 中的一个地址 希望能对你有所帮助  详情 回复 发表于 2009-4-29 09:01
点赞 关注
 

回复
举报

87

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
帮顶了~~~
此帖出自WindowsCE论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我也在弄Eboot,帮顶了
此帖出自WindowsCE论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

4
 
MARK一下,现在没时间看。有时间仔细瞧瞧。
此帖出自WindowsCE论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

5
 
等待高手解决,关注中
此帖出自WindowsCE论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

6
 
1. 建議 lz 回頭看一下 PXA270 User's Manual 中有關 OSCC 的描述, 看看設定會有什麼結果, 若是看不懂 (無所謂, 這是常有的事), 先把它做個記號, 先 mark 掉後再繼續下去, 日後有時間再回頭來研究.
有時移除相關程式碼是因為你的板子與 bsp 的硬體線路不同而必須做的修改, 畢竟你的板子一定與 bsp 有不同之處, 不然應該不用修改放下去就能動了.

印象中, PXA270 BSP 的 porting 最大的關卡在 xlli_setClocks, 你必須研讀文件 "Diagnostics for the Intel PXA27x Processor Developer's Kit User's Guide" (Order Number:278938-002) 去設定正確的值.

2.

3. 建議你將 r1, r2, r3 的值都利用 stack 保存起來(當然 sp 要先設好), 或是確認呼叫前後 r1-r3 其值被確壞不會有問題.

Paul, Chao @ Techware
此帖出自WindowsCE论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

7
 
paul_chao 大侠:
   
首先:请问问题2怎么解决呢?我现在比较着急解决问题2,这样就可以继续调试了

问题1中您说的xlli_setClocks这个函数,我是没有动PB自带的原代码,现在只能试出已经运行通过了这个函数
     但是不知道如果设置不正确是不是会影响后面的程序,不过我可以将以前已经能用的设置(WINCE4下)完全
     拷贝过来
问题3:这段LED代码是可以用的
       只是在开启MMU之后用不了了,因为这之前是访问物理地址操作的
       开启MMU之后,我将这里面的物理地址对应换算成虚拟地址,现在是还没调通,
       但不知道这个方法是否是可行的???
      如果可行我还可以继续琢磨这个方法,如果不行我就直接放弃这个方法了!
此帖出自WindowsCE论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

8
 
顶起!
此帖出自WindowsCE论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

9
 
1. 試試看唄, 有問題再說了

2. 不是很懂 lz 的意思, 但是用 0xA0000000 ~ 0xBFFFFFFF (Uncached Virtual Address), 之前的 gpio, uart 的操作都還是一樣.

3. MMU 開啟之後, 只要將 Physical Address 改成 Uncached Virtual Address 即可.

Paul, Chao @ Techware
此帖出自WindowsCE论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

10
 
第一个问题:这个问题主要是要看数据手册的,其实你只要拿板子提供的启动代码,或者测试代码上的启动代码直接拷贝过去就可以了.就是要设定cpu的频率.
第二个问题:MMU开启后,看你自己是怎么配置内存影射的,如果是GPIO口的话,建议在MMU启动后还是继续用真实物理地址访问,和设置.
至于不能跳到主程序,有很多原因可能会引起这个错误,主要在与你内存是否配置好,程序入口地址是否正确(就是说你的 eboot加载的到内存得地址是否等于boot.bib中设定的地址)
此帖出自WindowsCE论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

11
 
bootloader开发啊,,开启MMU之后既然只能访问虚拟地址,虚拟地址又是与物理地址对应的,我觉得能够点亮LED,LZ应该先在开启MMU后实现正确点亮LED来确实MMU是否正常
此帖出自WindowsCE论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

12
 
MMU开启后,要看MMU的具体影射,一般情况下,控制寄存器的真实物理地址还是存在的,并不是说MMU开启后,原来地址都不能用.
此帖出自WindowsCE论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 11 楼 liaifeilove 的回复:
MMU开启后,要看MMU的具体影射,一般情况下,控制寄存器的真实物理地址还是存在的,并不是说MMU开启后,原来地址都不能用.

那是说开启MMU之后还可以操作物理地址点亮LED???????????
如果是这样就好办了
明天试试!!
非常感谢!!!!
此帖出自WindowsCE论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(中级)

14
 
引用 8 楼 paul_chao 的回复:
1. 試試看唄, 有問題再說了

2. 不是很懂 lz 的意思, 但是用 0xA0000000 ~ 0xBFFFFFFF (Uncached Virtual Address), 之前的 gpio, uart 的操作都還是一樣.

3. MMU 開啟之後, 只要將 Physical Address 改成 Uncached Virtual Address 即可.

Paul, Chao @ Techware


我的意思是开启MMU之后如何点亮LED,
“MMU 開啟之後, 只要將 Physical Address 改成 Uncached Virtual Address 即可.”就是答案了,我今天设置的是CACHE的虚拟地址(OEMAddresstabel中好象都是CACHE的虚拟地址)
明天也试试将CACHED换成UNCHCHED
此帖出自WindowsCE论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

15
 
引用 12 楼 wangxin_801115 的回复:
引用 11 楼 liaifeilove 的回复:
MMU开启后,要看MMU的具体影射,一般情况下,控制寄存器的真实物理地址还是存在的,并不是说MMU开启后,原来地址都不能用.

那是说开启MMU之后还可以操作物理地址点亮LED???????????
如果是这样就好办了
明天试试!!
非常感谢!!!!

开启MMU后访问映射后的地址点亮LED
此帖出自WindowsCE论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

16
 
建议楼主多看看我发过的帖子:MMU地址映射问题,相信你不会再对MMU开启后如何点亮LED有疑惑
此帖出自WindowsCE论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

17
 
引用 15 楼 kkkcxf1981 的回复:
建议楼主多看看我发过的帖子:MMU地址映射问题,相信你不会再对MMU开启后如何点亮LED有疑惑


LDR      r3,=0x01000000  (此处是点灯,使用的是pio口的物理地址)
LDR      r4,=0xFFFFF430
STR      r3,[r4]

您这3条汇编语句是什么意思啊?
通过这三句就可以实现点LED吗??
前面需要对GPIO做初始化吗?
或者还需要什么特殊的初始化操作???
谢谢啦
此帖出自WindowsCE论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

18
 
这三个语句是和具体CPU的IO控制寄存器有关,你只能是借鉴一下这种方法.
第一个是赋值
第二个是PA口的数据设置寄存器
第三个就是设置PA口中的一位电平为1啦,灯亮

在这三个之前你肯定还需要对IO口做相关的初始化操作的,例如输入输出方向,I/O使能等

看来楼主需要仔细研读下你的CPU datasheet,里面会有很好的解释,这一步是躲不掉的哦
此帖出自WindowsCE论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

19
 
kkkcxf1981 兄:
    还是没有搞定啊
能不能留个QQ或者MSN,详细问一下您啊??
此帖出自WindowsCE论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

20
 
这个问题提得好“请问我在开启MMU之后需要通过什么方式调试???”
等待回复
此帖出自WindowsCE论坛
 
 
 

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

随便看看
查找数据手册?

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