📄 os_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 + -