aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile8
-rw-r--r--include/libopencm3/efm32/tinygecko/Makefile2
-rw-r--r--lib/cm3/vector.c2
-rw-r--r--lib/dispatch/vector_nvic.c19
-rwxr-xr-xscripts/irq2nvic_h14
5 files changed, 35 insertions, 10 deletions
diff --git a/Makefile b/Makefile
index 492b618..76c302d 100644
--- a/Makefile
+++ b/Makefile
@@ -39,7 +39,13 @@ all: build
build: lib examples
-lib:
+generatedheaders:
+ @printf " UPDATING HEADERS\n"
+ $(Q)for yamlfile in `find -name 'irq.yaml'`; do \
+ ./scripts/irq2nvic_h $$yamlfile ; \
+ done
+
+lib: generatedheaders
$(Q)for i in $(addprefix $@/,$(TARGETS)); do \
if [ -d $$i ]; then \
printf " BUILD $$i\n"; \
diff --git a/include/libopencm3/efm32/tinygecko/Makefile b/include/libopencm3/efm32/tinygecko/Makefile
deleted file mode 100644
index 4ac5347..0000000
--- a/include/libopencm3/efm32/tinygecko/Makefile
+++ /dev/null
@@ -1,2 +0,0 @@
-nvic.h: irq.yaml
- ./irq2nvic_h
diff --git a/lib/cm3/vector.c b/lib/cm3/vector.c
index e0c2972..a6d2e93 100644
--- a/lib/cm3/vector.c
+++ b/lib/cm3/vector.c
@@ -23,7 +23,7 @@
/* load optional platform dependent initialization routines */
#include "../dispatch/vector.c"
/* load the weak symbols for IRQ_HANDLERS */
-#include <libopencm3/dispatch/vector_nvic.h>
+#include "../dispatch/vector_nvic.c"
#define WEAK __attribute__ ((weak))
diff --git a/lib/dispatch/vector_nvic.c b/lib/dispatch/vector_nvic.c
new file mode 100644
index 0000000..fc5fdd2
--- /dev/null
+++ b/lib/dispatch/vector_nvic.c
@@ -0,0 +1,19 @@
+#if defined(STM32F1)
+# include "../stm32/f1/vector_nvic.c"
+#elif defined(STM32F2)
+# include "../stm32/f2/vector_nvic.c"
+#elif defined(STM32F4)
+# include "../stm32/f4/vector_nvic.c"
+
+#elif defined(TINYGECKO)
+# include "../efm32/tinygecko/vector_nvic.c"
+
+#elif defined(LPC43XX)
+# include "../lpc43xx/vector_nvic.c"
+
+#else
+# warning"no chipset defined; user interrupts are disabled"
+
+#define IRQ_HANDLERS
+
+#endif
diff --git a/scripts/irq2nvic_h b/scripts/irq2nvic_h
index fc5e571..92d63b8 100755
--- a/scripts/irq2nvic_h
+++ b/scripts/irq2nvic_h
@@ -65,7 +65,7 @@ template_nvic_h = '''\
#endif /* {includeguard} */
'''
-template_vector_nvic_h = '''\
+template_vector_nvic_c = '''\
/* This file is part of the libopencm3 project.
*
* It was generated by the irq2nvic_h script.
@@ -110,13 +110,15 @@ def convert(infile, outfile_nvic, outfile_vectornvic):
data['vectortableinitialization'] = ', \\\n '.join('[NVIC_%s_IRQ] = %s_isr'%(name.upper(), name.lower()) for name in irqnames)
outfile_nvic.write(template_nvic_h.format(**data))
- # FIXME: the vector_nvic.h file could just as well be a vector_nvic.c file
- # in lib/, but that'd spread this mechanism over the whole library; just
- # needs some thingking over
- outfile_vectornvic.write(template_vector_nvic_h.format(**data))
+ outfile_vectornvic.write(template_vector_nvic_c.format(**data))
def main():
- convert(open('irq.yaml'), open('nvic.h', 'w'), open('vector_nvic.h', 'w'))
+ infile = sys.argv[1]
+ if not infile.startswith('./include/libopencm3/') or not infile.endswith('/irq.yaml'):
+ raise ValueError("Arguent must match ./include/libopencm3/**/irq.yaml")
+ nvic_h = infile.replace('irq.yaml', 'nvic.h')
+ vector_nvic_c = infile.replace('./include/libopencm3/', './lib/').replace('irq.yaml', 'vector_nvic.c')
+ convert(open(infile), open(nvic_h, 'w'), open(vector_nvic_c, 'w'))
if __name__ == "__main__":
main()