www.pudn.com > 44B0X_uCOS276.rar > Target.c


#include "target.h" 
#include "ucos_ii.h"               /* uC/OS interface */ 
 
extern OS_EVENT *Key_Mbox; 
extern OS_EVENT *OK_Mbox; 
 
/******************************************************************************************************** 
 * 外部中断4、5、6、7的中断处理 																		* 
 ********************************************************************************************************/ 
volatile char which_int=0; 
void EInt0Isr(void) 
{ 
	Uart_Printf("EINT0"); 
	rI_ISPC |= BIT_EINT0; 
} 
void EInt4567Isr(void) 
{ 
/*    which_int = rEXTINTPND; 
    rEXTINTPND = 0xf;		//clear EXTINTPND reg.		 
    rI_ISPC |= BIT_EINT4567;	//clear pending_bit 
 
	Delay(500);		//延时若干个100us,消除抖动 
	rPCONG &= 0x00ff; 
	if( (rPDATG&0xf0) != 0xf0) 
	{ 
	    switch(which_int) 
	    { 
			case 1: 
			{ 
				OSMboxPost(Key_Mbox, (void *)4); 
			} 
			    break; 
			case 2: 
			{ 
				OSMboxPost(Key_Mbox, (void *)5); 
			} 
			    break; 
			case 4: 
			{ 
				OSMboxPost(OK_Mbox, (void *)6); 
			} 
			    break; 
			case 8: 
			{ 
				OSMboxPost(Key_Mbox, (void *)7); 
			} 
			    break; 
			default : 
				break; 
	    } 
	} 
 
	//while((rPDATG&0xf0) != 0xf0);		//按键没有松开就一直等待 
    rPCONG |= 0xff00;		//GPG4、5、6、7设为中断引脚 
*/ 
} 
 
/******************************************************************************************************** 
 * ARMTargetInit																						* 
 *																										* 
 * Description: This function initialize an ARM Target board											* 
 *																										* 
 * Argument   : none    																				* 
 ********************************************************************************************************/ 
void ARMTargetInit(void)  
{ 
	//配置Cache 
   	rSYSCFG = SYSCFG_8KB ;				//使用8K字节的指令缓存 
	rNCACHBE0=((unsigned int)(Non_Cache_End>>12)<<16)|(Non_Cache_Start>>12); 
	 
//	Port_Init();					//初始化端口 
	 
//	Delay( 200 ) ;		//delay some time 
//	Led_Set( 0x0f );		//LED全亮 
//	Delay( 500 ) ;		//delay some time 
//	Led_Set( 0x00 );		//LED全亮 
	 
//	ChangePllValue( 58, 3, 1 ) ;			//设置CPU频率为66M 
 
	Uart_Init( 0, 115200 );			//设置串口0的速率为115200bps 
	Uart_Select(0);					//选择串口0 
 
	ARMInitInterrupts();			//初始化中断,设置中断服务程序 
	 
	Delay(0);						//调整延时 
} 
 
 
/******************************************************************************************************** 
 * ARMTargetStart																						* 
 *																										* 
 * Description: This function start the ARM target running												* 
 *																										* 
 * Argument   : none																					* 
 ********************************************************************************************************/ 
void ARMTargetStart(void) { 
	 
	ARMInitTimers();				//配置时钟0相关寄存器 
	ARMInstallSystemTimer();		//时钟0中断使能 
} 
 
/******************************************************************************************************** 
 * 中断初始化                   																		* 
 ********************************************************************************************************/ 
void ARMInitInterrupts(void) 
{ 
	// Non-vectored,IRQ disable,FIQ disable     
	rINTCON = 0x5 ;	   
 
	// All=IRQ mode 
	rINTMOD = 0x0 ;	   
 
	// All interrupt is masked. 
//	rINTMSK = BIT_GLOBAL;	   
 
	//set interrupt vector routine 
//	pISR_RESET					//reserved 
	pISR_UNDEF = (unsigned) DebugUNDEF; 
	pISR_SWI = (unsigned) DebugSWI; 
	pISR_PABORT = (unsigned) DebugPABORT; 
	pISR_DABORT = (unsigned) DebugDABORT; 
//	pISR_RESERVED = (unsigned) BreakPoint;		//not used 
//	pISR_IRQ = (unsigned) 0;			//reserved 
	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) OSEINT4567ISR; 
	pISR_EINT3= (unsigned) BreakPoint; 
	pISR_EINT2= (unsigned) BreakPoint; 
	pISR_EINT1= (unsigned) BreakPoint; 
	pISR_EINT0= (unsigned) OSEINT0ISR; 
//pISR_EINT0= (unsigned)EInt0Isr; 
	pISR_TIMER0= (unsigned) OSTickISR; 
	 
} 
 
//******************************************************************************************************* 
int ARMRequestSystemTimer(void *tick, const unsigned char *str)  
{ 
	return 1; 
} 
 
/******************************************************************************************************** 
 * Initialize timer that is used OS																		* 
 ********************************************************************************************************/ 
void ARMInitTimers(void) 
{ 
	rTCFG0=0x20;  // 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; 
} 
 
/******************************************************************************************************** 
 * start system timer0																					* 
 ********************************************************************************************************/ 
void ARMStartTimer(void) 
{ 
	rTCON = 0x00000009;		//autoreload and start 
} 
 
/******************************************************************************************************** 
 * enable the interrupt																					* 
 ********************************************************************************************************/ 
void ARMInstallSystemTimer(void) 
{ 
	//Non-vectored,IRQ enable,FIQ disable  
    rINTCON=0x5; 
 
 
   rINTMOD=0x0;	  // All=IRQ mode 
   	rPCONG=0x57ff;  //PortG[0~4] EINT MODE,PortG[5~7] OU 
//    pISR_EINT0=(int)Eint0Isr;//设置外部0的中断向量 
    rEXTINTPND=0xf;		//clear EXTINTPND reg. 
    rI_ISPC= BIT_EINT0;	//clear pending_bit 
 
 
	//Non maksed TIMER0 
	rINTMSK=~( BIT_TIMER0 | BIT_GLOBAL | BIT_EINT0);	//Default value=0x7ffffff 
} 
//******************************************************************************************************* 
void BreakPoint(void) 
{ 
	Uart_Printf("Enter BreakPoint"); 
 
	while(1) 
	{ 
		Led_Set( 0xf ) ;		Delay( 1000 ) ; 
		Led_Set( 0x0 ) ;		Delay( 1000 ) ; 
	} 
} 
 
//******************************************************************************************************* 
void DebugUNDEF(void) 
{ 
	Uart_Printf("Enter DebugUNDEF"); 
 
	while(1) 
	{ 
		Led_Set( 0xf ) ;		Delay( 1000 ) ; 
		Led_Set( 0x0 ) ;		Delay( 1000 ) ; 
	} 
} 
 
//******************************************************************************************************* 
void DebugSWI(void) 
{ 
	Uart_Printf("Enter DebugSWI"); 
 
	while(1) 
	{ 
		Led_Set( 0xf ) ;		Delay( 1000 ) ; 
		Led_Set( 0x0 ) ;		Delay( 1000 ) ; 
	} 
} 
 
//******************************************************************************************************* 
void DebugPABORT(void) 
{ 
	Uart_Printf("Enter DebugPABORT"); 
 
	while(1) 
	{ 
		Led_Set( 0xf ) ;		Delay( 1000 ) ; 
		Led_Set( 0x0 ) ;		Delay( 1000 ) ; 
	} 
} 
 
//******************************************************************************************************* 
void DebugDABORT(void) 
{ 
	Uart_Printf("Enter DebugDABORT"); 
 
	while(1) 
	{ 
		Led_Set( 0xf ) ;		Delay( 1000 ) ; 
		Led_Set( 0x0 ) ;		Delay( 1000 ) ; 
	} 
} 
 
//******************************************************************************************************* 
void DebugFIQ(void) 
{ 
	Uart_Printf("Enter DebugFIQ"); 
 
	while(1) 
	{ 
		Led_Set( 0xf ) ;		Delay( 1000 ) ; 
		Led_Set( 0x0 ) ;		Delay( 1000 ) ; 
	} 
} 
//*******************************************************************************************************