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

📄 uhal.c

📁 移植的arm内核芯片 s3c4510 的ucos-ii的源码
💻 C
字号:
#include <stdarg.h>
#include <string.h>
#include "uhal.h"
//#include "s3c4510b.h"

//#######################SLT#######################
//mclk 50000000
//66000000hz/4= 12500000
///16500000/100= 125000
// 1/125000*SEC==> SEC*125

//#define	_TICK	200				//  1/1000 sec
#define _TICK	100				//  1/100 sec
//#define _TICK	10				//  1/10 sec
//#define _CLOCK	(125*(1000/_TICK))

#define _CLOCK	(25000*(1000/_TICK))

//#define _CLOCK	0x17D7840		//25M


#define MAX_TBUF	2048
static char tbuf[MAX_TBUF]= {0, };		//for uHALr_printf

//for debugging
void BreakPoint(void);
void DebugUNDEF(void);
void DebugSWI(void);
void DebugABORT(void);
void DebugFIQ(void);


//timer interrupt handler routine
//extern void TickHandler(void);
extern void OSTimeTick (void);
extern void UART0RxIsr(void);

//for interrupt enable or disable
extern void ARMDisableInt(void);
extern void ARMEnableInt(void);

//***************************************************
//*Interrupt
//***************************************************
static void DummyIsr(void) {}
void (*InterruptHandlers[MAXHNDLRS])(void);

//***********************************************************************
//* InitIntHandlerTable: Initialize the interrupt handler table         *
//*     NOTE(S): This should be called during system initialization     *
//***********************************************************************
void InitIntHandlerTable(void)
{
	REG32 i;
 
	for (i = 0; i < MAXHNDLRS; i++)
    		InterruptHandlers[i] = DummyIsr;
}

//*********************************************************
//* SysSetInterrupt: Setup Interrupt Handler Vector Table *
//*********************************************************
void SysSetInterrupt(REG32 vector, void (*handler)())
{
	InterruptHandlers[vector] = handler;

}

//******************************
//*irq interrupt routine       *
//******************************
void	ISR_IrqHandler(REG32 vector)
{
       (*InterruptHandlers[vector])(); // Call interrupt service routine
}


/*** Called by ARMTargetInit() ***/
//disable memory management unit.S3C44B0X无MMU功能,函数为空
void uHALr_ResetMMU(void)
{
}//uHALrResetMMU

//Initialize UART that is used task.
void uHALr_InitUART(void)			
{
	UARTLCON0 = 0x03;
	UARTLCON1 = 0x03;
	
	UARTBRD0 = 0xA20;
	UARTBRD1 = 0xA20;
	
	UARTCONT0 = 0x09;
	UARTCONT1 = 0x09;
}



//Initialze interrupts.
void uHALr_InitInterrupts(void)	//must modify
{
	// Non-vectored,IRQ disable,FIQ disable    
//    rINTCON=0x0;

	// All=IRQ mode
//    rINTMOD=0x0;	  
	INTMODE = 0x0;

	// All interrupt is masked.
//    rINTMSK=BIT_GLOBAL;	  
	INTMASK = ALL_INTR_MASK;
    
    
	//set interrupt vector routine
//	pISR_RESET				//reserved
	pISR_ArmUndef= (unsigned) DebugUNDEF;
	pISR_ArmSwi= (unsigned) DebugSWI;
	pISR_ArmPre= (unsigned) DebugABORT;
	pISR_ArmAbort= (unsigned) DebugABORT;
	pISR_ArmRev= (unsigned) BreakPoint;	//not used
//	pISR_ArmIrq= (unsigned) 0;			//reserved
	pISR_ArmFiq= (unsigned) DebugFIQ;
/*	
	pISR_PRIOTY0 = (unsigned) BreakPoint;
	pISR_PRIOTY1 = (unsigned) BreakPoint;
	pISR_PRIOTY2 = (unsigned) BreakPoint;
	pISR_PRIOTY3 = (unsigned) BreakPoint;
	pISR_PRIOTY4 = (unsigned) BreakPoint;
	pISR_PRIOTY5 = (unsigned) BreakPoint;
	pISR_PRIOTY6 = (unsigned) BreakPoint;
	pISR_PRIOTY7 = (unsigned) BreakPoint;
	pISR_PRIOTY8 = (unsigned) BreakPoint;
	pISR_PRIOTY9 = (unsigned) BreakPoint;
	pISR_PRIOTY10 = (unsigned) BreakPoint;
	pISR_PRIOTY11 = (unsigned) BreakPoint;
	pISR_PRIOTY12 = (unsigned) BreakPoint;
	pISR_PRIOTY13 = (unsigned) BreakPoint;
	pISR_PRIOTY14 = (unsigned) BreakPoint;
	pISR_PRIOTY15 = (unsigned) BreakPoint;
	pISR_PRIOTY16 = (unsigned) BreakPoint;
	pISR_PRIOTY17 = (unsigned) BreakPoint;
	pISR_PRIOTY18 = (unsigned) BreakPoint;
	pISR_PRIOTY19 = (unsigned) BreakPoint;
	pISR_PRIOTY20 = (unsigned) BreakPoint;
*/
	InitIntHandlerTable();
	//handler setting
//	pISR_PRIOTY10 = (unsigned) TickHandler;
//	pISR_PRIOTY10 = (unsigned) OSTimeTick;
	SysSetInterrupt(nTIMER0_INT,OSTimeTick);
	SysSetInterrupt(nUART0_RX_ERR_INT,UART0RxIsr);

}//uHALr_InitInterrupts



//Initialize timer that is used OS.
void uHALr_InitTimers(void)			//must modify
{
	//dead zone=0, pre0= 100
//	rTCFG0= 0x00000064;
	//all interrupt, mux0= 1/4
//	rTCFG1= 0x00000001;
	INTMASK = ((unsigned int)INTMASK)&(~(BIT_GLOBAL_INTR|BIT_TIMER0_INTR));

	//set T0 count
//	rTCNTB0= _CLOCK;
	TDATA0 = _CLOCK;
	TCNT0 = _CLOCK;
	TDATA1 = _CLOCK;
	TCNT1 = _CLOCK;

	//update T0
//    rTCON= 0x00000002;

	//T0,auto reload and start
//	rTCON= 0x00000009;
	TMOD = 0x00000001;
}//uHALr_InitTimers

/*** Called by ARMTargetStart() ***/
//Request the system timer.
//return value 1:success   0:fail
int uHALr_RequestSystemTimer(void *tick, const unsigned char *str)
{
	return 1;
}//uHALr_RequestSystemTimer


//Start system timer & enable the interrupt.
void uHALr_InstallSystemTimer(void)			//must modify
{
	//Non-vectored,IRQ enable,FIQ disable 
//    rINTCON=0x5;
	INTMODE = ((unsigned int)INTMODE)&(~BIT_TIMER0_INTR);

	//Non maksed TIMER0
	//#######################SLT##############################
//	rINTMSK=~( BIT_TIMER0 | BIT_GLOBAL);	//Default value=0x7ffffff
	INTMASK = ((unsigned int)INTMASK)&(~(BIT_UART0_RXINTR|BIT_TIMER0_INTR|BIT_GLOBAL_INTR));
}//uHALr_InstallSystemTimer

//////////////////////////////////////////////////////////////////
//routines for debugging
//////////////////////////////////////////////////////////////////
void OutDebug(unsigned int num)
{
//	uHALr_printf("\r\n***STACK***:%d\r\n", num);
}//OutDebug

void BreakPoint(void)
{
/*	char m=200;
//	uHALr_printf("!!!Enter break point.");	

	while(m) {
		Led_Display(0xf);
		Delay(1000);
		Led_Display(0x0);
		Delay(1000);
		m--;
	}//while
*/	
}//BreakPoint


//extern 
int I_COUNT= 0;		//作为控制用
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 + -