You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
915 B
56 lines
915 B
/* |
|
* Copyright (C) 2014 Freie Universität Berlin |
|
* |
|
* This file is subject to the terms and conditions of the GNU Lesser |
|
* General Public License v2.1. See the file LICENSE in the top level |
|
* directory for more details. |
|
*/ |
|
|
|
/** |
|
* @ingroup cpu |
|
* @{ |
|
* |
|
* @file irq.c |
|
* @brief ISR related functions |
|
* |
|
* @author Kaspar Schleiser <kaspar@schleiser.de> |
|
* @author Oliver Hahm <oliver.hahm@inria.fr> |
|
* |
|
* @} |
|
*/ |
|
|
|
#include "irq.h" |
|
#include "cpu.h" |
|
|
|
unsigned int disableIRQ(void) |
|
{ |
|
unsigned int state; |
|
__asm__("mov.w r2,%0" : "=r"(state)); |
|
state &= GIE; |
|
|
|
if (state) { |
|
dINT(); |
|
} |
|
|
|
return state; |
|
} |
|
|
|
unsigned int enableIRQ(void) |
|
{ |
|
unsigned int state; |
|
__asm__("mov.w r2,%0" : "=r"(state)); |
|
state &= GIE; |
|
|
|
if (!state) { |
|
eINT(); |
|
} |
|
|
|
return state; |
|
} |
|
|
|
void restoreIRQ(unsigned int state) |
|
{ |
|
if (state) { |
|
eINT(); |
|
} |
|
}
|
|
|