⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 header.h

📁 linux驱动源码
💻 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 + -