📄 traps.c
字号:
/* MShowTec - www.mshowtec.com
** msLinux tarps.c ver1.0
** 20051221 lmjx create limiao@mshowtec.com
**
*/
#define MSLINUX_TRAPS_C
#include "cpu_reg.h"
#include "traps.h"
#include "sched.h"
#include "align.h"
#include "kernel.h"
#define IRQ_STACK_SIZE (1025)
#define SWI_STACK_SIZE (1025)
unsigned char mslinux_irq_nesting = 0;
DEFINE_IRQ_STACK(stack,IRQ_STACK_SIZE);
unsigned char *mslinux_top_irq_stack = 0;
DEFINE_SWI_STACK(stack,SWI_STACK_SIZE);
unsigned char *mslinux_top_swi_stack = 0;
void mslinux_int_program()
{
}
char tty_str_buf[128],tty_buf[128],tty_cnt=0;
void mslinux_int_tty_tx()
{
}
void mslinux_int_tty_rx()
{
}
void mslinux_int_timer1()
{
*Timer1Clear = 0;
jiffies++;
do_timer();
}
void mslinux_int_timer2()
{
*Timer2Clear = 0;
}
void mslinux_int_dumy()
{
}
void(* const InterruptRoutTableIRQ[])(void) = {
mslinux_int_dumy,
mslinux_int_program,
mslinux_int_tty_rx,
mslinux_int_tty_tx,
mslinux_int_timer1,
mslinux_int_timer2,
0,
};
void mslinux_irq_handler()
{
volatile unsigned irq_status;
int irq_idx = 0;
int i = 0,b = 1;
irq_status = *IRQStatus;
for(i = 0; i<6;i++){
if(irq_status&b){
irq_idx = i;
break;
}
b <<= 1;
}
if(i == 6)
return;
//disable current int src
*IRQEnableClear = b;
InterruptRoutTableIRQ [irq_idx]();
*IRQEnableSet = (*IRQEnable)|b;
}
void (* trap_arm_irq)(void);
void trap_init(void)
{
mslinux_irq_nesting = 0;
mslinux_top_irq_stack = irq_stack+IRQ_STACK_SIZE-1;
mslinux_top_swi_stack = swi_stack+SWI_STACK_SIZE-1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -