資源簡介
包括全部時鐘程序的源碼,以及makefile文件,生成的可執(zhí)行文件。

代碼片段和文件信息
#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默認是開著的,要把它關(guān)掉?*/
void?disable_watch_dog()
{
WTCON =?0;
}
/**************************************************************************???
*?設(shè)置控制SDRAM的13個寄存器
*?含有數(shù)組的代碼,不是位置無關(guān)的,所以memsetup只能在連接位置執(zhí)行
*?如果要使用位置無關(guān)代碼,請使用memsetup_2
*
*?REFRESH寄存器[10:0]的計算公式為:R_CNT?=?2^11?+?1?-?HCLK(MHz)?*?7.8125
*?未使用PLL時,HCLK=12MHz,R_CNT=0x7a3
*?調(diào)用clock_init函數(shù)后,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前,復(fù)位一下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? *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
- 上一篇:rufus-2.18
- 下一篇:有源電力濾波器APF
評論
共有 條評論