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

📄 uhal.c

📁 武汉创维特ARM7实验箱的全部源代码
💻 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 + -