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

📄 复件 uhal.c

📁 在S3C44b0上移植ucos并实现哲学家就餐问题的演示
💻 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 + -