📄 os_44b.c.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 + -