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

📄 traps.c

📁 msLinux v1.0 可以在arm ads 下仿真运行的linux
💻 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 + -