Skip to content
Snippets Groups Projects
irq.c 841 B
#include "irq.h"

void disable_irq()
{
    unsigned int ie, im;
    unsigned int Mask = ~1;

    /* disable peripheral interrupts in case they were enabled */
    asm volatile ("rcsr %0,ie":"=r"(ie));
    ie &= (~0x1);
    asm volatile ("wcsr ie, %0"::"r"(ie));

    /* disable mask-bit in im */
    asm volatile ("rcsr %0, im":"=r"(im));
    im &= Mask;
    asm volatile ("wcsr im, %0"::"r"(im));

}


void enable_irq()
{
    unsigned int ie, im;
    unsigned int Mask = 1;


    /* disable peripheral interrupts in-case they were enabled*/
    asm volatile ("rcsr %0,ie":"=r"(ie));
    ie &= (~0x1);
    asm volatile ("wcsr ie, %0"::"r"(ie));

    /* enable mask-bit in im */
    asm volatile ("rcsr %0, im":"=r"(im));
    im |= Mask;
    asm volatile ("wcsr im, %0"::"r"(im));

    ie |= 0x1;
    asm volatile ("wcsr ie, %0"::"r"(ie));
}