资源简介

包括全部时钟程序的源码,以及makefile文件,生成的可执行文件。

资源截图

代码片段和文件信息

#include “s3c2410.h“
#include “init.h“
#include “mmu.h“

/* SDRAM 13个寄存器的值 */ 
unsigned long  const mem_cfg_val[]={ 0x22111110 //BWSCON
0x00000700 //BANKCON0
0x00000700 //BANKCON1
0x00000700 //BANKCON2
0x00000700 //BANKCON3
0x00000700 //BANKCON4
0x00000700 //BANKCON5
0x00018005 //BANKCON6
0x00018005 //BANKCON7
0x008e04f4 //REFRESHHCLK=12MHz:0x008e07a3HCLK=100MHz:0x008e04f4
0x000000b2 //BANKSIZE
0x00000030 //MRSRB6
0x00000030 //MRSRB7
};


/*上电后,WATCH DOG默认是开着的,要把它关掉 */
void disable_watch_dog()
{
WTCON = 0;
}

/**************************************************************************   
* 设置控制SDRAM的13个寄存器
* 含有数组的代码,不是位置无关的,所以memsetup只能在连接位置执行
* 如果要使用位置无关代码,请使用memsetup_2
*
* REFRESH寄存器[10:0]的计算公式为:R_CNT = 2^11 + 1 - HCLK(MHz) * 7.8125
* 未使用PLL时,HCLK=12MHz,R_CNT=0x7a3
* 调用clock_init函数后,HCLK=100MHz,R_CNT=0x4f4
**************************************************************************/   
void memsetup()
{
int  i = 0;
unsigned long *p = (unsigned long *)MEM_CTL_base;
for(; i < 13; i++)
p[i] = mem_cfg_val[i];
}


void memsetup_2()
{
unsigned long *p = (unsigned long *)MEM_CTL_base;
p[0] = 0x22111110; //BWSCON
p[1] = 0x00000700; //BANKCON0
p[2] = 0x00000700; //BANKCON1
p[3] = 0x00000700; //BANKCON2
p[4] = 0x00000700; //BANKCON3
p[5] = 0x00000700; //BANKCON4
p[6] = 0x00000700; //BANKCON5
p[7] = 0x00018005; //BANKCON6
p[8] = 0x00018005; //BANKCON7
p[9] = 0x008e04f4; //REFRESHHCLK=12MHz:0x008e07a3HCLK=100MHz:0x008e04f4
p[10] = 0x000000b2; //BANKSIZE
p[11] = 0x00000030; //MRSRB6
p[12] = 0x00000030; //MRSRB7
}


/* 在第一次实用NAND Flash前,复位一下NAND Flash */
void reset_nand()
{
int i=0;
NFCONF &= ~0x800;
for(; i<10; i++);
NFCMD = 0xff; //reset command
wait_idle();
}

/* 初始化NAND Flash */
void init_nand()
{
NFCONF = 0xf830;
reset_nand();
}


/*************************************************************************
* 以下读NAND Flash的代码来自mizi公司的bootloader vivi
*************************************************************************/
#define BUSY 1
inline void wait_idle(void) {
int i;

while(!(NFSTAT & BUSY))
for(i=0; i<10; i++);
}

#define NAND_SECTOR_SIZE 512
#define NAND_BLOCK_MASK (NAND_SECTOR_SIZE - 1)

/* low level nand read function */
void nand_read_ll(unsigned char *buf unsigned long start_addr int size)
{
int i j;

if ((start_addr & NAND_BLOCK_MASK) || (size & NAND_BLOCK_MASK)) {
return ; /* invalid alignment */
}

/* chip Enable */
NFCONF &= ~0x800;
for(i=0; i<10; i++);

for(i=start_addr; i < (start_addr + size);) {
/* READ0 */
NFCMD = 0;

/* Write Address */
NFADDR = i & 0xff;
NFADDR = (i >> 9) & 0xff;
NFADDR = (i >> 17) & 0xff;
NFADDR = (i >> 25) & 0xff;

wait_idle();

for(j=0; j < NAND_SECTOR_SIZE; j++ i++) {
*buf = (NFDATA & 0xff);
buf++;
}
}

/* chip Disable */
NFCONF |= 0x800; /* chip disable */

return ;
}


/***************************************************************************

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       3004  2005-11-15 12:41  CLOCK\clock

     文件         75  2005-06-11 07:39  CLOCK\clock.lds

     文件       2312  2005-06-15 18:18  CLOCK\head.s

     文件       4967  2005-06-15 18:18  CLOCK\init.c

     文件        301  2005-06-11 07:51  CLOCK\init.h

     文件        558  2005-06-11 07:39  CLOCK\interrupt.c

     文件         20  2005-06-11 07:39  CLOCK\interrupt.h

     文件        619  2005-06-11 14:12  CLOCK\main.c

     文件        609  2005-06-11 09:48  CLOCK\Makefile

     文件       3923  2005-06-11 07:39  CLOCK\mmu.c

     文件        311  2005-06-11 14:04  CLOCK\mmu.h

     文件       2778  2005-06-11 15:43  CLOCK\s3c2410.h

     文件        670  2005-06-11 08:55  CLOCK\serial.c

     文件         84  2005-06-11 07:39  CLOCK\serial.h

     文件      27185  2005-11-15 12:41  CLOCK\ttt.s

     目录          0  2005-11-15 20:45  CLOCK

----------- ---------  ---------- -----  ----

                47416                    16


评论

共有 条评论