+ -
当前位置:首页 → 问答吧 → 请问大家一个2440的时钟设置问题

请问大家一个2440的时钟设置问题

时间:2010-12-03

来源:互联网

本帖最后由 zsmctfy 于 2010-12-03 22:32 编辑

我写了这么一个裸机程序,有两个文件,start.s和test.c,开发板是mini2440
start.s 中初使化sdram,但是在设置MPLL时遇到了困难
代码有点长,但有问题的只是start.s中的红色字的部分“@        bl clksetup”,在第八行。
请大家帮我看看。

start.s中的代码:
  1. .equ  MEM_CTL_BASE,        0x48000000
  2. .equ  SDRAM_BASE,        0x30000000

  3. .text
  4. .global _start
  5. _start:
  6.               bl disable_watchdog
  7. @        bl clksetup
  8.               bl memsetup
  9.         bl copy_steppingstone_to_sdram
  10.         ldr pc,=on_sdram
  11. on_sdram:
  12.         mov sp,#0x34000000
  13.         bl  main


  14. disable_watchdog:
  15.               mov  r0,#0x53000000
  16.               mov  r1,#0x00
  17.               str  r1,[r0]
  18.               mov  pc,lr

  19. clksetup:
  20.         mov  r0,#0x4c000000
  21.         add  r0,r0,#0x14
  22.         mov  r1,#0x03
  23.         str  r1,[r0]

  24.         mov  r0,#0x4c000000
  25.         add  r0,r0,#4
  26.         ldr  r1,=((0x7f << 12) | (0x2 << 4) | 0x1 )
  27.         str  r1,[r0]

  28.         mov  pc,lr


  29. copy_steppingstone_to_sdram:
  30.               mov  r1,#0
  31.         ldr  r2,=SDRAM_BASE
  32.         mov  r3,#4*1024
  33. 1:
  34.         ldr  r4,[r1],#4
  35.         str  r4,[r2],#4
  36.         cmp  r1,r3
  37.         bne  1b
  38.         mov  pc,lr


  39. memsetup:
  40.         mov  r1,#MEM_CTL_BASE
  41.         adrl r2,mem_cfg_val
  42.         add  r3,r1,#52
  43. 1:
  44.         ldr  r4,[r2],#4
  45.         str  r4,[r1],#4
  46.         cmp  r1,r3
  47.         bne  1b
  48.         mov  pc,lr

  49. .align 4
  50. mem_cfg_val:
  51. .long 0x22011110
  52. .long 0x00000700
  53. .long 0x00000700
  54. .long 0x00000700
  55. .long 0x00000700
  56. .long 0x00000700
  57. .long 0x00000700
  58. .long 0x00018005
  59. .long 0x00018005
  60. .long 0x008c07A3
  61. .long 0x000000b1
  62. .long 0x00000030
  63. .long 0x00000030
复制代码
test.c中的代码如下:
  1. #include"s3c2440.h"

  2. void delay()
  3. {
  4.     int i;
  5.     for(i=0;i<0xff00;i++);
  6. }

  7. int main()
  8. {
  9.     int i;
  10.     delay();
  11.     GPBCON = 0x15400;
  12.     GPBDAT = 0xf<<5;
  13.     for(i=0;i<5;i++)
  14.     {
  15.         GPBDAT = 0x00;
  16.         delay();
  17.         GPBDAT = 0xf<<5;
  18.         delay();
  19.     }
  20.     while(1)
  21.     {
  22.         GPBDAT = 0x00;
  23.         delay();
  24.         GPBDAT = 0xf<<5;
  25.         delay();
  26.      }
  27.       
  28. }
复制代码
困难就在于start.s中被注释的“@        bl clksetup”,它是设置MPLL 的,如果不注释这一部分,程序就会出错,注释就可以正常运行,请大家帮我看看这是什么原因。

作者: zsmctfy   发布时间: 2010-12-03

设置CPU时钟时,LOCKTIME是不要先设置下,

作者: rabbitlcat   发布时间: 2010-12-04

回复 zsmctfy


      LOCKTIME 可以使用0xffffffff... 不需要设置... 保险的可以设置一下... 另外再设置MPLL之后自行加一段延时操作... 自动插入的LOCKTIME的可能会不够... 为保险再加一段延时操作...  
  另外再设置CLKDIVN的时候如果HDIVN不为0...则需要把先前的快速总线模式设置为异步总线模式...2440的手册上有NOTE...

作者: PCliangtao   发布时间: 2010-12-04

热门下载

更多