Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2255847
  • 博文数量: 318
  • 博客积分: 8752
  • 博客等级: 中将
  • 技术积分: 4944
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-23 07:56
文章分类

全部博文(318)

文章存档

2019年(1)

2017年(2)

2016年(12)

2015年(2)

2014年(1)

2013年(17)

2012年(22)

2011年(9)

2010年(37)

2009年(33)

2008年(44)

2007年(43)

2006年(95)

分类:

2007-03-08 16:26:53

禁止看门狗——》在中断控制器中屏蔽所有中断——》系统时钟设置——》初始化端口——》DMA设置——》cashe和总线设置——》存储器设置,初始化SDRAM——》初始化堆栈——》设置IRQFIQ的入口——》地址重映射

   

    通常系统初始化有两个阶段组成,分别为汇编和C写成。汇编应尽量简单一些,把更多的任务交给C来做,这样可增加整个程序的可读性和灵活性。必须由汇编来完成的任务有:异常中断向量表的设置、IRQ向量表(向量模式)或ISR初始化(非向量模式)、二级ISR地址表的定义、FlashSDRAM的设置(否则系统无法加载代码)、堆栈设置和模式切换、拷贝RWZI代码、设置系统时钟等。而端口初始化、cashe和总线的设置、DMA配置以及其它控制器如LCDUARTSIOIP等可以在C中第二阶段初始化程序完成,另外也可以继续更改时钟或存储器配置等。下面是几个关键步骤配置的注意事项。

 

看门狗设置

    watch dog即可以作为普通的timer以产生周期性的中断,也可以周期性的产生reset信号(如果每隔一定时间不被清除的话),以防治程序跑飞。

 

系统时钟的初始化:

至少设置三个寄存器:LOCKTIME,PLLCON,LOCKCON

LOCKTIME,地址0x01D8000C。用于指定PLL的初始化时间,在PLL初始化时,系统时钟为晶振输入或外部时钟直接提供,即MCLK=Fin;初始化完成后,切换,MCLK=Fout。初始值为0xfff4095个输入时钟周期。一般将其设为初始值。

PLLCON,,地址0x01D80000。设置MDIV,PDIV,SDIV三个值,用于确定FoutFin的频率分配比值:Fout = (m * Fin) / (p * 2s),其中

m = (MDIV + 8), p = (PDIV + 2), s = SDIV

典型的几个值如下:

No.

Fin

Fout

MDIV

PDIV

SDIV

1

10Mhz

40Mhz

0x48

0x3

0x2

2

10

50

0x2a

0x3

0x1

3

10

60

0x34

0x3

0x1

4

4

60

0x34

0x0

0x1

5

3

60

0x48

0x0

0x1

6

10

75

0x3a

0x3

0x1

 

CLKCON,地址0x01D80004。用于设置是否向外设提供时钟,一般设为默认值0x7ff8,即所有外设提供时钟。

 

存储器初始化(尤其是SDRAM):

ARM7TDMI的地址映射如下:

(在ARM体制中,所有的各种内、外存储器,外设,寄存器,cashewrite buffer,通用IO口等全都采用统一编址)

注:0x100000000x100047f0为内部cashe/sram 及其TagLRU的地址。

 

BANK0~BANK5为ROM/SRAM/FLASH,

BANK6~BANK7为SDRAM/ROM/SRAM/FLASH

要设置的寄存器如下:

BWSCON:BANK0~BANK7的UB/LB使能、Wait信号使能、数据线宽度;

BANKCON0~BANKCON5:各bank(flash或Sram)的访问时序控制。flash或Sram主要参数如下所示:

Tacs [14:13] Address set-up before nGCSn

Tcos [12:11] Chip selection set-up nOE

Tacc [10:8] Access cycle

Toch [7:6] Chip selection hold on nOE

Tcah [5:4] Address holding time after nGCSn

Tpac [3:2] Page mode access cycle @ Page mode

PMC [1:0] Page mode configuration

不同厂家、性能、速度的器件设置有所不同。

BANKCON6~BANKCON7:主要用于SDRAM,当然也可以是Flash或SRAM。SDRAM的时序控制稍微复杂,还有:

Trcd [3:2] RAS to CAS delay

    SCAN [1:0] Column address number

当然也可用于DRAM。

 

REFRESH 地址: 0x01C80024,DRAM/SDRAM的更新控制寄存器;

MRSRB6 ~MRSRB7:DRAM/SDRAM的模式控制寄存器,这个寄存器在系统初始时,即SDRAM使用前必须被有效地的设置。

    这几个寄存器的设置比较复杂,应仔细阅读Samsang(page168)的数据手册和相关存储器的资料。

一个典型的配置如下:

ldr r0, =SMRDATA

ldmia r0, {r1-r13}

ldr r0, =0x01c80000 ; BWSCON Address

stmia r0, {r1-r13}

SMRDATA DATA

DCD 0x11222220 ; BWSCON Bank0=OM[1:0],8bits宽 Bank1~Bank5=32bit,Bank6~Bank=16bit,不使用UB/LB信号,WAIT disable; 使用little Endian存储格式

DCD 0x000056A8; GCS0 :Tacs=2clk;Tcos=2clk;Tacc=10clk;

Toch=2clk;Tcah=2clk;Tpac=4clk;PMC=normal(1data)

DCD 0x00000700 ; GCS1 除了Access cycle为14个clk外,其它均为0clk

DCD 0x00000700 ; GCS2

DCD 0x00000700 ; GCS3

DCD 0x00000700 ; GCS4

DCD 0x00000700 ; GCS5

DCD 0x00018005 ; GCS6, SDRAM;RAS to CAS delay 2 clk;Column address number:9bits

DCD 0x0001002a ; GCS7, EDO DRAM(Trcd=3, Tcas=2, Tcp=1, CAN=10bit)

DCD 0x00870441 ; Refresh enable;Auto Refresh; Trp=3, Trc=5, Tchr=3;

刷新计数:1019

DCD 0x17 ; SCLK power down mode enable;Bank6&7 Size, 16MB/16MB

DCD 0x20 ; MRSR 6:CAS Latency=2clk;burst type为线性(不支持交织访问);

burst number:1bit(不支持促发读写)

DCD 0x20 ; MRSR 7(CL=2)

 

注:三星的实验板中在nGCS0外接Flash,型号为SST39VF160,其datasheet中有其读写时序的详细说明和各种时间值的最大或最小值,但均以ns为单位,且各时间值的名称也与寄存器的要求不完全相同。要使Flash达到最优设置,必须读懂其时序并按其推荐值设置寄存器。显然这并不是件容易的事情。在本次实验板的boot程序中,其各时序值均是最大值给出。参见memcfg.h文件。

三星的实验板中在nGCS6外接SDRAM,型号为IC42S16800-7T,(4096ROW*512COLUM*4Bank*16bits=128Mbits=16MB)

由上面的例子可以看出需要设置的参数为:1.Banksize,UB/LB,WAITenable/disable,large/little Endian;

2.RAS to CAS delay, Column address number;

3.Refresh enable/disable,Auto/self refresh, SDRAM RAS pre-charge Time, SDRAM RC minimum Time, Refresh Counter;

4.power down mode,banksize;

4.CAS Latency,burst type,burst number。

 

Refresh counter的设置Refresh period = (211-refresh_count+1)/MCLK

Ex) If refresh period is 16 us and MCLK is 60 MHz,

the refresh count is as follows;

refresh_count = 211 + 1 - 60x16 = 1089

 

上面的例子只是对FlashSDRAM的一个经验设置值,可能不是最优的。最优设置还必须参考器件的数据手册。尤其是对于SDRAMRAS to CAS delay、SDRAM RAS pre-charge Time、SDRAM RC minimum Time三个时序值。

 

特别注意:在线调试阶段,在AXD软件中必须引入对SDRAM初始化的seesion文件或ini文件,或者在command interface中敲入所需的配置命令(在load image之前完成),并且最后注释掉reset汇编程序中的初始化SDRAM的命令。否则程序就可能跑飞。而生成要下载的flash程序代码时,则系统reset时就必须完成此功能。

 

端口初始化

ARM的大部分信号在同一端口是功能复用的。为此初始化时必须指定各PA~PG口的各管脚的功能。在实验板根据外围器件的选择对各端口做如下配置:

PA(10bits):全部用作高端地址线;PCONA=0x3ff

PB(11bits):全部用作存储器控制信号;PCONB=0x7ff

PC(16bits):4~7用于LCD的VD4~VD7;12,13用于UART的TXD1,RXD1(注意:这里的UART没有使用CTS、RTS信号,只用了TX、RX);其它全部用于通用IO口,GPC0~3用于IIS;GPC10和14用于NAND Flash;GPC15用于USB Device;GPC8、9用于LCD;GPC11暂时没用。PCONC=0x5f55ff55.(这里假定IO口全为output,实际应用时再确认一下是In或是out)

PD(8bits):全部用于LCD的控制信号。PCOND=0xaaaa。

PE(9bits):8用于Endian,确定存储器格式;1,2分别为TXD0,RXD0;0,3~7用于通用IO口(暂定output),PE3用于蜂鸣器;PE4~7用于LED显示。PCONE=0x05569。

PF(9bits):0、1用于IIC总线的SCK、SDA信号;其它均为通用IO口(暂定output),其中GPF2~4用于IDE,GPF5~8用于触摸屏。PCONF=0x09255a。

PG(8bits):全部用于外部中断EXINT0~7。PCONG=0xffff。

注意:上述端口分配是S3C44b0x测试板(勤研电子)的分配情况。

 

另外还有下面几个寄存器需要设置:

上拉电阻寄存器,包括一些端口和数据线;

EXTIN:设置8个外中断的触发方式,low,high,rising or falling edge等。

EXTINTPND:中断待处理寄存器,用于解决EXTINT4~7共享一个中断源的问题。 

 

Cache&Bus设置

通过内部寄存器可以设置cashe mode(cashe和sram),write buffer,non-cashable area,以及bus的优先级等。

通常,在一般的用户程序中不使用cashe(即全部用作Sram),禁用write buffer,bus优先级选择默认就可以了,即1. DRAM refresh controller2. LCD_DMA3. ZDMA0,14. BDMA0,15. External bus master6. Write buffer7. Cache & CPU

只配置一下SYSCFG:0x0。 

 

阅读(1915) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~