📄 复件 uhal.c
字号:
/*********************************************************************************/
//NAME:UAHL.C
//Modified by WangZengzhi 2008.6
/*********************************************************************************/
#include "..\inc\WOPTIONS.H"
#include "..\ucos\includes.h"
#include "..\porting\port.h"
/*********************************************************************************/
#define _TICK 1000 // 1/1000 sec
#define _CLOCK ((MCLK)/0xf/4/(_TICK))
/*Timer input clock Frequency = MCLK / {prescaler value + 1} / {divider value}
{prescaler value} = 0-255
{divider value} = 2, 4, 8, 16, 32*/
/*********************************************************************************/
void BreakPoint(void)
{
while(1) {
}//while
}//BreakPoint
/*********************************************************************************/
/*** Called by ARMTargetInit() ***/
//Reset memory management unit.
void uHALr_ResetMMU(void)
{
}//uHALrResetMMU
/*********************************************************************************/
void OutDebug(unsigned int num)
{
}//OutDebug
/*********************************************************************************/
//Define pre & post-process routines for Interrupt.
void uHALir_DefineIRQ(void *is, void *iq, void *n)
{
}//uHALir_DefineIRQ
/*********************************************************************************/
//Initialze interrupts.
void uHALr_InitInterrupts(void)
{
// Non-vectored,IRQ disable,FIQ disable
rINTCON=0x0;
// All=IRQ mode
rINTMOD=0x0;
// All interrupt is masked.
rINTMSK=BIT_GLOBAL;
}//uHALr_InitInterrupts
/*********************************************************************************/
//Initialize timer that is used OS.
void uHALr_InitTimers(void)//use timer1
{
//the following code is for 44B0X
rTCFG0=0x0f0f0f;
rTCFG1=0x11111;
rTCNTB1= _CLOCK;
rTCMPB1= 0x0;
rTCON=(0x2<<8); //update mode for TCNTB1 and TCMPB1.
rTCON=(0x9<<8); //timer1 = auto reload, start
}//uHALr_InitTimers
/*********************************************************************************/
int I_COUNT=0;
void DebugUNDEF(void)
{
Uart_Printf("!!!Enter UNDEFINED. %d\r\n", I_COUNT);
while(1) {
Delay(1000);
Delay(1000);
}//while
}//BreakPoint
/*********************************************************************************/
void DebugSWI(void)
{
Uart_Printf("!!!Enter SWI. %d\r\n", I_COUNT);
while(1) {
Delay(1000);
Delay(1000);
}//while
}
/*********************************************************************************/
void DebugABORT(void)
{
Uart_Printf("!!!Enter ABORT %d\r\n", I_COUNT);
while(1) {
Delay(1000);
Delay(1000);
}//while
}
/*********************************************************************************/
void DebugFIQ(void)
{
Uart_Printf("!!!Enter FIQ. %d\r\n", I_COUNT);
while(1) {
Delay(1000);
Delay(1000);
}//while
}
/*********************************************************************************/
extern void IRQ_Handler(void);
/*********************************************************************************/
void uHALr_InterruptRequestInit()
{
pISR_UNDEF= (unsigned) DebugUNDEF;
pISR_SWI= (unsigned) DebugSWI;
pISR_PABORT= (unsigned) DebugABORT;
pISR_DABORT= (unsigned) DebugABORT;
// pISR_RESERVED
pISR_IRQ= (unsigned) IRQ_Handler; //irq interrupt
pISR_FIQ= (unsigned) DebugFIQ;
SetISR_Interrupt(INT_TIMER1_OFFSET,OSTimeTick,NULL);
///////////////////////No use////////////////////////
pISR_ADC= (unsigned) BreakPoint;
pISR_RTC= (unsigned) BreakPoint;
pISR_UTXD1= (unsigned) BreakPoint;
pISR_UTXD0= (unsigned) BreakPoint;
pISR_SIO= (unsigned) BreakPoint;
pISR_IIC= (unsigned) BreakPoint;
pISR_URXD1= (unsigned) BreakPoint;
pISR_URXD0= (unsigned) BreakPoint;
//remove by eric rong// pISR_EINT67= (unsigned) BreakPoint;
pISR_WDT= (unsigned) BreakPoint;
pISR_TIMER3= (unsigned) BreakPoint;
pISR_TIMER2= (unsigned) BreakPoint;
pISR_TIMER1= (unsigned) BreakPoint;
// pISR_TIMER0= (unsigned) BreakPoint;
//remove by eric rong// pISR_UERR1= (unsigned) BreakPoint;
//remove by eric rong// pISR_UERR0= (unsigned) BreakPoint;
pISR_BDMA1= (unsigned) BreakPoint;
pISR_BDMA0= (unsigned) BreakPoint;
pISR_ZDMA1= (unsigned) BreakPoint;
pISR_ZDMA0= (unsigned) BreakPoint;
//remove by eric rong// pISR_EINT5= (unsigned) BreakPoint;
//remove by eric rong// pISR_EINT4= (unsigned) BreakPoint;
pISR_EINT3= (unsigned) BreakPoint;
pISR_EINT2= (unsigned) BreakPoint;
pISR_EINT1= (unsigned) BreakPoint;
pISR_EINT0= (unsigned) BreakPoint;
/////////////////////////////////////////////////////
}
/*********************************************************************************/
//Start system timer & enable the interrupt.
void uHALr_InstallSystemTimer(void)
{
//Non-vectored,IRQ enable,FIQ disable
rINTCON=0x5;
//Non maksed TIMER0 .
// rI_ISPC=BIT_TIMER1;
rINTMSK=~(BIT_TIMER1 | BIT_GLOBAL); //Default value=0x7ffffff
}//uHALr_InstallSystemTimer
/************************* General Library **********************
void Cache_Flush(void)
{
int i,saveSyscfg;
saveSyscfg=rSYSCFG;
rSYSCFG=SYSCFG_0KB;
for(i=0x10004000;i<0x10004800;i+=16)
{
*((int *)i)=0x0;
}
rSYSCFG=saveSyscfg;
}
************************* Timer ********************************/
void Timer_Start(int divider) //0:16us,1:32us 2:64us 3:128us
{
rWTCON=((MCLK/1000000-1)<<8)|(divider<<3);
rWTDAT=0xffff;
rWTCNT=0xffff;
// 1/16/(65+1),nRESET & interrupt disable
rWTCON=((MCLK/1000000-1)<<8)|(divider<<3)|(1<<5);
}
/*********************************************************************************/
int Timer_Stop(void)
{
rWTCON=((MCLK/1000000-1)<<8);
return (0xffff-rWTCNT);
}
void ARMTargetInit(void)
{
/////////////////////////////////////////////////////////////////
// rSYSCFG=crSYSCFG; // Using 8KB Cache//
// ChangePllValue(PLL_M,PLL_P,PLL_S);
Port_Init();
Uart_Init(0,115200);
#if UART_METHOD==2
Uart_Select(0);
#endif
Uart_Printf("\nBegain to run uC/OS-II!\n");
uHALr_InitInterrupts();
uHALr_InitTimers();
uHALr_InterruptRequestInit();
/////////////////////////////////////////////////////////////////
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -