📄 frmwrk.c
字号:
//Setting: Output Output Output Output EINT3 EINT2 EINT1 EINT0
//Binary : 01 01 , 01 01 , 10 10 , 10 10
rGPFCON = 0x55aa;
rGPFUP = 0xff; // The pull up function is disabled GPF[7:0]
//=== PORT G GROUP
//Ports : GPG15 GPG14 GPG13 GPG12 GPG11 GPG10 GPG9 GPG8 GPG7 GPG6
//Signal : nYPON YMON nXPON XMON EINT19 DMAMODE1 DMAMODE0 DMASTART KBDSPICLK KBDSPIMOSI
//Setting: nYPON YMON nXPON XMON EINT19 Output Output Output SPICLK1 SPIMOSI1
//Binary : 11 11 , 11 11 , 10 01 , 01 01 , 11 11
//-----------------------------------------------------------------------------------------
//Ports : GPG5 GPG4 GPG3 GPG2 GPG1 GPG0
//Signal : KBDSPIMISO LCD_PWREN EINT11 nSS_SPI LED3 IRQ_PCMCIA
//Setting: SPIMISO1 LCD_PWRDN EINT11 nSS0 Output EINT8
//Binary : 11 11 , 10 11 , 01 10
rGPGCON = 0xff95ffb6;
rGPGUP = 0xffff; // The pull up function is disabled GPG[15:0]
/*
//GPG4 Output Port [9:8] 01 -> LCD_PWREN Enable
rGPGCON = (rGPGCON & 0xfffffcff) | (1<<8);
rGPGDAT = (rGPGDAT & 0xffef) | (1<<4);
*/
//=== PORT H GROUP
//Ports : GPH10 GPH9 GPH8 GPH7 GPH6 GPH5 GPH4 GPH3 GPH2 GPH1 GPH0
//Signal : CLKOUT1 CLKOUT0 UCLK nCTS1 nRTS1 RXD1 TXD1 RXD0 TXD0 nRTS0 nCTS0
//Binary : 10 , 10 10 , 11 11 , 10 10 , 10 10 , 10 10
rGPHCON = 0x2afaaa;
rGPHUP = 0x7ff; // The pull up function is disabled GPH[10:0]
//External interrupt will be falling edge triggered.
rEXTINT0 = 0x22222222; // EINT[7:0]
rEXTINT1 = 0x22222222; // EINT[15:8]
rEXTINT2 = 0x22222222; // EINT[23:16]
}
/*
*********************************************************************************************
* __vChangeMPllValue
*
* Description: This routine sets the MPLL value.
*
* Arguments : none.
*
* Return : none.
*
* Note(s) :
*********************************************************************************************
*/
static void __vChangeMPllValue(int wMdiv, int wPdiv, int wSdiv)
{
rMPLLCON = (wMdiv<<12) | (wPdiv<<4) | wSdiv;
}
/*
*********************************************************************************************
* __vChangeClockDivider
*
* Description: This routine sets the HCLK and PCLK.
*
* Arguments : none.
*
* Return : none.
*
* Note(s) :
*********************************************************************************************
*/
static void __vChangeClockDivider(int wHdivn, int wPdivn)
{
// wHdivn,wPdivn FCLK:HCLK:PCLK
// 0,0 1:1:1
// 0,1 1:1:2
// 1,0 1:2:2
// 1,1 1:2:4
rCLKDIVN = (wHdivn<<1) | wPdivn;
if(wHdivn)
MMU_SetAsyncBusMode();
else
MMU_SetFastBusMode();
}
/* ********************************************************************* */
/* Global functions */
/*
*********************************************************************************************
* C_IRQHandler
*
* Description: This routine is the IRQ handler. Handles all peripheral interrupts.
*
* Arguments : none.
*
* Return : none.
*
* Note(s) :
*********************************************************************************************
*/
void C_IRQHandler(void)
{
U32 wTemp;
wTemp = rINTOFFSET<<2;
((void(*)(void))(*((U32 *)(aISR_EINT0+wTemp))))();
}
/*
*********************************************************************************************
* FRMWRK_vStartTicker
*
* Description: This routine starts Timer1 (TC1) in the Prescale mode for OS Tick.
*
* Arguments : wTicksPerSec - Time ticks per second.
*
* Return : none.
*
* Note(s) :
*********************************************************************************************
*/
void FRMWRK_vStartTicker(U32 wTicksPerSec)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
OS_ENTER_CRITICAL();
rWTCON = 0; // Disable watchdog
rSRCPND &= BIT_WDT; // Clear any pending WD int
rINTPND &= BIT_WDT;
pISR_WDT = (U32)__vWDTInterrupt;
rWTDAT = rWTCNT = PCLK / 16 / wTicksPerSec; //set up the WDT for wTicksPerSec
rWTCON = (0<<8)|(1<<5)|(0<<3)|(1<<2)|(0<<0);// Enable: WD, WD interrupts
BIT_CLR(rINTMSK, BIT_WDT); // Enable WatchDog interrupts
OS_EXIT_CRITICAL();
}
/*
*********************************************************************************************
* FRMWRK_vRamTest
*
* Description: This routine is used do RAM test.
*
* Arguments : pbID - Test identification string.
* wSAddr - RAM starting address.
* wEAddr - RAM end address.
*
* Return : none.
*
* Note(s) : Do not test the following areas using this routine:
* 1. Stack
* 2. Software vector table
* 3. C Variables (RW & ZI)
*********************************************************************************************
*/
void FRMWRK_vRamTest(U8 *pbID,U32 wSAddr,U32 wEAddr)
{
U32 wI,wJ;
U8 bError=0;
CONSOL_Printf("\n%s(%08xh-%08xh):WR",pbID,wSAddr,wEAddr);
for(wI=wSAddr;wI<wEAddr;wI+=4)
{
*((volatile unsigned *)wI)=wI;
}
CONSOL_Printf("\b\bRD");
for(wI=wSAddr;wI<wEAddr;wI+=4)
{
wJ=*((volatile unsigned *)wI);
if(wJ!=wI)bError=1;
}
if(bError==0)CONSOL_Printf("\b\bO.K.\n");
else CONSOL_Printf("\b\bFAIL\n");
}
/*
*********************************************************************************************
* C_vMain
*
* Description: This is the main C entry function.
*
* Arguments : none.
*
* Return : none.
*
* Note(s) :
*********************************************************************************************
*/
void C_vMain(void)
{
__vChangeClockDivider(1,1); // 1:2:4
// __vChangeMPllValue(84,1,1); // FCLK=184 MHz
__vChangeMPllValue(0xa1,0x3,0x1); // FCLK=202.8MHz
rINTMOD = 0x0; //All=IRQ mode
rINTMSK = BIT_ALLMSK; //All interrupt is masked.
rINTSUBMSK = BIT_SUB_ALLMSK; //All sub-interrupt is masked. <- April 01, 2002 SOP
__vInitHaltHandlers();
pISR_IRQ = (U32)UCOS_IRQHandler;
__vPortInit();
CONSOL_Select(__nConsolPort);
CONSOL_Init(__nConsolBaud);
MMU_Init();
__vLogo();
//lzfdebug
APP_vMain();
CONSOL_Printf("APP has ended...\n");
}
/*
*********************************************************************************************
* printf
*
* Description: This is a stdio.h function.
*
* Arguments : .
*
* Return : Returns 0.
*
* Note(s) :
*********************************************************************************************
*/
int printf(const char *pbFmt,...)
{
va_list pArg;
char abString[1024];
va_start(pArg,pbFmt);
vsprintf(abString,pbFmt,pArg);
CONSOL_SendString(abString);
va_end(pArg);
return 0;
}
/* ********************************************************************* */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -