ARM-Tiny6410-裸机开发-Led && Button && Timer

来源:互联网 发布:剑网三魔君捏脸数据 编辑:程序博客网 时间:2024/05/17 09:23

0.Notice


  theme:ARM-Tiny6410-裸机开发-Led && Button && Timer

  author:Jeff.Xue

  contact information:contactmexkj@163.com


1.Overview


  本文针对tiny6410裸机程序中的Led、Button、Timer、Interrupt 等控制程序进行分析,部分代码由国嵌相关代码修改得到。

  (PS:需安装好jlink和rvds2.2,对于代码中所有include到的文件可以在Reference中找到)


2.Led


(1)Tiny6410核心板的LED1、LED2、LED3、LED4分别连接到了GPK4、GPK5、GPK6、GPK7。电路图如下:

(2)led.h 
  • 使用 #ifndef __LED__ 来避免重复的包含文件(每个头文件都建议加上)
  • module_cfg.h 里进行了模块名的定义 #define LED 
  • 使用#ifdef LED判断是否已经定义模块,已经定义则使宏定义和函数声明有效(配合module_cfg.h可以方便的关闭对应的模块,减少不必要的编译)

#ifndef __LED__#define __LED__#include "module_cfg.h"#ifdef LED/**************Macro Definition**********/#define LED1_ON   ~(1<<4)#define LED2_ON   ~(1<<5)#define LED3_ON   ~(1<<6)#define LED4_ON   ~(1<<7)#define LED1_OFF   (1<<4)#define LED2_OFF   (1<<5)#define LED3_OFF   (1<<6)#define LED4_OFF   (1<<7)#define LEDALL_OFF (0xf<<4)/**************Declare Function**********/void LedDelay(int times);void LedPortInit(void);void LedRun(void);#endif#endif

(3)led.c
  • LedDelay 只为简单的延时函数,需要准确的计时可查看Timer章节
  • LedPortInit 为初始化对应的GPIO为输出模式(翻查s3c6410芯片手册的GPK寄存器可知)
  • LedRun 为流水灯程序,根据LED电路图可知:IO输出为低电平时,LED点亮;IO输出为高电平时,LED熄灭
#include "module_cfg.h"#ifdef LED#include "def.h"#include "led.h"#include "gpio.h"/************************************************************************* * ***************************延时函数************************************ * ***********************************************************************/void LedDelay(int times){    int i;    for(;times>0;times--)      for(i=0;i<3000;i++);}/************************************************************************* **********************初始化连接LED灯的管脚资源************************** * @ 通过将GPIO_BASE强制转化为(volatile oGPIO_REGS*)型的指针可以很方便 * 的访问各个GPIO寄存器的值,这种方法比通过使用寄存器地址的宏定义访问 * 寄存器单元更加规范和科学。 * ***********************************************************************/  void LedPortInit(void){u32 uConValue;uConValue = GPIO->rGPIOKCON0;uConValue &= ~(0xffff<<16);uConValue |= 0x1111<<16;GPIO->rGPIOKCON0 = uConValue;GPIO->rGPIOKDAT|=LEDALL_OFF;}/************************************************************************* * ************************跑马灯的实现函数******************************* * @ 通过控制连接LED的管脚的输出电平点亮和熄灭各个LED。 * @ 逐个循环点亮各个LED。在每点亮一个后保持一定时间再熄灭它,接着 * 点亮下一个LED,这样就形成了一个跑马灯的效果。 * @ 这是一个需要改善的跑马灯程序,想想怎么优化这段代码。 * ***********************************************************************/void LedRun(void){    GPIO->rGPIOKDAT |= LEDALL_OFF;    while(1){GPIO->rGPIOKDAT &= LED1_ON;LedDelay(1000);GPIO->rGPIOKDAT |= LEDALL_OFF;GPIO->rGPIOKDAT &= LED2_ON;LedDelay(1000);GPIO->rGPIOKDAT |= LEDALL_OFF;GPIO->rGPIOKDAT &= LED3_ON;LedDelay(1000);GPIO->rGPIOKDAT |= LEDALL_OFF;GPIO->rGPIOKDAT &= LED4_ON;LedDelay(1000);GPIO->rGPIOKDAT |= LEDALL_OFF;    }}#endif


3.Button


(1)Tiny6410底板按键button1~8 分别连接到GPN0~5、GPL11、GPL12,电路图如下:



(2)使用轮循方式实现按键识别
  • 设置GPN0~3 为输入
  • 轮循GPNDAT判断按键是否按下
  • GPN0~3 对应LED1~4,按键按下时,对应的LED会被点亮
  led_io.h
#ifndef __KEY_IO__#define __KEY_IO__#include "module_cfg.h"#ifdef KEY_IO/**************Macro Definition**********/#define LED1_ON   ~(1<<4)#define LED2_ON   ~(1<<5)#define LED3_ON   ~(1<<6)#define LED4_ON   ~(1<<7)#define LEDALL_OFF (0xf<<4)/**************Declare Function**********/void KeyIoPortInit(void);unsigned int CheckKeyStat(void);void KeyIoTest(void);#endif#endif

  led_io.c
#include "module_cfg.h"#ifdef KEY_IO#include "def.h"#include "key_io.h"#include "gpio.h"/************************************************************************* * ***************************按键IO初始化******************************** * ***********************************************************************/void KeyIoPortInit(void){GPIO->rGPIONCON&=0xffffff00;}/************************************************************************* * ***************************检测按键状态******************************** * ***********************************************************************/unsigned int CheckKeyStat(void) { if((GPIO->rGPIONDAT&0x1)==0)return 1; else if((GPIO->rGPIONDAT&0x2)==0)return 2; else if((GPIO->rGPIONDAT&0x4)==0)return 3; else if((GPIO->rGPIONDAT&0x8)==0)return 4; return 0; }  /************************************************************************* * ***************************按键测试程序********************************* * ***********************************************************************/ void KeyIoTest(void) { unsigned int j; while(1){j=0;j=CheckKeyStat();switch(j){case 1:GPIO->rGPIOKDAT |= LEDALL_OFF;GPIO->rGPIOKDAT &= LED1_ON;break;case 2:GPIO->rGPIOKDAT |= LEDALL_OFF;GPIO->rGPIOKDAT &= LED2_ON;break;case 3:GPIO->rGPIOKDAT |= LEDALL_OFF;GPIO->rGPIOKDAT &= LED3_ON;break;case 4:GPIO->rGPIOKDAT |= LEDALL_OFF;GPIO->rGPIOKDAT &= LED4_ON;break;default :break;}} }#endif

(3)使用中断方式识别按键

  • The interrupt controller in the S3C6410X is composed of  2 VIC’s (Vectored Interrupt Controller, ARM PrimeCell PL192) and 2 TZIC’s (TrustZone Interrupt Controller, SP890). 
  • Two TZIC’s and VIC’s are daisy-chained to support up to 64 interrupt sources.   (可以查看s3c6410芯片手册看到对应的64个中断源)
  
  • GPN0~3对应中断源为INT_EINT0,该中断源对应了三个中断信号(External interrupt 0 ~ 3 )
  • 程序入口需要Enable VIC、Enable IRQ、Disable All INT(可查看Reference里面的main.c)
主要配置流程如下
  • 设置GPN0~3为外部中断模式(GPNCON),禁止上拉下拉电阻(GPNPUD),配置中断方式为GPN0、1为低电平触发,GPN2、3为上升沿触发(EINT0CON0)
  • 清除对应的中断悬起位(EINT0PEND)
  • 配置中断服务地址程序(VIC0VECTADDR)
  • 使能中断源(VIC0INTENABLE)
  • 清除中断屏蔽位(EINT0MASK)
具体代码如下:

key_int.h

#ifndef __KEY_INT__#define __KEY_INT__#include "module_cfg.h"#ifdef KEY_INT/**************Macro Definition**********/#define LED1_ON   ~(1<<4)#define LED2_ON   ~(1<<5)#define LED3_ON   ~(1<<6)#define LED4_ON   ~(1<<7)#define LEDALL_OFF (0xf<<4)/**************Declare Function**********/void KeyIntPortInit(void);void __irq Key_Eint(void);void KeyEintInit(void);void EINT0ClrPend(u32 uEINT_No);void EINT0DisMask(u32 uEINT_No);#endif#endif


key_int.c

#include "module_cfg.h"#ifdef KEY_INT#include "def.h"#include "key_int.h"#include "gpio.h"#include "library.h"/************************************************************************* ****************************按键IO初始化********************************* *************************************************************************/void KeyIntPortInit(void){u32 i;//设置IO口为外部中断模式i=GPIO->rGPIONCON;i&=0xffffff00;i|=0x000000AA;GPIO->rGPIONCON=i;//禁止上拉下拉电阻GPIO->rGPIONPUD&=0Xfff0;//设置对应EINT的中断类型,EINT0/1为low level,EINT2/3为rising edge tiggered i=GPIO->rEINT0CON0;i&=0xffffff00;i|=0x00000040;GPIO->rEINT0CON0=i;}/************************************************************************* ***************************清除中断悬起位******************************** *************************************************************************/void EINT0ClrPend(u32 uEINT_No){GPIO->rEINT0PEND|=0x1<<uEINT_No;//each bit is cleared by writing 1}/************************************************************************* ***************************清除中断屏蔽位******************************** *************************************************************************/void EINT0DisMask(u32 uEINT_No){GPIO->rEINT0MASK&=~(0x1<<uEINT_No);//write 0 to enable interrupt}/************************************************************************* **************************按键中断处理函数******************************* *************************************************************************/void __irq Key_Eint(void){u32 i;//判断根据不同的按键引起的中断进行不同的处理,先清除对应中断悬起位,再点亮对应的LEDi=GPIO->rEINT0PEND;if((i&0x1)!=0){EINT0ClrPend(0);GPIO->rGPIOKDAT |= LEDALL_OFF;GPIO->rGPIOKDAT &= LED1_ON;}else if((i&0x2)!=0){EINT0ClrPend(1);GPIO->rGPIOKDAT |= LEDALL_OFF;GPIO->rGPIOKDAT &= LED2_ON;}else if((i&0x4)!=0){EINT0ClrPend(2);GPIO->rGPIOKDAT |= LEDALL_OFF;GPIO->rGPIOKDAT &= LED3_ON;}else if((i&0x8)!=0){EINT0ClrPend(3);GPIO->rGPIOKDAT |= LEDALL_OFF;GPIO->rGPIOKDAT &= LED4_ON;}//清除rVIC0ADDR,该寄存器记录当前中断服务地址程序Outp32(rVIC0ADDR,0);}/************************************************************************* ****************************EINT初始化函数******************************* *************************************************************************/void KeyEintInit(void){u32 i;KeyIntPortInit();EINT0ClrPend(0);EINT0ClrPend(1);EINT0ClrPend(2);EINT0ClrPend(3);//向 rVIC0VECTADDR 中写入对应的中断服务程序地址Outp32(rVIC0VECTADDR,(unsigned)Key_Eint);//使能中断源i=Inp32(rVIC0INTENABLE);i|=0x0000001;Outp32(rVIC0INTENABLE,i);EINT0DisMask(0);EINT0DisMask(1);EINT0DisMask(2);EINT0DisMask(3);}#endif


4.Timer


(1)s3c6410定时器概述
  
  The S3C6410X RISC microprocessor comprises of five 32-bit timers. These timers are used to generate internal interrupts to the ARM subsystem. In addition, Timers  0 and 1 include a PWM function (Pulse Width Modulation), which can drive an external I/O signal. The PWM for timer 0 and 1 have an optional dead-zone generator capability, which can be utilized to support a large current device. Timer 2, 3 and 4 are internal timers with no output pins. 
  
  
  一般的配置流程如下:
  • 程序入口需要Enable VIC、Enable IRQ、Disable All INT(可查看Reference里面的main.c)
  • 停止所有的定时器(TCON)
  • 配置定时器:获取g_PCLK,设置Prescaler(TCFG0),设置MUX(TCFG1),设置TCNTBn。(主要配置了定时器产生中断间隔,如果需要输出PWM,需要配置TCMPBn,同时使能PWM输出)
  • 清除中断悬起位(TINT_CSTAT)
  • 配置中断服务程序地址(VIC0VECTADDR+NUM_TIMERn*4)
  • 使能对应中断源(VIC0INTENABLE)
  • 清除中断屏蔽位(TINT_CSTAT)
  • 启动定时器(TCON)
(2)timer.h

#ifndef __KEY_IO__#define __KEY_IO__#include "module_cfg.h"#ifdef TIMER#include "sfr6410.h"/**************Macro Definition**********/#define LED1_ON   ~(1<<4)#define LED2_ON   ~(1<<5)#define LED3_ON   ~(1<<6)#define LED4_ON   ~(1<<7)#define LED1_OFF   (1<<4)#define LED2_OFF   (1<<5)#define LED3_OFF   (1<<6)#define LED4_OFF   (1<<7)#define LEDALL_OFF (0xf<<4)/**************Declare Function**********/void __irq Timer_Eint(void);void TimerStart(u32 uTimer_No);void TimerClkInit(u32 uTimer_No,u32 ms);void TimerInit(void);void TimerClrPend(u32 uTimer_No);void TimerDisMask(u32 uTimer_No);/**************Enum TIMER ADDER**********/#definerTCFG0(PWMTIMER_BASE+0x00)#definerTCFG1(PWMTIMER_BASE+0x04)#definerTCON(PWMTIMER_BASE+0x08)#definerTCNTB0(PWMTIMER_BASE+0x0C)#definerTCMPB0(PWMTIMER_BASE+0x10)#definerTCNTO0(PWMTIMER_BASE+0x14)#definerTCNTB1(PWMTIMER_BASE+0x18)#definerTCMPB1(PWMTIMER_BASE+0x1C)#definerTCNTO1(PWMTIMER_BASE+0x20)#definerTCNTB2(PWMTIMER_BASE+0x24)#definerTCMPB2(PWMTIMER_BASE+0x28)#definerTCNTO2(PWMTIMER_BASE+0x2C)#definerTCNTB3(PWMTIMER_BASE+0x30)#definerTCMPB3(PWMTIMER_BASE+0x34)#definerTCNTO3(PWMTIMER_BASE+0x38)#definerTCNTB4(PWMTIMER_BASE+0x3C)#definerTCNTO4(PWMTIMER_BASE+0x40)#definerTINT_CSTAT(PWMTIMER_BASE+0x44)#endif#endif



(3)timer.c

#include "module_cfg.h"#ifdef TIMER#include "def.h"#include "timer.h"#include "gpio.h"#include "library.h"#include "sysc.h"/************************************************************************* **************************TIMER中断处理函数****************************** *************************************************************************/static u32 Timer0Counter=1;static u32 Timer1Counter=1;void __irq Timer_Eint(void){u32 i;i = Inp32(rTINT_CSTAT);  if (i&(1<<5))  //Timer0中断{TimerClrPend(0);if(Timer0Counter==1){GPIO->rGPIOKDAT&=LED1_ON;Timer0Counter=2;}else if(Timer0Counter==2){GPIO->rGPIOKDAT|=LED1_OFF;Timer0Counter=1;}}else if (i&(1<<6)) //Timer1中断{TimerClrPend(1);if(Timer1Counter==1){GPIO->rGPIOKDAT&=LED2_ON;Timer1Counter=2;}else if(Timer1Counter==2){GPIO->rGPIOKDAT|=LED2_OFF;Timer1Counter=1;}}//清除rVIC0ADDR,该寄存器按位记录哪个VIC0中断源曾发生了中断Outp32(rVIC0ADDR, 0);}/************************************************************************* ***************************清除中断悬起位******************************** *************************************************************************/void TimerClrPend(u32 uTimer_No){ u32 i;i = Inp32(rTINT_CSTAT);i |= (0x1<<(5+uTimer_No));Outp32(rTINT_CSTAT,i);      }/************************************************************************* ***************************清除中断屏蔽位******************************** *************************************************************************/void TimerDisMask(u32 uTimer_No){ u32 i;i = Inp32(rTINT_CSTAT);i |= (0x1<<uTimer_No);//write 1 to enable interruptOutp32(rTINT_CSTAT,i);      }/************************************************************************* ******************************TIMER启动******************************** *************************************************************************/void TimerStart(u32 uTimer_No){ u32 i;//设置Timer控制寄存器为 自动装载、手动更新(第一次装载时需要)//然后开启定时器(同时清手动更新位) i = Inp32(rTCON);if (uTimer_No==0){i = (i & ~0x1f) | 0xa;//0b01010Outp32(rTCON,i);i = (i & ~0x1f) | 0x9;//ob01001Outp32(rTCON,i); }else if(uTimer_No!=4){uTimer_No++;i = (i & ~(0xf<<(uTimer_No*4))) | (0xa<<(uTimer_No*4));Outp32(rTCON,i); i = (i & ~(0xf<<(uTimer_No*4))) | (0x9<<(uTimer_No*4));Outp32(rTCON,i);}else if(uTimer_No==4){uTimer_No++;i = (i & ~(0xf<<(uTimer_No*4))) | (0x6<<(uTimer_No*4));Outp32(rTCON,i); i = (i & ~(0xf<<(uTimer_No*4))) | (0x5<<(uTimer_No*4));Outp32(rTCON,i);}}/************************************************************************* ****************************配置TIMER时钟******************************** *************************************************************************/ void TimerClkInit(u32 uTimer_No,u32 ms) {  u32 i;    //用这个函数主要是获得g_PCLK的值  SYSC_GetClkInform();   //设置Prescaler为128 i = Inp32(rTCFG0); if (uTimer_No<2)i = (i & 0xffffff00 )| 0x0000007f; else i = (i & 0xffff00ff )| 0x00007f00;Outp32(rTCFG0,i);//设置MUX为16,总共2048分频 i = Inp32(rTCFG1);i = (i & ~(0xf<<(uTimer_No*4))) | (0x4<<(uTimer_No*4));Outp32(rTCFG1,i); //设置rTCNTBn,(g_PCLK>>11)/1000 算得的值是2048分频时1ms的计数值Outp32(rTCNTB0+0xc*uTimer_No, ((g_PCLK>>11)/1000)*ms); }/************************************************************************* ******************************TIMER初始化******************************** *************************************************************************/ void TimerInit(void) { u32 i;//停止所有TimerOutp32(rTCON, 0);//配置定时器时钟TimerClkInit(0, 500);TimerClkInit(1, 1000);//清除中断悬起位TimerClrPend(0);TimerClrPend(1);//向rVIC0VECTADDR中写入对应中断服务程序的地址Outp32(rVIC0VECTADDR+NUM_TIMER0*4, (unsigned)Timer_Eint);Outp32(rVIC0VECTADDR+NUM_TIMER1*4, (unsigned)Timer_Eint);//使能对应中断源:i = Inp32(rVIC0INTENABLE);i |= (1<<NUM_TIMER0)|(1<<NUM_TIMER1);Outp32(rVIC0INTENABLE, i);//接触屏蔽TimerDisMask(0);TimerDisMask(1);//开启定时器TimerStart(0);TimerStart(1); }  #endif



5.Reference

该章节包含如下文件(描述可能比较模糊,大部分在s3c6410官方裸机测试代码里均可找到):
  • main.c -- 程序入口
  • inc.h -- 包含的头文件
  • module_cfg.h -- 模块配置
  • def.h  -- 类型定义
  • gpio.h -- gpio地址
  • library.h -- 地址操作宏定义
  • intc.h -- 中断寄存器地址 
  • intc.c -- 屏蔽所有中断操作函数
  • sfr6410.h -- SFR地址
  • sysc.h -- 系统控制函数头文件
  • sysc.c -- 系统控制函数
  • system.h
  • option.h 
(0)main.c
#include "inc.h"int main(void){SYSTEM_EnableVIC();SYSTEM_EnableIRQ();INTC_Init();LedPortInit();#if 0LedRun();#endif#if 0KeyIoPortInit();KeyIoTest();#endif#if 0KeyIntPortInit();KeyEintInit();while(1);#endif#if 1TimerInit();while(1);#endif}

(1)inc.h

#ifndef __INC__#define __INC__/****************Including File*****************/#include "module_cfg.h"#include "system.h"#ifdef LED#include "led.h"#endif#ifdef KEY_IO#include "key_io.h"#endif#ifdef KEY_INT#include "key_int.h"#endif#ifdef TIMER#include "timer.h"#endif#endif

(2)module_cfg.h

#ifndef __MODULE_CFG__#define __MOUDLE_CFG__/****************Module Config*******************if you open the define then the module is useful and including .h file *************************************************/#define LED#define KEY_IO#define KEY_INT#define TIMER#endif

(3)def.h

/***************************************************************************************File Description : This file defines some types used commonly. **************************************************************************************/#ifndef __DEF_H__#define __DEF_H__// Type defines typedef unsigned longu32;typedef unsigned shortu16;typedef unsigned charu8;typedef signed longs32;typedef signed shorts16;typedef signed chars8;#define FALSE(0)#define TRUE(1)#define false(0)#define true(1)#endif

(4)gpio.h

/***************************************************************************************File Description : This file declares prototypes of GPIO API funcions.**************************************************************************************/#ifndef __GPIO_H__#define __GPIO_H__#include "def.h"typedef struct tag_GPIO_REGS{u32 rGPIOACON;//0x7F008000u32 rGPIOADAT;u32 rGPIOAPUD;u32 rGPIOACONSLP;u32 rGPIOAPUDSLP;u32 reserved1[3];u32 rGPIOBCON;//0x7F008020u32 rGPIOBDAT;u32 rGPIOBPUD;u32 rGPIOBCONSLP;u32 rGPIOBPUDSLP;u32 reserved2[3];u32 rGPIOCCON;//0x7F008040u32 rGPIOCDAT;u32 rGPIOCPUD;u32 rGPIOCCONSLP;u32 rGPIOCPUDSLP;u32 reserved3[3];u32 rGPIODCON;//0x7F008060u32 rGPIODDAT;u32 rGPIODPUD;u32 rGPIODCONSLP;u32 rGPIODPUDSLP;u32 reserved4[3];u32 rGPIOECON;//0x7F008080u32 rGPIOEDAT;u32 rGPIOEPUD;u32 rGPIOECONSLP;u32 rGPIOEPUDSLP;u32 reserved5[3];u32 rGPIOFCON;//0x7F0080A0u32 rGPIOFDAT;u32 rGPIOFPUD;u32 rGPIOFCONSLP;u32 rGPIOFPUDSLP;u32 reserved6[3];u32 rGPIOGCON;//0x7F0080C0u32 rGPIOGDAT;u32 rGPIOGPUD;u32 rGPIOGCONSLP;u32 rGPIOGPUDSLP;u32 reserved7[3];u32 rGPIOHCON0;//0x7F0080E0u32 rGPIOHCON1;u32 rGPIOHDAT;u32 rGPIOHPUD;u32 rGPIOHCONSLP;u32 rGPIOHPUDSLP;u32 reserved8[2];u32 rGPIOICON;//0x7F008100u32 rGPIOIDAT;u32 rGPIOIPUD;u32 rGPIOICONSLP;u32 rGPIOIPUDSLP;u32 reserved9[3];u32 rGPIOJCON;//0x7F008120u32 rGPIOJDAT;u32 rGPIOJPUD;u32 rGPIOJCONSLP;u32 rGPIOJPUDSLP;u32 reserved10[3];u32 rGPIOOCON;//0x7F008140u32 rGPIOODAT;u32 rGPIOOPUD;u32 rGPIOOCONSLP;u32 rGPIOOPUDSLP;u32 reserved11[3];u32 rGPIOPCON;//0x7F008160u32 rGPIOPDAT;u32 rGPIOPPUD;u32 rGPIOPCONSLP;u32 rGPIOPPUDSLP;u32 reserved12[3];u32 rGPIOQCON;//0x7F008180u32 rGPIOQDAT;u32 rGPIOQPUD;u32 rGPIOQCONSLP;u32 rGPIOQPUDSLP;u32 reserved13[3];u32 rSPCON;//0x7F0081A0u32 reserved14[3];u32 rMEM0CONSTOP;//0x7F0081B0u32 rMEM1CONSTOP;//0x7F0081B4u32 reserved15[2];u32 rMEM0CONSLP0;//0x7F0081C0u32 rMEM0CONSLP1;//0x7F0081C4u32 rMEM1CONSLP;//0x7F0081C8u32 reserved;u32 rMEM0DRVCON;//0x7F0081D0u32 rMEM1DRVCON;//0x7F0081D4u32 reserved16[10];u32 rEINT12CON;//0x7f008200u32 rEINT34CON;//0x7f008204u32 rEINT56CON;//0x7f008208u32 rEINT78CON;//0x7f00820Cu32 rEINT9CON;//0x7f008210u32 reserved17[3];u32 rEINT12FLTCON;//0x7f008220u32 rEINT34FLTCON;//0x7f008224u32 rEINT56FLTCON;//0x7f008228u32 rEINT78FLTCON;//0x7f00822Cu32 rEINT9FLTCON;//0x7f008230u32 reserved18[3];u32 rEINT12MASK;//0x7f008240u32 rEINT34MASK;//0x7f008244u32 rEINT56MASK;//0x7f008248u32 rEINT78MASK;//0x7f00824Cu32 rEINT9MASK;//0x7f008250u32 reserved19[3];u32 rEINT12PEND;//0x7f008260u32 rEINT34PEND;//0x7f008264u32 rEINT56PEND;//0x7f008268u32 rEINT78PEND;//0x7f00826Cu32 rEINT9PEND;//0x7f008270u32 reserved20[3];u32 rPRIORITY;//0x7f008280u32 rSERVICE;//0x7f008284u32 rSERVICEPEND;//0x7f008288u32 reserved21;u32 reserved22[348];u32 rGPIOKCON0;//0x7f008800u32 rGPIOKCON1;//0x7f008804u32 rGPIOKDAT;//0x7f008808u32 rGPIOKPUD;//0x7f00880cu32 rGPIOLCON0;//0x7f008810u32 rGPIOLCON1;//0x7f008814u32 rGPIOLDAT;//0x7f008818u32 rGPIOLPUD;//0x7f00881cu32 rGPIOMCON;//0x7f008820u32 rGPIOMDAT;//0x7f008824u32 rGPIOMPUD;//0x7f008828u32 reserved23;u32 rGPIONCON;//0x7f008830u32 rGPIONDAT;//0x7f008834u32 rGPIONPUD;//0x7f008838u32 reserved24;u32 reserved25[16];u32 rSPCONSLP;//0x7f008880u32 reserved26[31];u32 rEINT0CON0;//0x7f008900u32 rEINT0CON1;//0x7f008904u32 reserved27[2];u32 rEINT0FLTCON0;//0x7f008910u32 rEINT0FLTCON1;//0x7f008914u32 rEINT0FLTCON2;//0x7f008918u32 rEINT0FLTCON3;//0x7f00891cu32 rEINT0MASK;//0x7f008920u32 rEINT0PEND;//0x7f008924u32 reserved28[2];u32 rSLPEN;//0x7f008930} oGPIO_REGS;#ifndef GPIO_BASE#define GPIO_BASE(0x7F008000)#endif#ifndef GPIO#define GPIO    (( volatile oGPIO_REGS *)GPIO_BASE)#endif#endif 

  (5)library.h

/**************************************************************************************  *File Description : This file defines the register access function*and declares prototypes of library funcions  **************************************************************************************/#ifndef __LIBRARY_H__#define __LIBRARY_H__#include "def.h"#define Outp32(addr, data)(*(volatile u32 *)(addr) = (data))#define Outp16(addr, data)(*(volatile u16 *)(addr) = (data))#define Outp8(addr, data)(*(volatile u8 *)(addr) = (data))#define Inp32(addr)(*(volatile u32 *)(addr))#define Inp16(addr)(*(volatile u16 *)(addr))#define Inp8(addr)(*(volatile u8 *)(addr))#endif /*__LIBRARY_H__*/

(6)intc.h

/************************************************************************************** *File Description : This file declares prototypes of interrupt controller API funcions.**************************************************************************************/#ifndef __INTC_H__#define __INTC_H__#include "def.h"#include "sfr6410.h"void INTC_Init(void);void INTC_ClearVectAddr(void);#define INT_LIMIT(64)//INT NUM - VIC0#define NUM_EINT0(0)#define NUM_EINT1(1)#define NUM_RTC_TIC(2)#define NUM_CAMIF_C(3)#define NUM_CAMIF_P(4)#define NUM_I2C1(5)#define NUM_I2S(6)#define NUM_3D(8)#define NUM_POST0(9)#define NUM_ROTATOR(10)#define NUM_2D(11)#define NUM_TVENC(12)#define NUM_SCALER(13)#define NUM_BATF(14)#define NUM_JPEG(15)#define NUM_MFC(16)#define NUM_SDMA0(17)#define NUM_SDMA1(18)#define NUM_ARM_DMAERR(19)#define NUM_ARM_DMA(20)#define NUM_ARM_DMAS(21)#define NUM_KEYPAD(22)#define NUM_TIMER0(23)#define NUM_TIMER1(24)#define NUM_TIMER2(25)#define NUM_WDT(26)#define NUM_TIMER3(27)#define NUM_TIMER4(28)#define NUM_LCD0(29)#define NUM_LCD1(30)#define NUM_LCD2(31)//INT NUM - VIC1#define NUM_EINT2(32+0)#define NUM_EINT3(32+1)#define NUM_PCM0(32+2)#define NUM_PCM1(32+3)#define NUM_AC97(32+4)#define NUM_UART0(32+5)#define NUM_UART1(32+6)#define NUM_UART2(32+7)#define NUM_UART3(32+8)#define NUM_DMA0(32+9)#define NUM_DMA1(32+10)#define NUM_ONENAND0(32+11)#define NUM_ONENAND1(32+12)#define NUM_NFC(32+13)#define NUM_CFC(32+14)#define NUM_UHOST(32+15)#define NUM_SPI0(32+16)#define NUM_SPI1(32+17)#define NUM_IIC(32+18)#define NUM_HSItx(32+19)#define NUM_HSIrx(32+20)#define NUM_EINTGroup(32+21)#define NUM_MSM(32+22)#define NUM_HOSTIF(32+23)#define NUM_HSMMC0(32+24)#define NUM_HSMMC1(32+25)#define NUM_OTG(32+26)#define NUM_IRDA(32+27)#define NUM_RTC_ALARM(32+28)#define NUM_SEC(32+29)#define NUM_PENDNUP(32+30)#define NUM_ADC(32+31)#define NUM_PMU(32+32)// VIC0#definerVIC0IRQSTATUS(VIC0_BASE + 0x00)#definerVIC0FIQSTATUS(VIC0_BASE + 0x04)#definerVIC0RAWINTR(VIC0_BASE + 0x08)#definerVIC0INTSELECT(VIC0_BASE + 0x0c)#definerVIC0INTENABLE(VIC0_BASE + 0x10)#definerVIC0INTENCLEAR(VIC0_BASE + 0x14)#definerVIC0SOFTINT(VIC0_BASE + 0x18)#definerVIC0SOFTINTCLEAR(VIC0_BASE + 0x1c)#definerVIC0PROTECTION(VIC0_BASE + 0x20)#definerVIC0SWPRIORITYMASK(VIC0_BASE + 0x24)#definerVIC0PRIORITYDAISY(VIC0_BASE + 0x28)#define rVIC0VECTADDR(VIC0_BASE + 0x100)#define rVIC0VECPRIORITY(VIC0_BASE + 0x200)#define rVIC0ADDR(VIC0_BASE + 0xf00)#define rVIC0PERID0(VIC0_BASE + 0xfe0)#define rVIC0PERID1(VIC0_BASE + 0xfe4)#define rVIC0PERID2(VIC0_BASE + 0xfe8)#define rVIC0PERID3(VIC0_BASE + 0xfec)#define rVIC0PCELLID0(VIC0_BASE + 0xff0)#define rVIC0PCELLID1(VIC0_BASE + 0xff4)#define rVIC0PCELLID2(VIC0_BASE + 0xff8)#define rVIC0PCELLID3(VIC0_BASE + 0xffc)// VIC1#definerVIC1IRQSTATUS(VIC1_BASE + 0x00)#definerVIC1FIQSTATUS(VIC1_BASE + 0x04)#definerVIC1RAWINTR(VIC1_BASE + 0x08)#definerVIC1INTSELECT(VIC1_BASE + 0x0c)#definerVIC1INTENABLE(VIC1_BASE + 0x10)#definerVIC1INTENCLEAR(VIC1_BASE + 0x14)#definerVIC1SOFTINT(VIC1_BASE + 0x18)#definerVIC1SOFTINTCLEAR(VIC1_BASE + 0x1c)#definerVIC1PROTECTION(VIC1_BASE + 0x20)#definerVIC1SWPRIORITYMASK(VIC1_BASE + 0x24)#definerVIC1PRIORITYDAISY(VIC1_BASE + 0x28)#define rVIC1VECTADDR(VIC1_BASE + 0x100)#define rVIC1VECPRIORITY(VIC1_BASE + 0x200)#define rVIC1ADDR(VIC1_BASE + 0xf00)#define rVIC1PERID0(VIC1_BASE + 0xfe0)#define rVIC1PERID1(VIC1_BASE + 0xfe4)#define rVIC1PERID2(VIC1_BASE + 0xfe8)#define rVIC1PERID3(VIC1_BASE + 0xfec)#define rVIC1PCELLID0(VIC1_BASE + 0xff0)#define rVIC1PCELLID1(VIC1_BASE + 0xff4)#define rVIC1PCELLID2(VIC1_BASE + 0xff8)#define rVIC1PCELLID3(VIC1_BASE + 0xffc)#endif 

(7)intc.c

/***************************************************************************************File Description : This file implements the API functons for interrupt controller.**************************************************************************************/#include "library.h"#include "intc.h"// Function Description : This function initializes interrupt controller void INTC_Init(void){#if (VIC_MODE==0)u32 i;for(i=0;i<32;i++)Outp32(rVIC0VECTADDR+4*i, i);for(i=0;i<32;i++)Outp32(rVIC1VECTADDR+4*i, i+32);#endifOutp32(rVIC0INTENCLEAR, 0xffffffff);Outp32(rVIC1INTENCLEAR, 0xffffffff);Outp32(rVIC0INTSELECT, 0x0);Outp32(rVIC1INTSELECT, 0x0);INTC_ClearVectAddr();return;}// Function Description : This function clears the vector address registervoid INTC_ClearVectAddr(void){Outp32(rVIC0ADDR, 0);Outp32(rVIC1ADDR, 0);return;}


(8)sfr6410.h
/***************************************************************************************File Description : This file defines SFR base addresses.**************************************************************************************/#ifndef __sfr6410_H__#define __sfr6410_H__#include "def.h"//////AHB_SMC////SMC#define SROM_BASE(0x70000000)//SROM#define ONENAND0_BASE(0x70100000)//OneNAND#define ONENAND1_BASE(0x70180000)//OneNAND#define NFCON_BASE(0x70200000)//Nand Flash#define CFCON_BASE(0x70300000)//CF//////TZIC////TZIC#define TZIC0_BASE(0x71000000)#define TZIC1_BASE(0x71100000)//////VIC////VIC#define VIC0_BASE(0x71200000)#define VIC1_BASE(0x71300000)//////3D////3D#define FIMG_BASE   (0x72000000)//////AHB_ETB////ETB#define ETBMEM_BASE(0x73000000)#define ETBSFR_BASE(0x73100000)//////AHB_T////HOST i/f#define HOSTIF_SFR_BASE(0x74000000)#define DPSRAM_BASE(0x74100000)#define MODEMIF_BASE(0x74108000)//USB HOST#define USBHOST_BASE(0x74300000)#define MDPIF_BASE(0x74400000)//////AHB_M////DMA#define DMA0_BASE(0x75000000)#define DMA1_BASE(0x75100000)//////AHB_P//// 2D#define G2D_BASE(0x76100000)//TV#define TVENC_BASE(0x76200000)#define TVSCALER_BASE(0X76300000)//////AHB_F////POST#define POST0_BASE(0x77000000)//LCD#define LCD_BASE(0x77100000)//ROTATOR#define ROTATOR_BASE(0x77200000)//////AHB_I////CAMERA I/F#define CAMERA_BASE(0x78000000)//JPEG#define JPEG_BASE(0x78800000)//////AHB_X////USB OTG#define USBOTG_LINK_BASE(0x7C000000)#define USBOTG_PHY_BASE(0x7C100000)//HS MMC#define HSMMC0_BASE(0x7C200000)#define HSMMC1_BASE(0x7C300000)#define HSMMC2_BASE(0x7C400000)//////AHB_S////D&I Security Sub System Base#define DnI_BASE(0x7D000000)#define AES_RX_BASE(0x7D100000)#define DES_RX_BASE(0x7D200000)#define HASH_RX_BASE(0x7D300000)#define RX_SFR_BASE(0x7D400000)#define AES_TX_BASE(0x7D500000)#define DES_TX_BASE(0x7D600000)#define HASH_TX_BASE(0x7D700000)#define TX_SFR_BASE(0x7D800000)#define RX_FIFO_BASE(0x7D900000)#define TX_FIFO_BASE(0x7DA00000)// SDMA Controller#define SDMA0_BASE(0x7DB00000)#define SDMA1_BASE(0x7DC00000)//////APB0////DMC#define DMC0_BASE(0x7E000000)#define DMC1_BASE(0x7E001000)//MFC#define MFC_BASE(0x7E002000)//WDT#define WDT_BASE(0x7E004000)//RTC#define RTC_BASE(0x7E005000)//HSI#define HSITX_BASE(0x7E006000)#define HSIRX_BASE(0x7E007000)//KEYPAD I/F#define KEYPADIF_BASE(0x7E00A000)//ADC TS#define ADCTS_BASE(0x7E00B000)//ETM#define ETM_BASE(0x7E00C000)//KEY#define KEY_BASE(0x7E00D000)//Chip ID#define CHIPID_BASE(0x7E00E000)//SYSCON#define SYSCON_BASE(0x7E00F000)//////APB1////TZPC#define TZPC_BASE(0x7F000000)//AC97#define AC97_BASE(0x7F001000)//I2S#define I2S0_BASE(0x7F002000)#define I2S1_BASE(0x7F003000)//I2C (Channel0, 1 Added by SOP on 2008.03.01)#define I2C0_BASE(0x7F004000)#define I2C1_BASE(0x7F00F000)//UART#define UART_BASE(0x7F005000)//PWM TIMER#define PWMTIMER_BASE(0x7F006000)//IRDA#define IRDA_BASE(0x7F007000)//GPIO#define GPIO_BASE(0x7F008000)//PCM#define PCM0_BASE(0x7F009000)#define PCM1_BASE(0x7F00A000)//SPI#define SPI0_BASE(0x7F00B000)#define SPI1_BASE(0x7F00C000)//I2S MULTI#define I2SMULTI_BASE(0X7F00D00)//GIB#define GIB_BASE(0x7F00E000)#endif 

(9)sysc.h
/***************************************************************************************File Description : This file declares prototypes of system funcions. **************************************************************************************/#ifndef __SYSTEM_H__#define __SYSTEM_H__#include "def.h"extern u8g_System_Revision, g_System_Pass;extern u32g_APLL, g_MPLL, g_ARMCLK, g_HCLKx2, g_HCLK, g_PCLK;// Camera module define by jungil 01.31#define CAM_OV76201#define CAM_S5X4332#defineCAM_AU70H3#define CAM_S5X3A14#define CAM_S5K3AA5#define CAM_S5K3BA6#defineCAM_S5K4AAF7#define CAM_LCD_INTERLACE8#define CAM_LCD_PROGRESSIVE9#define CAM_A3AFX_VGA10#define CAM_MODELCAM_S5K3BA//----------------------------------------void SYSTEM_EnableVIC(void);void SYSTEM_DisableVIC(void);void SYSTEM_EnableIRQ(void);void SYSTEM_DisableIRQ(void);void SYSTEM_EnableFIQ(void);void SYSTEM_DisableFIQ(void);void SYSTEM_InitException( void);void MMU_WaitForInterrupt(void);void Stop_WFI_Test(void);void Stop_WFI_Test1(void);void SYSTEM_EnableBP(void);void SYSTEM_EnableICache(void);void SYSTEM_DisableICache(void);void SYSTEM_EnableDCache(void);void SYSTEM_DisableDCache(void);void SYSTEM_InvalidateEntireICache(void);void SYSTEM_InvalidateEntireDCache(void);void SYSTEM_InvalidateBothCache(void);void SYSTEM_CleanEntireDCache(void);void SYSTEM_CleanInvalidateEntireDCache(void);void SYSTEM_EnableMMU(void);void SYSTEM_DisableMMU(void);void SYSTEM_InvalidateTLB(void);void SYSTEM_SetTTBase(u32);void SYSTEM_SetDomain(u32);void SYSTEM_SetFCSEPID(u32);void SYSTEM_EnableAlignFault(void);void SYSTEM_DisableAlignFault(void);u32 SYSTEM_ReadDFSR(void);u32 SYSTEM_ReadIFSR(void);u32 SYSTEM_ReadFAR(void);void SYSTEM_InitMmu(void);void MEMCOPY_TEST(void);void MEMCOPY_TEST0(void);void MEMCOPY8 (u32,u32, u32 );void MEMWRITE4 (u32, u32, u32 , u32); // addr, size, data1, data2#endif 

(10)sysc.c
/*************************************************************************************** *Project Name : S3C6410 Validation**Copyright 2006 by Samsung Electronics, Inc.*All rights reserved.**Project Description :*This software is only for validating functions of the S3C6410.*Anybody can use this software without our permission.*  *--------------------------------------------------------------------------------------* *File Name : sysc.c*  *File Description : This file implements the API functons for system controller.**Author : Haksoo,Kim*Dept. : AP Development Team*Created Date : 2006/11/08*Version : 0.1 * *History*- Created(Haksoo,Kim 2006/11/08)*- Added sfr (Wonjoon.Jang 2007/01/08)*  **************************************************************************************/#include "library.h"#include "sfr6410.h"#include "system.h"#include "option.h"#include "gpio.h"#include "sysc.h"#include "intc.h"#define dprintfUART_Printf//#define dprintf//#define rAPLL_LOCK(SYSCON_BASE+0x000)#define rMPLL_LOCK(SYSCON_BASE+0x004)#define rEPLL_LOCK(SYSCON_BASE+0x008)#define rAPLL_CON(SYSCON_BASE+0x00c)#define rMPLL_CON(SYSCON_BASE+0x010)#define rEPLL_CON0(SYSCON_BASE+0x014)#define rEPLL_CON1(SYSCON_BASE+0x018)#define rCLK_SRC(SYSCON_BASE+0x01c)#define rCLK_SRC2(SYSCON_BASE+0x10c)#define rCLK_DIV0(SYSCON_BASE+0x020)#define rCLK_DIV1(SYSCON_BASE+0x024)#define rCLK_DIV2(SYSCON_BASE+0x028)#define rCLK_OUT(SYSCON_BASE+0x02c)#define rHCLK_GATE(SYSCON_BASE+0x030)#define rPCLK_GATE(SYSCON_BASE+0x034)#define rSCLK_GATE(SYSCON_BASE+0x038)#define rMEM0_CLK_GATE(SYSCON_BASE+0x03c)//#define rAHB_CON0(SYSCON_BASE+0x100)#define rAHB_CON1(SYSCON_BASE+0x104)#define rAHB_CON2(SYSCON_BASE+0x108)#define rSDMA_SEL(SYSCON_BASE+0x110)#define rSW_RST(SYSCON_BASE+0x114)#define rSYS_ID(SYSCON_BASE+0x118)#define rMEM_SYS_CFG(SYSCON_BASE+0x120)#define rQOS_OVERRIDE0(SYSCON_BASE+0x124)#define rQOS_OVERRIDE1(SYSCON_BASE+0x128)#define rMEM_CFG_STAT(SYSCON_BASE+0x12c)//#define rPWR_CFG(SYSCON_BASE+0x804)#define rEINT_MASK(SYSCON_BASE+0x808)#define rNORMAL_CFG(SYSCON_BASE+0x810)#define rSTOP_CFG(SYSCON_BASE+0x814)#define rSLEEP_CFG(SYSCON_BASE+0x818)#define rSTOP_MEM_CFG(SYSCON_BASE+0x81C)#define rOSC_FREQ(SYSCON_BASE+0x820)#define rOSC_STABLE(SYSCON_BASE+0x824)#define rPWR_STABLE(SYSCON_BASE+0x828)#define rFPC_STABLE(SYSCON_BASE+0x82c)#define rMTC_STABLE(SYSCON_BASE+0x830)#define rBUS_CACHEABLE_CON(SYSCON_BASE+0x838)// #define rOTHERS(SYSCON_BASE+0x900)#define rRST_STAT(SYSCON_BASE+0x904)#define rWAKEUP_STAT(SYSCON_BASE+0x908)#define rBLK_PWR_STAT(SYSCON_BASE+0x90c)#define rINFORM0(SYSCON_BASE+0xA00)#define rINFORM1(SYSCON_BASE+0xA04)#define rINFORM2(SYSCON_BASE+0xA08)#define rINFORM3(SYSCON_BASE+0xA0c)#define rINFORM4(SYSCON_BASE+0xA10)#define rINFORM5(SYSCON_BASE+0xA14)#define rINFORM6(SYSCON_BASE+0xA18)#define rINFORM7(SYSCON_BASE+0xA1c)u8g_System_Revision, g_System_Pass, g_SYNCACK;u32g_APLL, g_MPLL, g_ARMCLK, g_HCLKx2, g_HCLK, g_PCLK;//////////// Function Name : SYSC_GetClkInform// Function Description : This function gets common clock information// Input : NONE // Output : NONE// Version : void SYSC_GetClkInform( void){u8 muxApll, muxMpll, muxSync;u8 divApll, divHclkx2, divHclk, divPclk;u16 pllM, pllP, pllS;u32 temp;////// clock division ratiotemp = Inp32(rCLK_DIV0);divApll = temp & 0xf;divHclkx2 = (temp>>9) & 0x7;divHclk = (temp>>8) & 0x1;divPclk = (temp>>12) & 0xf;////// Operating Modetemp = Inp32(rOTHERS);temp = (temp>>8)&0xf;if(temp){g_SYNCACK = 1;}else{g_SYNCACK = 0;}////// ARMCLKmuxApll = Inp32(rCLK_SRC) & 0x1;if(muxApll)//FOUT{temp = Inp32(rAPLL_CON);pllM = (temp>>16)&0x3ff;pllP = (temp>>8)&0x3f;pllS = (temp&0x7);g_APLL = ((FIN>>pllS)/pllP)*pllM;}else//FIN{g_APLL = FIN;}g_ARMCLK = g_APLL/(divApll+1);////// HCLKmuxSync = (Inp32(rOTHERS)>>7) & 0x1;if(muxSync)//synchronous mode{g_HCLKx2 = g_APLL/(divHclkx2+1);temp = Inp32(rMPLL_CON);pllM = (temp>>16)&0x3ff;pllP = (temp>>8)&0x3f;pllS = (temp&0x7);g_MPLL = ((FIN>>pllS)/pllP)*pllM;}else{muxMpll = (Inp32(rCLK_SRC)>>1) & 0x1;if(muxMpll)//FOUT{temp = Inp32(rMPLL_CON);pllM = (temp>>16)&0x3ff;pllP = (temp>>8)&0x3f;pllS = (temp&0x7);g_MPLL = ((FIN>>pllS)/pllP)*pllM;}else//FIN{g_MPLL = FIN;}g_HCLKx2 = g_MPLL/(divHclkx2+1);}g_HCLK = g_HCLKx2/(divHclk+1);////// PCLKg_PCLK = g_HCLKx2/(divPclk+1);return;}


(11)system.h

/***************************************************************************************File Description : This file declares prototypes of system funcions. **************************************************************************************/#ifndef __SYSTEM_H__#define __SYSTEM_H__#include "def.h"extern u8g_System_Revision, g_System_Pass;extern u32g_APLL, g_MPLL, g_ARMCLK, g_HCLKx2, g_HCLK, g_PCLK;// Camera module define by jungil 01.31#define CAM_OV76201#define CAM_S5X4332#defineCAM_AU70H3#define CAM_S5X3A14#define CAM_S5K3AA5#define CAM_S5K3BA6#defineCAM_S5K4AAF7#define CAM_LCD_INTERLACE8#define CAM_LCD_PROGRESSIVE9#define CAM_A3AFX_VGA10#define CAM_MODELCAM_S5K3BA//----------------------------------------void SYSTEM_EnableVIC(void);void SYSTEM_DisableVIC(void);void SYSTEM_EnableIRQ(void);void SYSTEM_DisableIRQ(void);void SYSTEM_EnableFIQ(void);void SYSTEM_DisableFIQ(void);void SYSTEM_InitException( void);void MMU_WaitForInterrupt(void);void Stop_WFI_Test(void);void Stop_WFI_Test1(void);void SYSTEM_EnableBP(void);void SYSTEM_EnableICache(void);void SYSTEM_DisableICache(void);void SYSTEM_EnableDCache(void);void SYSTEM_DisableDCache(void);void SYSTEM_InvalidateEntireICache(void);void SYSTEM_InvalidateEntireDCache(void);void SYSTEM_InvalidateBothCache(void);void SYSTEM_CleanEntireDCache(void);void SYSTEM_CleanInvalidateEntireDCache(void);void SYSTEM_EnableMMU(void);void SYSTEM_DisableMMU(void);void SYSTEM_InvalidateTLB(void);void SYSTEM_SetTTBase(u32);void SYSTEM_SetDomain(u32);void SYSTEM_SetFCSEPID(u32);void SYSTEM_EnableAlignFault(void);void SYSTEM_DisableAlignFault(void);u32 SYSTEM_ReadDFSR(void);u32 SYSTEM_ReadIFSR(void);u32 SYSTEM_ReadFAR(void);void SYSTEM_InitMmu(void);void MEMCOPY_TEST(void);void MEMCOPY_TEST0(void);void MEMCOPY8 (u32,u32, u32 );void MEMWRITE4 (u32, u32, u32 , u32); // addr, size, data1, data2#endif 



(12)option.h
/*************************************************************************************** *Project Name : S3C6410 Validation**Copyright 2006 by Samsung Electronics, Inc.*All rights reserved.**Project Description :*This software is only for validating functions of the S3C6410.*Anybody can use this software without our permission.*  *--------------------------------------------------------------------------------------* *File Name : option.h*  *File Description : This file defines basic setting and configuration.**Author : Haksoo,Kim*Dept. : AP Development Team*Created Date : 2006/11/08*Version : 0.1 * *History*- Created(Haksoo,Kim 2006/11/08)*  **************************************************************************************/#ifndef __OPTION_H__#define __OPTION_H__#ifdef __cplusplusextern "C" {#endif#include "def.h"// semi-hosting#defineSEMIHOSTING(false)#defineFIN12000000#defineDMC0(FALSE)#defineDMC1(!(DMC0))#if(DMC0)#define_DRAM_BaseAddress0x40000000#elif (DMC1)#define_DRAM_BaseAddress0x50000000#endif#define_DRAM0_BaseAddress0x40000000#define_SMC_BaseAddress0x10000000#define_Exception_Vector(_DRAM_BaseAddress+0x07ffff00)#define_MMUTT_BaseAddress(_DRAM_BaseAddress+0x07ff8000)#defineDefaultDownloadAddress(_DRAM_BaseAddress+0x00200000)//rb1004#define CODEC_MEM_ST(_DRAM_BaseAddress+0x01000000)#define CODEC_MEM_LMT  (_DRAM_BaseAddress+0x02000000)// Derrick#defineSMDK_MODE0#defineASB_MODE1#defineTEST_CODE_MODEASB_MODE#defineASB_ONBL_ADDRESS(_DRAM_BaseAddress+0x01000000)#defineASB_BL2_ADDRESS(_DRAM_BaseAddress+0x01000800)#defineASB_FW_ADDRESS(_DRAM_BaseAddress+0x01040000)#defineASB_MFC1_ADDRESS(_DRAM_BaseAddress+0x01A00000)#defineASB_MFC2_ADDRESS(_DRAM_BaseAddress+0x01A20000)#defineASB_MFC3_ADDRESS(_DRAM_BaseAddress+0x01D20000)#defineASB_BIN1_ADDRESS(_DRAM_BaseAddress+0x02120000)#defineASB_BIN2_ADDRESS(_DRAM_BaseAddress+0x05000000)#ifdef __cplusplus}#endif#endif /*__OPTION_H__*/