5289|17

70

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

2410/2440裸奔时MMU以及寄存器访问和植入Wince时候有何不同? [复制链接]

最近想把内存改为128M,现在正在看u241mon启动代码,里面也涉及到MMU等,但是我看到2410addr.Inc文件里面的寄存器地址是物理地址的
GBLL   BIG_ENDIAN__
BIG_ENDIAN__   SETL   {FALSE}

;=================
; Memory control
;=================
BWSCON      EQU  0x48000000     ;Bus width & wait status
BANKCON0    EQU  0x48000004     ;Boot ROM control
BANKCON1    EQU  0x48000008     ;BANK1 control
BANKCON2    EQU  0x4800000c     ;BANK2 cControl
BANKCON3    EQU  0x48000010     ;BANK3 control
BANKCON4    EQU  0x48000014     ;BANK4 control
BANKCON5    EQU  0x48000018     ;BANK5 control
BANKCON6    EQU  0x4800001c     ;BANK6 control
BANKCON7    EQU  0x48000020     ;BANK7 control
REFRESH     EQU  0x48000024     ;DRAM/SDRAM refresh
BANKSIZE    EQU  0x48000028     ;Flexible Bank Size
MRSRB6      EQU  0x4800002c     ;Mode register set for SDRAM
MRSRB7      EQU  0x48000030     ;Mode register set for SDRAM
-----------------------------那这样启用MMU干什么呢?

很想知道。麻烦各位指点一下。
此帖出自WindowsCE论坛

最新回复

哈哈,自己搜索到半年前自己发的帖子,现在看到自己的老帖。 感觉那时候自己好青涩啊。 值得纪念。  详情 回复 发表于 2009-3-25 10:27
点赞 关注
 

回复
举报

73

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
裸奔的时候设置的页表里虚拟地址和物理地址一样的
所以这里都是物理地址吧
此帖出自WindowsCE论坛
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我们公司的一些ARM7的产品也是裸奔的。裸奔的好处就是程序好写点,就把它当作单片机用,如果对实时性不高的场合,裸奔也是不错的。
此帖出自WindowsCE论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

4
 
裸奔没法上操作系统,只能做点简单的应用
各有用处啦
此帖出自WindowsCE论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

5
 
2楼的,是实时性高才要裸奔
关于寄存器,裸奔和操作系统没区别的,你想对哪个读写就对哪个读写咯,不过有些操作系统采用的是虚拟地址,那么在操作系统里编的程序访问不了一些寄存器,不过你要是有实力的话,想怎么干都行
MMU就是一个地址转换,专门为操作系统的虚拟内存,虚拟物理地址管理提供的便利工具,例如他能够把地址0x10000000当成0x00000000给处理器执行,所以像三星的44b0没有MMU,他就装不了linux,而有MMU的2410却可以
此帖出自WindowsCE论坛
 
 
 

回复

96

帖子

0

TA的资源

一粒金砂(初级)

6
 
2楼的,是实时性高才要裸奔
??
--------------不对吧,裸奔就是个死循环,如果使用中断的话实时性估计还可以,如果别的实时性不敢恭维,ucos这样的小操作系统实时性比较好。
此帖出自WindowsCE论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

7
 
是啊 对于硬件来说裸奔和操作系统来说肯定是没区别的
此帖出自WindowsCE论坛
 
 
 

回复

95

帖子

0

TA的资源

一粒金砂(初级)

8
 
路过,不懂,想了解多一点,帮顶!
此帖出自WindowsCE论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

9
 
[code]HandleReset     #   4
HandleUndef         #   4   
HandleSWI        #   4     
HandlePabort    #   4
HandleDabort    #   4
HandleReserved  #   4
HandleIRQ        #   4     
HandleFIQ       #   4
这些是什么意思啊,在2440init.s里面的
此帖出自WindowsCE论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 8 楼 gooogleman 的回复:
HandleReset    #  4
HandleUndef #  4  
HandleSWI #  4   
HandlePabort    #  4
HandleDabort    #  4
HandleReserved  #  4
HandleIRQ #  4   
HandleFIQ      #  4
这些是什么意思啊,在2440init.s里面的


这些是对应标号的偏移地址,是各中断对应的入口地址
此帖出自WindowsCE论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

11
 
建立二级中断向量表
---在ARM系统中,中断向量表位于0X0开始的地址处,意味着无论运行什么样的上层软件,一旦发生中断,程序就得到Flash存储器中的中断向量表里去,降低系统的运行效率。因此在RAM中建立自己的二级中断向量表,当中断发生后,程序直接从RAM中取中断向量进入中断子程序。尤其是在中断频繁发生的系统里,这种方法可以大大提高系统的运行效率,具体的实现代码如下。
---b ResetHandler
---b HandlerUndef /*未定义模式句柄*/
---b HandlerSWI /*SWI中断句柄*/
---b HandlerPabort /*PAbort中断句柄*/
---b HandlerDabort /*Dabort中断句柄*/
---b. /*保留*/
---b HandlerIRQ /*IRQ 中断句柄*/
---b HandlerFIQ /*FIQ中断句柄*/
---HandlerFIQ HANDLER HandleFIQ
---HandlerIRQ HANDLER HandleIRQ
---HandlerUndef HANDLER HandleUndef
---HandlerSWI HANDLER HandleSWI
---HandlerDabort HANDLER HandleDabort
---HandlerPabort HANDLER HandlePabort
---其中HANDLER是一个宏,用于查找中断处理程序的入口地址。这些地址存放在由HandleXXX指向的表项中,该表定位在RAM高端,基地址为_ISR_STARTADDRESS。
---^ _ISR_STARTADDRESS
---HandleReset # 4
---HandleUndef # 4
---HandleSWI # 4
---HandlePabort # 4
---HandleDabort # 4
---HandleReserved # 4
---HandleIRQ # 4
---HandleFIQ # 4

相见http://www.dzsc.com/data/html/2007-4-16/12039.html
此帖出自WindowsCE论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

12
 
;===========================================================
        ;bl        Led_Test ?
         
        ldr        r0, =BWSCON ??
        ldr        r0, [r0] 
        ands        r0, r0, #6                ;OM[1:0] != 0, NOR FLash boot         
        bne        copy_proc_beg                ;don't read nand flash  ???  
        adr        r0, ResetEntry                ;OM[1:0] == 0, NAND FLash boot      
        cmp        r0, #0                                ;if use Multi-ice,           ???
        bne        copy_proc_beg                ;don't read nand flash for boot
????
        ;nop   
;==========================================================
///////////////----------------------------------------------从NOR FLASH还是从NAND FLASH驱动启动不是由硬件自动实现的吗?这里怎么会要程序判断?
此帖出自WindowsCE论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 8 楼 gooogleman 的回复:
HandleReset    #  4
HandleUndef #  4  
HandleSWI #  4   
HandlePabort    #  4
HandleDabort    #  4
HandleReserved  #  4
HandleIRQ #  4   
HandleFIQ      #  4
这些是什么意思啊,在2440init.s里面的



---------这是为HandleIRQ 分配4个字节的存储空间。
---------基本问题都弄懂了,只是想看一下大家的意见。这里做Wince应用程序的人比较多吧。
---------慢慢求索。
此帖出自WindowsCE论坛
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

14
 
#不是注释么。。
此帖出自WindowsCE论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

15
 
引用 13 楼 hhyh612 的回复:
#不是注释么。。

-------------------显然不是,在有些地方“#”是注释的。貌似在wince的一些文件是注释的,但是在ADS的工程里面显然不是,
HandleReserved  #  4
表示给HandleReserved  分配4个字节的存储空间
此帖出自WindowsCE论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

16
 
;=======================================================================================================
ResetHandler
        ldr        r0,=WTCON       ;watch dog disable
        ldr        r1,=0x0
        str        r1,[r0]

        ldr        r0,=INTMSK
        ldr        r1,=0xffffffff  ;all interrupt disable
        str        r1,[r0]

        ldr        r0,=INTSUBMSK
        ldr        r1,=0x7fff                ;all sub interrupt disable
        str        r1,[r0]

        [ {FALSE}
        ; rGPFDAT = (rGPFDAT & ~(0xf<<4)) | ((~data & 0xf)<<4);
        ; Led_Display
        ldr        r0,=GPFCON
        ldr        r1,=0x5500
        str        r1,[r0]
        ldr        r0,=GPFDAT
        ldr        r1,=0x10
        str        r1,[r0]
        ]

        ;To reduce PLL lock time, adjust the LOCKTIME register.
        ldr        r0,=LOCKTIME
        ldr        r1,=0xffffff
        str        r1,[r0]

    [ PLL_ON_START
        ; Added for confirm clock divide. for 2440.
        ; Setting value Fclk:Hclk:Pclk
        ldr        r0,=CLKDIVN
        ldr        r1,=CLKDIV_VAL                ; 0=1:1:1, 1=1:1:2, 2=1:2:2, 3=1:2:4, 4=1:4:4, 5=1:4:8, 6=1:3:3, 7=1:3:6.
        str        r1,[r0]
;        MMU_SetAsyncBusMode and MMU_SetFastBusMode over 4K, so dont' call here
;        call it after copy, hzh
;        [ CLKDIV_VAL>1                 ; means Fclk:Hclk is not 1:1.
;        bl MMU_SetAsyncBusMode
;        |
;        bl MMU_SetFastBusMode        ; default value.
;        ]
       
        ;program has not been copied, so use these directly, hzh
        [ CLKDIV_VAL>1                 ; means Fclk:Hclk is not 1:1.
        mrc p15,0,r0,c1,c0,0
        orr r0,r0,#0xc0000000;R1_nF:OR:R1_iA
        mcr p15,0,r0,c1,c0,0
        |
        mrc p15,0,r0,c1,c0,0
        bic r0,r0,#0xc0000000;R1_iA:OR:R1_nF
        mcr p15,0,r0,c1,c0,0
        ]

        ;Configure UPLL
        ldr        r0,=UPLLCON
        ldr        r1,=((U_MDIV<<12)+(U_PDIV<<4)+U_SDIV)  
        str        r1,[r0]
        nop        ; Caution: After UPLL setting, at least 7-clocks delay must be inserted for setting hardware be completed.
        nop
        nop
        nop
        nop
        nop
        nop
        ;Configure MPLL
        ldr        r0,=MPLLCON
        ldr        r1,=((M_MDIV<<12)+(M_PDIV<<4)+M_SDIV)  ;Fin=16.9344MHz
        str        r1,[r0]
    ]
   
        ;Check if the boot is caused by the wake-up from SLEEP mode.
        ldr        r1,=GSTATUS2
        ldr        r0,[r1]
        tst        r0,#0x2
        ;In case of the wake-up from SLEEP mode, go to SLEEP_WAKEUP handler.
        bne        WAKEUP_SLEEP

        EXPORT StartPointAfterSleepWakeUp
StartPointAfterSleepWakeUp

        ;Set memory control registers
        ;ldr        r0,=SMRDATA
        adrl        r0, SMRDATA        ;be careful!, hzh
        ldr        r1,=BWSCON        ;BWSCON Address
        add        r2, r0, #52        ;End address of SMRDATA

0
        ldr        r3, [r0], #4
        str        r3, [r1], #4
        cmp        r2, r0
        bne        %B0
       
        ;===delay, hzh
        mov        r0, #&1000
1
        subs        r0, r0, #1
        bne        %B1
;===================================================================================
---------------在BIOS期间(只有在植入linux或者wince的时候ARM9的MMU才有意义?)是没有开启的,说不上
什么虚拟地址和物理地址是相同的,我觉得ARM9最难理解的就是MMU这个东西,我看了一遍《ARM软件设计与优化》的相关
章节,看的一头雾水,看来要看第二遍甚至更多遍才能理解。

---------快来发言啊,有人再顶一次,我就结贴了。
此帖出自WindowsCE论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

17
 
结贴,给分
此帖出自WindowsCE论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

18
 
哈哈,自己搜索到半年前自己发的帖子,现在看到自己的老帖。

感觉那时候自己好青涩啊。

值得纪念。
此帖出自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
快速回复 返回顶部 返回列表