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

📄 system.c

📁 三星给予ARM920T内核的S3C2413的demo版本
💻 C
字号:
#include "stdio.h"
#include "Option.h"
#include "2413addr.h"


//===========================[ SYSTEM ]===================================================

static int delayLoopCount;

unsigned int MPLL;
unsigned int ARMCLK, HCLK, PCLK;
unsigned int ARMCLKdiv, HCLKdiv, PCLKdiv;

void SystemCLK( void)
{
	unsigned int mdiv, pdiv, sdiv;

	mdiv = (rMPLLCON>>12)&0xff;
	pdiv = (rMPLLCON>>4)&0x3f;
	sdiv = (rMPLLCON&0x3);

	MPLL = (2*(mdiv+8)*FIN) / (pdiv+2);
	MPLL >>= sdiv;

	ARMCLKdiv	=	(rCLKDIVN>>3)&0x1;
	HCLKdiv		=	rCLKDIVN&0x3;
	PCLKdiv		=	(rCLKDIVN>>2)&0x1;

	ARMCLK	=	MPLL >> ARMCLKdiv;
	HCLK	=	ARMCLK / (HCLKdiv+1);
	PCLK	=	HCLK >> PCLKdiv;
}
//===========================[ SYSTEM ]===================================================

static int delayLoopCount;

void Delay(int time)
{
      // time=0: adjust the Delay function by WatchDog timer.
      // time>0: the number of loop time
      // resolution of time is 100us.
    int i,adjust=0;
    if(time==0) {
        time   = 200;
        adjust = 1;
        delayLoopCount = 400;
            //PCLK/1M,Watch-dog disable,1/64,interrupt disable,reset disable
        rWTCON = ((PCLK/1000000-1)<<8)|(2<<3); 
        rWTDAT = 0xffff;                              //for first update
        rWTCNT = 0xffff;                              //resolution=64us @any PCLK 
        rWTCON = ((PCLK/1000000-1)<<8)|(2<<3)|(1<<5); //Watch-dog timer start
    }
    for(;time>0;time--)
        for(i=0;i<delayLoopCount;i++);
    if(adjust==1) {
        rWTCON = ((PCLK/1000000-1)<<8)|(2<<3);   //Watch-dog timer stop
        i = 0xffff - rWTCNT;                     // 1count->64us, 200*400 cycle runtime = 64*i us
        //delayLoopCount = 8000000/(i*64);         //200*400:64*i=1*x:100 -> x=80000*100/(64*i)   
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -