?? system.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 + -