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

📄 interrupt.c

📁 RT-Thread是发展中的下一代微内核嵌入式实时操作系统
💻 C
字号:
/* * File      : interrupt.c * This file is part of RT-Thread RTOS * COPYRIGHT (C) 2006, RT-Thread Development Team * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * http://openlab.rt-thread.com/license/LICENSE * * Change Logs: * Date           Author       Notes * 2006-09-02     Vai          Nintendo DS version */#include <rtthread.h>#include "nds.h"#define MAX_HANDLERS	22/* * Enable IRQs */#define irq_enable()                    \	({                                  \		unsigned long temp;             \	__asm__ __volatile__(               \	"mrs	%0, cpsr\n"                 \    "bic	%0, %0, #128\n"             \    "msr	cpsr_c, %0"                 \	: "=r" (temp)                       \	:                                   \	: "memory", "cc");                  \	})/* * Disable IRQs */#define irq_disable()                   \	({                                  \		unsigned long temp;             \	__asm__ __volatile__(               \	"mrs	%0, cpsr\n"                 \    "orr	%0, %0, #128\n"             \    "msr	cpsr_c, %0"                 \	: "=r" (temp)                       \	:                                   \	: "memory", "cc");                  \	})extern rt_uint32_t rt_interrupt_nest;/* exception and interrupt handler table */rt_isr_handler_t isr_table[MAX_HANDLERS];rt_uint32_t rt_interrupt_from_thread, rt_interrupt_to_thread;rt_uint32_t rt_thread_switch_interrput_flag;/** * @addtogroup nds *//*@{*/void rt_hw_interrupt_handle(int vector){	rt_kprintf("Unhandled interrupt %d occured!!!\n", vector);}void rt_hw_interrupt_init(){    register int i;        /* ACK all interrupt */    *((volatile unsigned long *) NDS_IE) = 0;    /* init exceptions table */    for(i=0; i<MAX_HANDLERS; i++)    {        isr_table[i] = rt_hw_interrupt_handle;    }    /* init interrupt nest, and context in thread sp */    rt_interrupt_nest = 0;    rt_interrupt_from_thread = 0;    rt_interrupt_to_thread = 0;    rt_thread_switch_interrput_flag = 0;}void rt_hw_interrupt_mask(int vector){    *((volatile unsigned long *) NDS_IE) &= ~(0x1 << vector);}void rt_hw_interrupt_umask(int vector){    if (INTGLOBAL == vector)    {        *((volatile unsigned long *) NDS_IME) = 0x0001;        irq_enable();    }        *((volatile unsigned long *) NDS_IE) |= (0x1 << vector);}void rt_hw_interrupt_install(int vector, rt_isr_handler_t new_handler, rt_isr_handler_t *old_handler){	if(vector < MAX_HANDLERS)	{		if (old_handler != RT_NULL) *old_handler = isr_table[vector];		if (new_handler != RT_NULL) isr_table[vector] = new_handler;	}}void rt_hw_interrupt_umaskall (void){    /* global interrupt enable bit */    *((volatile unsigned long *) NDS_IME) = 0x0001;        irq_enable();    return;}/*@}*/

⌨️ 快捷键说明

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