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

📄 os_ep9302.c

📁 ucos在EP9302上的移植,运行正常,欢迎使用.
💻 C
字号:
/****************************************************************************
  文件名称:OS_EP9302.c
  版本号:	1.0
  日期:	2007-03-18
  说明:	包含uCOSII移植到EP9302上的部分代码。

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

#include "INCLUDES.H"
#include "OS_EP9302.h"

void UCOS_IRQHandler(void); //import from the OS_CPU_A.S


/****************************************************************************
  函数名称:IRQInit()
  说明:	中断的初始化,所有的中断都由OS处理
  调用函数:无
  输入参数:无
  输出参数:无
****************************************************************************/
void IRQInit(void)
{
	//EP9302_VIC1IntEnable=0x00000000;    //禁止所有中断
	EP9302_VIC1IntSelect=0x00000000;    //选择所用中断为IRQ中断   
	pISR_IRQ = (INT32U)UCOS_IRQHandler; //安装中断入口
	
}


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

/****************************************************************************
  函数名称:Timer1Interrupt()
  说明:	Timer1的中断响应函数,在这里用作了OS的时钟服务
  调用函数:OSTimeTick()
  输入参数:无
  输出参数:无
****************************************************************************/
static void Timer1Interrupt()
{   
	EP9302_Timer1Clear=0x0;    //clear the timer interrupt flay               
    OSTimeTick();
}


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

//	U32 temp,temp1;
	
    OS_ENTER_CRITICAL();

	EP9302_VIC1VecAddr=0x00000000;
//  temp=EP9302_VIC1IRQStatus;

	EP9302_Timer1load=(INT16U)(2000);
    EP9302_Timer1control=0x000000c0;
    EP9302_Timer1Clear=0x00000000;

	EP9302_VIC1IntSelect=0x00000000;
	EP9302_VIC1IntEnClear=0x07f7ffff;

	EP9302_VIC1IntEnable=0x00000010;	// 启动时钟中断
//	temp=EP9302_Timer1Value;
//	temp=EP9302_VIC1IRQStatus;
//	temp=EP9302_VIC1IRQStatus;
	
	pISR_TC1OI = (INT32U)Timer1Interrupt;
	
//	while(temp==0){
//	temp=EP9302_VIC1IRQStatus;
//	}
//	temp1=EP9302_VIC1VecAddr;
//	EP9302_VIC1VecAddr=temp1;
	
//	temp1=EP9302_VIC1DefVectAddr;
//	EP9302_Timer1Clear=temp1;
	
//	temp=EP9302_VIC1IRQStatus;
    OS_EXIT_CRITICAL();
    
}


⌨️ 快捷键说明

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