7446|21

60

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于2410唤醒的疑惑 [复制链接]

我使用的平台是2410 ,系统为CE5.0   ,在做电源管理的时候遇到了如下的问题
1、能够休眠。
经过fw.s中的CPUPOWEROFF后系统可以确定是休眠了,理由是:PWREN 脚为低,CLK0,CLK1,SCK也都为低,虽然我没有把内核的1.8V分开,但是系统的电流确实降了,NORMAL的时候是100个,POWER OFF后是50

2、能唤醒,但是无法恢复休眠前的状态
通过按下EINT0按键可以唤醒CPU,电流也上来了,PWREN,SCK为高,CLK,SCK电压为1.75V,而且Bootloader也能够判断是从POWER OFF上电的,所以能够进入到BOOT的唤醒处执行代码,唤醒的代码是我从eeworld中关于2440唤醒的贴子中 COPY的,我想应该移植到2410上来(略微的改动了一点代码)。

但是现在遇到的问题是,我用LED跟踪代码的时候发现程序老是跳到BringUpWinCE处,而没有执行恢复过程,从代码来看是在校验SDRAM里面保存的数据的时候没有通过,即
30
    ldr     r1, [r3], #4                        ; compute the checksum.
    and     r1, r1, #0x1
    mov     r1, r1, LSL #31
    orr     r1, r1, r1, LSR #1
    add     r2, r2, r1
    subs    r0, r0, #1
    bne     %b30

    ldr    r0,=GSTATUS3
    ldr    r3, [r0]                        ; get the Sleep data checksum from the Power Manager Scratch pad register
    cmp    r2, r3                          ; compare to what we saved before going to sleep
    bne    BringUpWinCE                    ; bad news - do a cold boot
没有通过,这个可能会是什么原因造成的呢?我已经改过了
SLEEPDATA_BASE_VIRTUAL          EQU        0xac058000                ; keep in sync w/ config.bib
SLEEPDATA_BASE_PHYSICAL         EQU        0x3c058000
但是依然过不去,希望坛子里的各位给帮忙看下,谢谢

楼下是我的详细代码,我知道可能程序有点儿多,很少有能耐心看的,但是没办法,真的没折了,如果可以的话我可以拿资料换代码,比如核心板图,RFID方案,RF无能通信方案等,呵呵,没办法了,只能这样了

最新回复

现在项目比较急,这几天就得搞定,哎,愁死了。。。。。。 如果谁有方案的话公司愿意直接购买,有的话可以联系我哟,呵呵,让大伙赚些零用钱  详情 回复 发表于 2010-5-20 13:57
点赞 关注

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
fw.s

  1. ; Data Cache Characteristics.
  2. ;
  3. DCACHE_LINES_PER_SET_BITS       EQU     6
  4. DCACHE_LINES_PER_SET            EQU     64
  5. DCACHE_NUM_SETS                 EQU     8
  6. DCACHE_SET_INDEX_BIT            EQU     (32 - DCACHE_LINES_PER_SET_BITS)
  7. DCACHE_LINE_SIZE                EQU     32

  8. SLEEPDATA_BASE_VIRTUAL          EQU        0xac058000                ; keep in sync w/ config.bib
  9. SLEEPDATA_BASE_PHYSICAL         EQU        0x3c058000

  10. ;**
  11. ; * CPUPowerOff - OFF button handler(Called from OEMPowerOff() in cfw.c)
  12. ; *     This routine is invoked when the OFF button is pressed. It is responsible
  13. ; *        for any final power off state and putting the cpu into standby.
  14. ; *
  15. ; *        Entry        none
  16. ; *        Exit        none
  17. ; *        Uses        r0-r3
  18. ; *

  19.     LEAF_ENTRY CPUPowerOff

  20.     ; 1. Save register state and return address on the stack.
  21.     ;
  22.     stmdb   sp!, {r4-r12}                  
  23.     stmdb   sp!, {lr}
  24. ;    b .

  25.     ; 2. Save MMU & CPU Registers to RAM.
  26.     ;
  27.     ldr     r3, =SLEEPDATA_BASE_VIRTUAL         ; base of Sleep mode storage

  28.     ldr     r2, =Awake_address
  29.     str     r2, [r3], #4                        ; save resume function address (virtual).
  30.    
  31.     mrc     p15, 0, r2, c1, c0, 0
  32.     ldr     r0, =MMU_CTL_MASK
  33.     bic     r2, r2, r0
  34.     str     r2, [r3], #4                        ; save MMU control data.

  35.     mrc     p15, 0, r2, c2, c0, 0
  36.     ldr     r0, =MMU_TTB_MASK
  37.     bic     r2, r2, r0
  38.     str     r2, [r3], #4                        ; save TTB address.

  39.     mrc     p15, 0, r2, c3, c0, 0
  40.     str     r2, [r3], #4                        ; save domain access control.

  41.     str     sp, [r3], #4                        ; save SVC mode stack pointer.

  42.     mrs     r2, spsr
  43.     str     r2, [r3], #4                        ; save SVC status register.

  44.     mov     r1, #Mode_FIQ:OR:I_Bit:OR:F_Bit     ; enter FIQ mode, no interrupts.
  45.     msr     cpsr, r1
  46.     mrs     r2, spsr
  47.     stmia   r3!, {r2, r8-r12, sp, lr}           ; save the FIQ mode registers.

  48.     mov     r1, #Mode_ABT:OR:I_Bit:OR:F_Bit     ; enter ABT mode, no interrupts.
  49.     msr     cpsr, r1
  50.     mrs            r0, spsr
  51.     stmia   r3!, {r0, sp, lr}                   ; save the ABT mode Registers.

  52.     mov     r1, #Mode_IRQ:OR:I_Bit:OR:F_Bit     ; enter IRQ mode, no interrupts.
  53.     msr     cpsr, r1
  54.     mrs     r0, spsr
  55.     stmia   r3!, {r0, sp, lr}                   ; save the IRQ Mode Registers.

  56.     mov     r1, #Mode_UND:OR:I_Bit:OR:F_Bit     ; enter UND mode, no interrupts.
  57.     msr     cpsr, r1
  58.     mrs     r0, spsr
  59.     stmia   r3!, {r0, sp, lr}                   ; save the UND mode Registers.

  60.     mov     r1, #Mode_SYS:OR:I_Bit:OR:F_Bit     ; enter SYS mode, no interrupts.
  61.     msr     cpsr, r1
  62.     stmia   r3!, {sp, lr}                       ; save the SYS mode Registers.

  63.     mov     r1, #Mode_SVC:OR:I_Bit:OR:F_Bit     ; back to SVC mode, no interrupts.
  64.     msr     cpsr, r1
  65.                

  66.    ; 3. Compute the checksum on SleepData (verify integrity of data after resume).
  67.    ;
  68.     ldr     r3, =SLEEPDATA_BASE_VIRTUAL         ; get pointer to SLEEPDATA.
  69.     mov     r2, #0
  70.     ldr     r0, =(SLEEPDATA_SIZE-1)                 ; get size of data structure (in words).
  71. 30
  72.     ldr     r1, [r3], #4                        ; compute the checksum.
  73.     and     r1, r1, #0x1
  74.     mov     r1, r1, LSL #31
  75.     orr     r1, r1, r1, LSR #1
  76.     add     r2, r2, r1
  77.     subs    r0, r0, #1
  78.     bne     %b30
  79.        

  80.     ldr     r0, =vGPIOBASE
  81.     str     r2, [r0, #oGSTATUS3]                ; save the checksum in the Power Manager Scratch pad register.

  82.     ; 4. Mask and clear all interrupts.
  83.     ;
  84.     ldr     r0, =vINTBASE
  85.     mvn     r2, #0
  86.     str     r2, [r0, #oINTMSK]
  87.     str     r2, [r0, #oSRCPND]
  88.     str     r2, [r0, #oINTPND]

  89.     ; 5. Flush caches and TLBs.
  90.     ;
  91.     bl      ARMClearUTLB
  92.     bl      ARMFlushICache
  93.     ldr     r0, = (DCACHE_LINES_PER_SET - 1)   
  94.     ldr     r1, = (DCACHE_NUM_SETS - 1)   
  95.     ldr     r2, =  DCACHE_SET_INDEX_BIT   
  96.     ldr     r3, =  DCACHE_LINE_SIZE     
  97.     bl      ARMFlushDCache

  98.     ; 6. Set external wake-up interrupts (EINT0-2: power-button and keyboard).
  99.     ;
  100.     ldr     r0, =vGPIOBASE
  101.     ldr     r1, =0x550a
  102.     str     r1, [r0, #oGPFCON]

  103. ;   ldr     r1, =0x55550100
  104. ;   str     r1, [r0, #oGPGCON]

  105.     ; 7. Switch to power-off mode.
  106.     ;
  107.         ldr         r0, =vMISCCR                        ; hit the TLB
  108.         ldr                r0, [r0]
  109.         ldr         r0, =vCLKCON
  110.         ldr                r0, [r0]

  111.     ; **These registers are used later during power-off.
  112.     ;
  113.     ldr     r0, =vREFRESH               
  114.     ldr     r1, [r0]                            ; r1 = rREFRESH.
  115.     orr     r1, r1, #(1 << 22)

  116.     ; **These registers are used later during power-off.
  117.     ;
  118.     ldr     r2, =vMISCCR
  119.     ldr     r3, [r2]
  120.     orr     r3, r3, #(7 << 17)                  ; make sure that SCLK0:SCLK->0, SCLK1:SCLK->0, SCKE=L during boot-up.

  121.     ; **These registers are used later during power-off.
  122.     ;
  123.     ldr     r4, =vCLKCON
  124.     ldr     r5, =0x7fff8                        ; power-off mode.


  125. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  126. ; WinCE 3.00 assembler has some problem about ALIGN instruction.
  127. ; Sometimes it is not working in cache mode. So I modify to jump to ROM area.
  128. ; If the rom is EBOOT, the target address is 0x92001004.
  129. ; Else if the rom is NAND, the target address is 0x92000004.

  130. ;        ldr                r8, =0xEA000000
  131. ;        add                r8, r8, #0x3f0
  132. ;        add                r8, r8, #0xe                ; make value to 0xEA0003FE

  133. ;        ldr                r6, =0x92000000                ; make address to 0x9200 1004 or 0x9200 0004

  134. ;        ldr     r7, [r6]                        ; Check ROM Address data, if 0xEA0003FE, it is EBOOT
  135. ;        cmp                r7, r8
  136. ;        bne                %f50
  137. ;        add                r6, r6, #0x1000                ; Because eboot startup code is located at 0x1000.
  138. ;50
  139. ;        add                r6, r6, #0x4                ;
  140. ;        mov     pc, r6                                ; jump to Power off code in ROM
  141.        
  142. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  143.         b       SelfRefreshAndPowerOff
  144.         
  145.         ALIGN   32                      ; for I-Cache Line(32Byte, 8 Word)

  146. SelfRefreshAndPowerOff                ; run with Instruction Cache's code
  147.         str     r1, [r0]                ; Enable SDRAM self-refresh
  148.         str                r3, [r2]                ; MISCCR Setting
  149.         str     r5, [r4]                ; Power Off !!
  150.         b       .


  151. ; This point is called from EBOOT's startup code(MMU is enabled)
  152. ;       in this routine, left information(REGs, INTMSK, INTSUBMSK ...)

  153. Awake_address

  154. ;       1. Recover CPU Registers

  155.         ldr     r3, =SLEEPDATA_BASE_VIRTUAL                ; Sleep mode information data structure
  156.         add     r2, r3, #SleepState_FIQ_SPSR
  157.         mov     r1, #Mode_FIQ:OR:I_Bit:OR:F_Bit ; Enter FIQ mode, no interrupts
  158.         msr     cpsr, r1
  159.         ldr     r0,  [r2], #4
  160.         msr     spsr, r0
  161.         ldr     r8,  [r2], #4
  162.         ldr     r9,  [r2], #4
  163.         ldr     r10, [r2], #4
  164.         ldr     r11, [r2], #4
  165.         ldr     r12, [r2], #4
  166.         ldr     sp,  [r2], #4
  167.         ldr     lr,  [r2], #4

  168. ;        mov     r1, #Mode_ABT:OR:I_Bit:OR:F_Bit ; Enter ABT mode, no interrupts
  169.         mov     r1, #Mode_ABT:OR:I_Bit                        ; Enter ABT mode, no interrupts
  170.         msr     cpsr, r1
  171.         ldr     r0, [r2], #4
  172.         msr     spsr, r0
  173.         ldr     sp, [r2], #4
  174.         ldr     lr, [r2], #4

  175. ;        mov     r1, #Mode_IRQ:OR:I_Bit:OR:F_Bit ; Enter IRQ mode, no interrupts
  176.         mov     r1, #Mode_IRQ:OR:I_Bit                        ; Enter IRQ mode, no interrupts
  177.         msr     cpsr, r1
  178.         ldr     r0, [r2], #4
  179.         msr     spsr, r0
  180.         ldr     sp, [r2], #4
  181.         ldr     lr, [r2], #4

  182. ;        mov     r1, #Mode_UND:OR:I_Bit:OR:F_Bit ; Enter UND mode, no interrupts
  183.         mov     r1, #Mode_UND:OR:I_Bit                        ; Enter UND mode, no interrupts
  184.         msr     cpsr, r1
  185.         ldr     r0, [r2], #4
  186.         msr     spsr, r0
  187.         ldr     sp, [r2], #4
  188.         ldr     lr, [r2], #4

  189. ;        mov     r1, #Mode_SYS:OR:I_Bit:OR:F_Bit ; Enter SYS mode, no interrupts
  190.         mov     r1, #Mode_SYS:OR:I_Bit                        ; Enter SYS mode, no interrupts
  191.         msr     cpsr, r1
  192.         ldr     sp, [r2], #4
  193.         ldr     lr, [r2]

  194. ;        mov     r1, #Mode_SVC:OR:I_Bit:OR:F_Bit ; Enter SVC mode, no interrupts
  195.         mov     r1, #Mode_SVC:OR:I_Bit                        ; Enter SVC mode, no interrupts
  196.         msr     cpsr, r1
  197.         ldr     r0, [r3, #SleepState_SVC_SPSR]
  198.         msr     spsr, r0

  199. ;       2. Recover Last mode's REG's, & go back to caller of CPUPowerOff()

  200.         ldr     sp, [r3, #SleepState_SVC_SP]
  201.         ldr     lr, [sp], #4
  202.         ldmia   sp!, {r4-r12}
  203.         mov     pc, lr                          ; and now back to our sponsors



  204. ;
  205. ;  MMU_WaitForInterrupt() from 2410slib.s (in bsp/others/test2410_r11 dirs)
  206. ;
  207. ;void MMU_WaitForInterrupt(void)
  208.    EXPORT MMU_WaitForInterrupt
  209. MMU_WaitForInterrupt   
  210.         mcr  p15,0,r0,c7,c0,4
  211.         mov        pc, lr                                                                ;MOV_PC_LR



  212.         END
复制代码


 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
boot在的代码

  1. SLEEPDATA_BASE_VIRTUAL          EQU        0xac058000                ; keep in sync w/ config.bib
  2. SLEEPDATA_BASE_PHYSICAL         EQU        0x3c058000

  3. WAKEUP_POWER_OFF


  4. ;在Stepldr中


  5.   ; Resume handler code.
  6.      
  7.     ; Release SCLKn after wake-up from the POWER_OFF mode.
  8.    
  9.     ldr r1,=MISCCR
  10.         ldr        r0,[r1]
  11.         bic        r0,r0,#(7<<17)  ;SCLK0:0->SCLK, SCLK1:0->SCLK, SCKE:L->H
  12.         str        r0,[r1]
  13.        
  14.        
  15.        
  16.     ; Set up the memory control registers.
  17.     ;
  18. ;        add    r0, pc, #SMRDATA - (. + 8)
  19. ;    ldr r1, =BWSCON     ; BWSCON Address.
  20. ;    add r2, r0, #52     ; End address of SMRDATA.
  21.    
  22.     ldr        r0,=SMRDATA
  23.         ldr        r1,=BWSCON        ;BWSCON Address
  24.         add        r2, r0, #52        ;End address of SMRDATA
  25. 3      
  26.     ldr r3, [r0], #4   
  27.     str r3, [r1], #4   
  28.     cmp r2, r0
  29.     bne %B3
  30.    
  31.    

  32.         mov    r0, #0x2000
  33. 4
  34.         subs    r0, r0, #1
  35.         bne    %B4
  36.        
  37.        
  38.        
  39. ;------------------------------------------------------------------------------
  40. ;  Recover Process : Starting Point
  41. ;
  42. ;  1. Checksum Calculation saved Data
  43.         ldr    r5, =SLEEPDATA_BASE_PHYSICAL    ; pointer to physical address of reserved Sleep mode info data structure         //注意是指向一个  "唤醒模式信息"的结构体的地址
  44.         mov    r3, r5                          ; pointer for checksum calculation
  45.         ldr    r2, =0x0
  46.         ldr    r0, =(SLEEPDATA_SIZE-1)            ; get size of data structure to do checksum on
  47. ;        ldr    r0, =SLEEPDATA_SIZE
  48.        
  49.        
  50. 50
  51.         ldr    r1, [r3], #4                    ; pointer to SLEEPDATA
  52.         and    r1, r1, #0x1
  53.         mov    r1, r1, ROR #31
  54.         add    r2, r2, r1
  55.         subs    r0, r0, #1                      ; dec the count
  56.         bne    %b50                            ; loop till done   
  57.        
  58.        


  59.         ldr    r0,=GSTATUS3
  60.         ldr    r3, [r0]                        ; get the Sleep data checksum from the Power Manager Scratch pad register
  61.         cmp    r2, r3                          ; compare to what we saved before going to sleep
  62.         bne    BringUpWinCE                    ; bad news - do a cold boot
  63.        
  64.         ldr        r0,=GPFDAT                ;灯灭
  65.         ldr        r1,=0x10
  66.         str        r1,[r0]
  67.         b .
  68.   
  69. ;  2. MMU Enable
  70.         ldr    r10, [r5, #SleepState_MMUDOMAIN] ; load the MMU domain access info
  71.         ldr    r9,  [r5, #SleepState_MMUTTB]    ; load the MMU TTB info
  72.         ldr    r8,  [r5, #SleepState_MMUCTL]    ; load the MMU control info
  73.         ldr    r7,  [r5, #SleepState_WakeAddr ] ; load the LR address
  74.         nop        
  75.         nop
  76.         nop
  77.         nop
  78.         nop
  79.        
  80.        


  81. ; if software reset
  82.         mov    r1, #0
  83.         teq    r1, r7
  84.         bne    %f60
  85.         b      BringUpWinCE
  86.        
  87.        

  88. ; wakeup routine
  89. 60 mcr    p15, 0, r10, c3, c0, 0          ; setup access to domain 0
  90.         mcr    p15, 0, r9,  c2, c0, 0          ; PT address
  91.         mcr    p15, 0, r0,  c8, c7, 0          ; flush I+D TLBs
  92.         mcr    p15, 0, r8,  c1, c0, 0          ; restore MMU control

  93.        
  94. ;  3. Jump to Kernel Image's fw.s (Awake_address)
  95.         mov    pc, r7                          ;  jump to new VA (back up Power management stack)
  96.         nop

  97. BringUpWinCE
  98. ; bad news, data lose, bring up wince again
  99.         mov r0, #2
  100.         ldr r1, =GSTATUS2
  101.         str r0, [r1]
复制代码


config.bib

  1. #define NKNAME NK
  2.        
  3.         ; NK Start address
  4.         #define NKSTART                8C200000
  5.         #define NKLEN                01D00000
  6.        
  7.         #define RAMSTART        8E000000 ;8E000000
  8.         #define RAMLEN                02000000 ;01F00000

  9.         $(NKNAME)   $(NKSTART)      $(NKLEN)    RAMIMAGE
  10.         RAM         $(RAMSTART)     $(RAMLEN)   RAM

  11. ;        NK                                        80040000  01EB0000  RAMIMAGE
  12. ;        RAM                         8c200000  01C00000  RAM

  13. ; Common RAM areas
  14.         AUD_DMA                     8c002000  00002000  RESERVED
  15.         DRV_GLB                     8c010000  00010000  RESERVED
  16.         DBGSER_DMA                  8c022000  00002000  RESERVED
  17.         SER_DMA                     8c024000  00002000  RESERVED
  18.         IR_DMA                      8c026000  00002000  RESERVED
  19.         SD_DMA                              8c028000  00008000  RESERVED
  20.         EDBG                        8c030000  00020000  RESERVED
  21.         CPXIPCHAIN                  8c050000  00008000  RESERVED
  22.         SLEEP_BUFF                        8c058000  00004000        RESERVED
  23.         DISPLAY                     8c100000  00100000  RESERVED   


  24. CONFIG

  25.    COMPRESSION=ON
  26.    KERNELFIXUPS=ON


  27. IF IMGPROFILER   
  28.         PROFILE=ON
  29. ENDIF
  30. IF IMGPROFILER !
  31.         PROFILE=OFF
  32. ENDIF

  33.           
  34.    ROMFLAGS=0   

  35.    ROMSTART=$(NKSTART)
  36.    ROMWIDTH=32
  37.    ROMSIZE=$(NKLEN)
  38. ;   ROMSIZE=01EB0000



  39. ;#define CHAIN_ADDRESS        81E40000
  40. ;        CHAIN                        $(CHAIN_ADDRESS)    00001000        RESERVED
  41. ;        pdwXIPLoc                00000000  $(CHAIN_ADDRESS)      FIXUPVAR

  42. ;        NK                                80040000  01E00000  RAMIMAGE
  43. ;        CHAIN                  81E40000  00001000  RESERVED
  44. ;        DRIVERS                        81E41000  001BF000  RAMIMAGE

  45. ;        RESERVE                     8df00000  00080000
  46. ;        RAM                         8c200000  01D00000  RAM

复制代码

map.a


  1. ; Mapped for S3C2400X01

  2.     EXPORT      OEMAddressTable[DATA]

  3. OEMAddressTable
  4.     ;;;-------------------------------------------------------------
  5.     ;;; Virt Addr   Phys Addr   MB
  6.     ;;;-------------------------------------------------------------
  7.     DCD 0x80000000, 0x02000000, 30  ; 30 MB SROM(SRAM/ROM) BANK 0
  8.     DCD 0x82000000, 0x08000000, 32  ; 32 MB SROM(SRAM/ROM) BANK 1
  9.     DCD 0x84000000, 0x10000000, 32  ; 32 MB SROM(SRAM/ROM) BANK 2
  10.     DCD 0x86000000, 0x18000000, 32  ; 32 MB SROM(SRAM/ROM) BANK 3
  11.     DCD 0x88000000, 0x20000000, 32  ; 32 MB SROM(SRAM/ROM) BANK 4
  12.     DCD 0x8A000000, 0x28000000, 32  ; 32 MB SROM(SRAM/ROM) BANK 5
  13.     DCD 0x8C000000, 0x30000000, 64  ; 64 MB DRAM BANK 0,1
  14.     DCD 0x90800000, 0x48000000,  1  ; Memory control register
  15.     DCD 0x90900000, 0x49000000,  1  ; USB Host register
  16.     DCD 0x90A00000, 0x4A000000,  1  ; Interrupt Control register
  17.     DCD 0x90B00000, 0x4B000000,  1  ; DMA control register
  18.     DCD 0x90C00000, 0x4C000000,  1  ; Clock & Power register
  19.     DCD 0x90D00000, 0x4D000000,  1  ; LCD control register
  20.     DCD 0x90E00000, 0x4E000000,  1  ; NAND flash control register
  21.     DCD 0x91000000, 0x50000000,  1  ; UART control register
  22.     DCD 0x91100000, 0x51000000,  1  ; PWM timer register
  23.     DCD 0x91200000, 0x52000000,  1  ; USB device register
  24.     DCD 0x91300000, 0x53000000,  1  ; Watchdog Timer register
  25.     DCD 0x91400000, 0x54000000,  1  ; IIC control register
  26.     DCD 0x91500000, 0x55000000,  1  ; IIS control register
  27.     DCD 0x91600000, 0x56000000,  1  ; I/O Port register
  28.     DCD 0x91700000, 0x57000000,  1  ; RTC control register
  29.     DCD 0x91800000, 0x58000000,  1  ; A/D convert register
  30.     DCD 0x91900000, 0x59000000,  1  ; SPI register
  31.     DCD 0x91A00000, 0x5A000000,  1  ; SD Interface register
  32.     DCD 0x92000000, 0x00000000,  2  ;  2 MB SROM(SRAM/ROM) BANK 0
  33.     DCD 0x00000000, 0x00000000,  0  ; End of Table (MB MUST BE ZERO!)

  34.     END

复制代码
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

4
 
代码太长了吧
看都不好看,你能贴关键点的吗?
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

5
 
呵呵,不好意思啊,可能心急了点儿,怕把某要语句落掉,理解万岁

刚才看代码的时候找到了一个错误,应该把地址由

  1. SLEEPDATA_BASE_VIRTUAL          EQU    0xac058000        ; keep in sync w/ config.bib
  2. SLEEPDATA_BASE_PHYSICAL         EQU    0x3c058000
复制代码

改为了:

  1. SLEEPDATA_BASE_VIRTUAL          EQU    0xac058000        ; keep in sync w/ config.bib
  2. SLEEPDATA_BASE_PHYSICAL         EQU    0x30058000
复制代码

因为对SDRAM来说物理地址为0x3000 0000,在map.a中对应的虚拟地址是0x8c00 0000,所以唤醒时的物理地址应该写成  0x3005 8000

这样的话在校验SDRAM内的数据的时候就已经能通过了,但是在

  1. ; if software reset
  2.         mov    r1, #0
  3.         teq    r1, r7
  4.         bne    %f60
  5.         b      BringUpWinCE

复制代码

却一直过不去,#SleepState_WakeAddr一直为0,这个问题gooogleman曾经在
http://topic.eeworld.net/u/20090330/13/34ec9ed9-660a-412e-932b-abf789e9a26b.html
遇到过,不知道他是怎么解决的
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

6
 
先MARK。

好帖,学习下。
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

7
 
拿LED灯跟了好久,问题还是出在这里
; if software reset
    mov    r1, #0
    teq    r1, r7
    bne    %f60
    b      BringUpWinCE
没有跳到60处,而是跳到了BringUpWinCE
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

8
 
MarK,PCB画好后一起研究,这两天在画PCB
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 7 楼 lth93 的回复:
MarK,PCB画好后一起研究,这两天在画PCB


厉害啊硬件和驱动一起来,呵呵
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

10
 
咱俩的问题不太一样,我的是唤醒后挂掉,可能是什么占用内存给搞死了,另外我的BSP是
SleepState_Data_Start           EQU     (0)
SleepState_WakeAddr             EQU     (SleepState_Data_Start  + 0)
SleepState_WakeAddr就是0啊
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

11
 
或者你干脆把
; if software reset
mov r1, #0
teq r1, r7
bne %f60
b BringUpWinCE 这段给屏蔽掉试试,直接跳到60处试试
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

12
 
BringUpWinCE 是软复位的。估计是你的寄存器判断不对,呵呵。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 9 楼 lth93 的回复:
咱俩的问题不太一样,我的是唤醒后挂掉,可能是什么占用内存给搞死了,另外我的BSP是
SleepState_Data_Start EQU (0)
SleepState_WakeAddr EQU (SleepState_Data_Start + 0)
SleepState_WakeAddr就是0啊
[/quote]

那应该是一个用于保存和恢复断点的结构,这个0是这个结构的头儿,是一个类似偏移量,这个偏移量还应该加上一个地址,才是真正的存储断点的值的

[quote]引用 10 楼 lth93 的回复:
或者你干脆把
; if software reset
mov r1, #0
teq r1, r7
bne %f60
b BringUpWinCE 这段给屏蔽掉试试,直接跳到60处试试

屏蔽掉也不可以,没有跳转到BSP的FW.S里的恢复处,好像死机一样
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

14
 
引用 11 楼 laiqingxiong 的回复:
BringUpWinCE 是软复位的。估计是你的寄存器判断不对,呵呵。

是指我的GSTATUS3里存的校验值判断不对吗?
不过这个已经过去了啊,现在问题出在
; if software reset
mov r1, #0
teq r1, r7
bne %f60
b BringUpWinCE

应该是从SDRAM里面读取要跳转的值时出现了问题,值为0,这个要跳的地址不应该是0的
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

15
 
bl      ARMClearUTLB
bl      ARMFlushICache
bl      ARMFlushDCache


这3个函有人有吗,方便一下。 ycdbox@126.com
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

16
 
MARK~代码太多  先看~
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

17
 
引用 13 楼 dding832 的回复:
引用 11 楼 laiqingxiong 的回复:
BringUpWinCE 是软复位的。估计是你的寄存器判断不对,呵呵。

是指我的GSTATUS3里存的校验值判断不对吗?
不过这个已经过去了啊,现在问题出在
; if software reset
mov r1, #0
teq r1, r7
bne %f60
b BringUpWinCE

应该是从SDRAM里面……



恩~~有道理的
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

18
 
学习了  呵呵
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

19
 
当时很顺利。一下子就起来了。呵呵呵
你的4.2 BSP很难搞,只能帮顶了。
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

20
 
引用 18 楼 gooogleman 的回复:
当时很顺利。一下子就起来了。呵呵呵
你的4.2 BSP很难搞,只能帮顶了。


我的BSP目录是4.2结构的,但是OS是5.0的
大多数的2410和2440开发板当时都是从4.2的移过来的
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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