📄 header.h
字号:
/********************************************************************
' 创建日期: 2006/04/18
' 文件名称: header.h
' 文件作者: GENE.SHAO (E-Mail: sjiang1981@163.com)
'
' 文件功能: 本文预定义了s3c2410内部寄存器的地址, 一部分寄存器的初始值,
内存起始地址, 内存大小等.
' 文件描述: 本文件中的宏定义参考了s3c2410处理器的使用手册. 如果你要使用
本文件,可能要针对你的硬件作一些修改,如内存起始地址,内存大小等.
该程序在Samsung的s3c2410处理器上测试通过,你可以重新发
布或修改该程序,如果对该程序有何疑问请通过Email联系作者。
*********************************************************************/
#ifndef HEADER
#define HEADER
/////////寄存器地址的定义////////////
#define BWSCON 0x48000000 //带宽和等待状态寄存器
#define INTMSK 0x4A000008 //中断屏蔽寄存器
#define INTSUBMSK 0x4A00001C //子中断屏蔽寄存器
#define LOCKTIME 0x4C000000 //锁时钟计数寄存器
#define CLKDIVN 0x4C000014 //时钟分割控制寄存器
#define MPLLCON 0x4C000004 //MPLL设置寄存器
#define WTCON 0x53000000 //Watchdog时钟控制寄存器
#define GPFCON 0x56000050 //F端口控制寄存器
#define GPFDAT 0x56000054 //F端口数据寄存器
#define GPFUP 0x56000058 //Pull-up启用/禁用寄存器
#define MISCCR 0x56000080 //Miscellaneous 控制寄存器
/////////////寄存器的定义/////////////////////
#define rNFCONF (*(volatile unsigned *)0x4e000000) //NAND Flash 设置寄存器
#define rNFCMD (*(volatile unsigned char *)0x4e000004) //NADD Flash 命令寄存器
#define rNFADDR (*(volatile unsigned char *)0x4e000008) //NAND Flash 地址寄存器
#define rNFDATA (*(volatile unsigned char *)0x4e00000c) //NAND Flash 数据寄存器
#define rNFSTAT (*(volatile unsigned *)0x4e000010) //NAND Flash 状态寄存器
#define rNFECC (*(volatile unsigned *)0x4e000014) //NAND Flash ECC(Error Correction Code)寄存器
///// I/O PORT
//PORT A
#define rGPACON (*(volatile unsigned *)0x56000000)
#define rGPADAT (*(volatile unsigned *)0x56000004)
//PORT B
#define rGPBCON (*(volatile unsigned *)0x56000010)
#define rGPBDAT (*(volatile unsigned *)0x56000014)
#define rGPBUP (*(volatile unsigned *)0x56000018)
//PORT C
#define rGPCCON (*(volatile unsigned *)0x56000020)
#define rGPCDAT (*(volatile unsigned *)0x56000024)
#define rGPCUP (*(volatile unsigned *)0x56000028)
//PORT D
#define rGPDCON (*(volatile unsigned *)0x56000030)
#define rGPDDAT (*(volatile unsigned *)0x56000034)
#define rGPDUP (*(volatile unsigned *)0x56000038)
//PORT E
#define rGPECON (*(volatile unsigned *)0x56000040)
#define rGPEDAT (*(volatile unsigned *)0x56000044)
#define rGPEUP (*(volatile unsigned *)0x56000048)
//PORT F
#define rGPFCON (*(volatile unsigned *)0x56000050)
#define rGPFDAT (*(volatile unsigned *)0x56000054)
#define rGPFUP (*(volatile unsigned *)0x56000058)
//PORT G
#define rGPGCON (*(volatile unsigned *)0x56000060)
#define rGPGDAT (*(volatile unsigned *)0x56000064)
#define rGPGUP (*(volatile unsigned *)0x56000068)
//PORT H
#define rGPHCON (*(volatile unsigned *)0x56000070)
#define rGPHDAT (*(volatile unsigned *)0x56000074)
#define rGPHUP (*(volatile unsigned *)0x56000078)
//外部中断控制寄存器
#define rEXTINT0 (*(volatile unsigned *)0x56000088)
#define rEXTINT1 (*(volatile unsigned *)0x5600008c)
#define rEXTINT2 (*(volatile unsigned *)0x56000090)
//UART, S3C2410提供3个独立的UART
#define rUFCON0 (*(volatile unsigned *)0x50000008) //UART 0 FIFO控制寄存器
#define rUMCON0 (*(volatile unsigned *)0x5000000c) //UART 0 模式控制寄存器
#define rULCON0 (*(volatile unsigned *)0x50000000) //UART 0 线控制寄存器
#define rUCON0 (*(volatile unsigned *)0x50000004) //UART 0 通道控制寄存器
#define rUBRDIV0 (*(volatile unsigned *)0x50000028) //UART 0 波特率切分寄存器
#define rUTRSTAT0 (*(volatile unsigned *)0x50000010) //UART 0 Tx/Rx状态寄存器
#define rUTXH0 (*(volatile unsigned char *)0x50000020) //UART 0 发送缓冲寄存器
//////////////////////寄存器的初始值//////////////
/*
MPLL设置寄存器:
按照s3c2410使用手册的推荐, 将M_MDIV设为0xa1, M_PDIV设为3, M_SDIV设为1,
即输入频率12Mhz, 输出频率202.8Mhz,内核不能正常运行. 这里参考了Vivi loader,
将输入M_MDIV设为0xa1, M_PDIV设为3, M_SDIV设为1, 此时输入频率为12MHz,
输出频率为200MHz.
Mpll = (m * Fin) / (p * 2^s)
m = (MDIV + 8), p = (PDIV + 2), s = SDIV
其中Mpll为输出频率, Fin为输入频率, Fin等于12MHz.
*/
#define M_MDIV 0x5c
#define M_PDIV 0x4
#define M_SDIV 0x0
/*时钟分割控制寄存器*/
#define FCLK 200000000
#define HCLK FCLK/2
#define PCLK HCLK/2
/*Miscellaneous 控制寄存器*/
#define SCK_NORMAL (0x7<<17)
/////////////////////其他定义///////////////////
#define NF_CMD(cmd) {rNFCMD=cmd;}
#define NF_ADDR(addr) {rNFADDR=addr;}
#define NF_nFCE_L() {rNFCONF&=~(1<<11);}
#define NF_nFCE_H() {rNFCONF|=(1<<11);}
#define NF_RSTECC() {rNFCONF|=(1<<12);}
#define NF_RDDATA() (rNFDATA)
#define NF_WRDATA(data) {rNFDATA=data;}
#define NF_WAITRB() {while(!(rNFSTAT&(1<<0)));}
#define ID_K9S1208V0M (0xec76) //NAND FLASH 的ID
#define NAND_SECTOR_SIZE (512) //每个块512个字节
#define NAND_BLOCK_MASK (NAND_SECTOR_SIZE - 1) //用于测试要访问的地址是否是按扇区对其的
#define DRAM_SIZE (0x04000000) //64M
#define BUSY (1)
#define WrUTXH0(ch) rUTXH0=(unsigned char)(ch)
#define STACK_SIZE 0x00000400 //堆栈大小
#define STACK_BASE 0x32000000 //堆栈基地址
#define LINUX_PAGE_SIZE 0x00001000 //page size = 4K
#define LINUX_PAGE_SHIFT 12 //页边界的对齐地址
#define DOWNLOAD_ADDRESS 0x30000000 //内存的起始地址, DRAM是连到BANK6的
//linux内核起始地址相对于内存起始地址的偏移量, linux内核起始地址定义在在内核的链接
//文件../arch/arm/boot/compressed/vmlinux.lds,请确保这里的值和内核中设置的一致.
#define MEM_OFFSET 0x00008000
//linux启动参数的首地址相对于内存起始地址的偏移量, 在linux内核中通过BOOT_PARAMS宏定
//义来设置参数地址,请确保这里的值和内核中设置的一致
#define LINUX_PARAM_OFFSET 0x100
#define NULL 0
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -