From c01594f9fd63dd4c15a6a3dcaf85e32ad8ef3764 Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Mon, 21 May 2012 19:52:41 +0200 Subject: [PATCH] Common interrupt numbers --- common/interrupt.h | 8 ++++++++ software/bios/isr.c | 4 ++-- software/include/hw/interrupts.h | 23 ----------------------- software/libbase/uart.c | 4 ++-- top.py | 10 +++++++--- 5 files changed, 19 insertions(+), 30 deletions(-) create mode 100644 common/interrupt.h delete mode 100644 software/include/hw/interrupts.h diff --git a/common/interrupt.h b/common/interrupt.h new file mode 100644 index 00000000..a5ecd606 --- /dev/null +++ b/common/interrupt.h @@ -0,0 +1,8 @@ +#ifndef __INTERRUPT_H +#define __INTERRUPT_H + +#define UART_INTERRUPT 0 +#define TIMER0_INTERRUPT 1 +#define MINIMAC_INTERRUPT 2 + +#endif /* __INTERRUPT_H */ diff --git a/software/bios/isr.c b/software/bios/isr.c index 4257d878..400de233 100644 --- a/software/bios/isr.c +++ b/software/bios/isr.c @@ -15,8 +15,8 @@ * along with this program. If not, see . */ -#include #include +#include #include #include @@ -27,6 +27,6 @@ void isr(void) irqs = irq_pending() & irq_getmask(); - if(irqs & IRQ_UART) + if(irqs & (1 << UART_INTERRUPT)) uart_isr(); } diff --git a/software/include/hw/interrupts.h b/software/include/hw/interrupts.h deleted file mode 100644 index 2f48cee2..00000000 --- a/software/include/hw/interrupts.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Milkymist SoC (Software) - * Copyright (C) 2007, 2008, 2009, 2010 Sebastien Bourdeauducq - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, version 3 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#ifndef __HW_INTERRUPTS_H -#define __HW_INTERRUPTS_H - -#define IRQ_UART (0x00000001) /* 0 */ - -#endif /* __HW_INTERRUPTS_H */ diff --git a/software/libbase/uart.c b/software/libbase/uart.c index e4e87ad6..76049834 100644 --- a/software/libbase/uart.c +++ b/software/libbase/uart.c @@ -18,7 +18,7 @@ #include #include #include -#include +#include /* * Buffer sizes must be a power of 2 so that modulos can be computed @@ -121,7 +121,7 @@ void uart_init(void) CSR_UART_EV_ENABLE = UART_EV_TX | UART_EV_RX; mask = irq_getmask(); - mask |= IRQ_UART; + mask |= UART_INTERRUPT; irq_setmask(mask); } diff --git a/top.py b/top.py index ae9e5ec7..53b4c04d 100644 --- a/top.py +++ b/top.py @@ -63,6 +63,10 @@ def csr_offset(name): assert((base >= 0xe0000000) and (base <= 0xe0010000)) return (base - 0xe0000000)//0x800 +interrupt_macros = get_macros("common/interrupt.h") +def interrupt_n(name): + return int(interrupt_macros[name + "_INTERRUPT"], 0) + version = get_macros("common/version.h")["VERSION"][1:-1] def get(): @@ -130,9 +134,9 @@ def get(): # Interrupts # interrupts = Fragment([ - cpu0.interrupt[0].eq(uart0.events.irq), - cpu0.interrupt[1].eq(timer0.events.irq), - cpu0.interrupt[2].eq(minimac0.events.irq) + cpu0.interrupt[interrupt_n("UART")].eq(uart0.events.irq), + cpu0.interrupt[interrupt_n("TIMER0")].eq(timer0.events.irq), + cpu0.interrupt[interrupt_n("MINIMAC")].eq(minimac0.events.irq) ]) # -- 2.30.2