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

📄 os_44b.c.svn-base

📁 lwip协议在arm7+uCos系统上的移植
💻 SVN-BASE
字号:
/****************************************************************************
  文件名称:OS_44b.c
  版本号:	1.0
  日期:	2006-06-5
  说明:	包含uCOSII移植要44b0x上的部分代码。

  修改历史:--
****************************************************************************/

#include "INCLUDES.H"

void UCOS_IRQHandler(void); //import from the OS_CPU_A.S
//add some other exception handler	//sdy060709
void Udef_Handler(void);
void Swi_Handler(void);
void Pabort_Handler(void);
void Dabort_Handler(void);
void OSReset(void);
void all_light(void);
//exception handler debug	//sdy060709
#define EXCEPT_DEBUG 0


/****************************************************************************
  函数名称:Timer5Interrupt()
  说明:	Timer5的中断响应函数,在这里用作了OS的时钟服务
  调用函数:OSTimeTick()
  输入参数:无
  输出参数:无
****************************************************************************/
static void Timer5Interrupt()
{
    rI_ISPC=BIT_TIMER5;                  
    OSTimeTick();
}


/****************************************************************************
  函数名称:OSTimeInit()
  说明:	Timer的初始化,使用了Timer5
  调用函数:无
  输入参数:TicksPerSec OS每秒的计数值
  输出参数:无
****************************************************************************/
void OSTimeInit(U32 TicksPerSec)
{
	#if OS_CRITICAL_METHOD == 3
		OS_CPU_SR  cpu_sr;
	#endif

    OS_ENTER_CRITICAL();

	rTCFG0=0x00fa0000;	// prescaler2 = 250
	rTCFG1=0x00200000;	// 所有中断, mux5=1/8
	
	rTCNTB5=(U16)(MCLK/2000/TicksPerSec);

	rTCON=0x02000000;	// 更新T5
	rTCON=0x05000000;	// T5=自动载入,开始
	
	rINTMSK&=~(BIT_GLOBAL|BIT_TIMER5);	// 启动时钟中断
	pISR_TIMER5 = (U32)Timer5Interrupt;
	rI_ISPC=BIT_TIMER5;
    OS_EXIT_CRITICAL();
}

/****************************************************************************
  函数名称:IRQInit()
  说明:	中断的初始化,所有的中断都由OS处理
  调用函数:无
  输入参数:无
  输出参数:无
****************************************************************************/
void IRQInit(void)
{
	rINTCON = 0x5;		// 非向量模式,使能IRQ,禁止FIQ
	rINTMOD = 0x0;		// 所有中断为IRQ模式
	
	pISR_IRQ = (U32)UCOS_IRQHandler;

	//add some other exception handler	//sdy060709
	pISR_UNDEF = (U32)Udef_Handler;
	pISR_SWI = (U32)Swi_Handler;
	pISR_PABORT	 = (U32)Pabort_Handler;
	pISR_DABORT = (U32)Dabort_Handler;
	
//	pISR_EINT1 = (U32)ne2k_isr; //nothingbn 06_03_21 move to n2k_init()
	
	rINTMSK  = 0x07ffffff;	
}

/****************************************************************************
  函数名称:C_IRQHandler()
  说明:	中断处理函数,找出中断源,调用相应的服务函数
  调用函数:无
  输入参数:无
  输出参数:无
****************************************************************************/
void C_IRQHandler(void)
{
        U32 temp,i;
        temp=rI_ISPR;
        if(temp==0) return;
        for(i=0;i<26;i++){
        	if(temp&0x1==1){
        		break;
        	}
        	else{
        		temp=temp>>1;
        	}
        }
		if(i==26){
        	return;
        }
        temp=i<<2;
        ((void(*)(void))(*((U32 *)(_ISR_STARTADDRESS+0x20+temp))))();
}

/****************************************************************************
  函数名称:Udef_Handler(void)
  说明:
  调用函数:无
  输入参数:无
  输出参数:无
****************************************************************************/
void Udef_Handler(void)
{
	#if EXCEPT_DEBUG == 1
	static int udef_counter = 0;
	udef_counter++;
	#endif
	
	
	all_light();
}

/****************************************************************************
  函数名称:Swi_Handler(void)
  说明
  调用函数:无
  输入参数:无
  输出参数:无
****************************************************************************/
void Swi_Handler(void)
{
	#if EXCEPT_DEBUG == 1
	static int swi_counter = 0;
	swi_counter++;
	#endif
	
	
	all_light();
}

/****************************************************************************
  函数名称:Pabort_Handler(void)
  说明:
  调用函数:无
  输入参数:无
  输出参数:无
****************************************************************************/
void Pabort_Handler(void)
{
	#if EXCEPT_DEBUG == 1
	static int pabort_counter = 0;
	pabort_counter++;
	#endif
	
	
	all_light();
}

/****************************************************************************
  函数名称:Dabort_Handler(void)
  说明:
  调用函数:无
  输入参数:无
  输出参数:无
****************************************************************************/
void Dabort_Handler(void)
{
	#if EXCEPT_DEBUG == 1
	static int dabort_counter = 0;
	dabort_counter++;
	#endif
	
	
	all_light();
}

/****************************************************************************
  函数名称:all_light(void)
  说明:
  调用函数:无
  输入参数:无
  输出参数:无
****************************************************************************/
void all_light(void)
{
	rPDATC = rPDATC | 0xf000;
	while(1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -