📄 uhal.c
字号:
/*
* File: uhal.c
*
* uC/OS Real-time multitasking kernel port for the ARM processor.
*
* hard related layerof eb44b0 board.
*
* Created by cooljet (www.cvtech.com.cn)
*
*/
#include <stdarg.h>
#include <string.h>
#include "uhal.h"
#include "44b.h"
/* for uHALr_printf */
#define MAX_TBUF 2048
static char print_buf[MAX_TBUF]= {0, };
int I_COUNT= 0;
/* for debugging */
void BreakPoint(void);
void DebugUNDEF(void);
void DebugSWI(void);
void DebugABORT(void);
void DebugFIQ(void);
/* utilities */
void Uart_SendByte(int data);
/* timer interrupt handler routine */
extern void OSTickISR(void);
/* for interrupt enable or disable */
extern void ARMDisableInt(void);
extern void ARMEnableInt(void);
//Output through LCD or serial port to print information.
extern int vsprintf(const char *format, ...);
int UART_Send_String( unsigned char * command, int command_Len )
{
int loopcnt=0;
for(loopcnt=0;loopcnt<command_Len ;loopcnt++)
{
while((rUFSTAT0 & 0x2f0));
rUTXH0 = command[loopcnt];
}
}
int uHALr_printf(const char *format, ...)
{
va_list v_list;
char *ptr;
int i= 0;
ARMDisableInt();
va_start(v_list, format); // Initialize variable arguments.
vsprintf(print_buf, format, v_list );
va_end(v_list);
ptr= print_buf;
UART_Send_String(ptr, strlen(ptr));
ARMEnableInt();
return 1;
}
void (*pre_isr)(void);
void *(*post_isr)(void);
void uHALir_DefineIRQ(void *is, void *iq, void *n)
{
pre_isr= (void (*)(void))is;
post_isr= (void *(*)(void))iq;
}
void uHALr_InitInterrupts(void)
{
/* Non-vectored,IRQ enable,FIQ enable */
rINTCON=0x0;
/* All=IRQ mode */
rINTMOD=0x0;
/* All interrupt is masked. */
rINTMSK=0x7ffffff/*BIT_GLOBAL*/;
//set interrupt vector routine
pISR_UNDEF= (unsigned) DebugUNDEF;
pISR_SWI= (unsigned) DebugSWI;
pISR_PABORT= (unsigned) DebugABORT;
pISR_DABORT= (unsigned) DebugABORT;
pISR_RESERVED= (unsigned) BreakPoint; //not used
pISR_FIQ= (unsigned) DebugFIQ;
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;
pISR_TIMER5= (unsigned) BreakPoint;
pISR_TIMER4= (unsigned) BreakPoint;
pISR_TIMER3= (unsigned) BreakPoint;
pISR_TIMER2= (unsigned) BreakPoint;
pISR_TIMER1= (unsigned) BreakPoint;
pISR_TIMER0= (unsigned) BreakPoint;
pISR_UERR01= (unsigned) BreakPoint;
pISR_WDT= (unsigned) BreakPoint;
pISR_BDMA1= (unsigned) BreakPoint;
pISR_BDMA0= (unsigned) BreakPoint;
pISR_ZDMA1= (unsigned) BreakPoint;
pISR_ZDMA0= (unsigned) BreakPoint;
pISR_TICK= (unsigned) BreakPoint;
pISR_EINT4567= (unsigned) BreakPoint;
pISR_EINT3= (unsigned) BreakPoint;
pISR_EINT2= (unsigned) BreakPoint;
pISR_EINT1= (unsigned) BreakPoint;
pISR_EINT0= (unsigned) BreakPoint;
/* handler setting */
pISR_TIMER0= (unsigned) OSTickISR;
}
void uHALr_InitTimers(void)
{
rTCFG0=0x0; // prescaler=0,means "1" devider the same as timer0
rTCFG1=0x44; //timer0,1 is 1/32, else are 1/2, devider the same as timer0
rTCNTB0=0x493E; //10ms
rTCNTB1=0x493E0; //10ms
//update T0
rTCON= 0x00000202;
//T0,auto reload and start
rTCON= 0x00000009;
}
void uHALr_InstallSystemTimer(void)
{
//Non-vectored,IRQ enable,FIQ disable
rINTCON=0x5;
//Non maksed TIMER0
rINTMSK=~( BIT_TIMER0 | BIT_GLOBAL); //Default value=0x7ffffff
}
void OutDebug(unsigned int num)
{
uHALr_printf("***STACK***:%d\r\n", num);
}
void BreakPoint(void)
{
uHALr_printf("!!!Enter break point.");
while(1)
{
}
}
void DebugUNDEF(void)
{
uHALr_printf("!!!Enter UNDEFINED. %d\r\n", I_COUNT);
BreakPoint();
}
void DebugSWI(void)
{
uHALr_printf("!!!Enter SWI. %d\r\n", I_COUNT);
BreakPoint();
}
void DebugABORT(void)
{
uHALr_printf("!!!Enter ABORT %d\r\n", I_COUNT);
BreakPoint();
}
void DebugFIQ(void)
{
uHALr_printf("!!!Enter FIQ. %d\r\n", I_COUNT);
BreakPoint();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -