aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorchrysn2012-10-29 14:44:37 +0100
committerchrysn2012-10-29 14:44:37 +0100
commita1f4c29872980f84a06c0bc610b1314c43187f06 (patch)
treef520fc88e1d8cdd4a3e7a44739829d0bda20c9c3 /scripts
parenta01e5c201bca79b9dc4fe4363d843f8c7dad5290 (diff)
parent1e88ad186fe362aeb8a6994d6d88775dc689ddfb (diff)
Merge branch 'efm32'
this adds support for energy micro's efm32 tiny gecko, gecko, leopard gecko and giant gecko series. also, the experimental libopencmsis is included in this branch, as it is required for full operation of the free energymicro standard library
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/irq2nvic_h20
1 files changed, 18 insertions, 2 deletions
diff --git a/scripts/irq2nvic_h b/scripts/irq2nvic_h
index 23e365d..d1a8a40 100755
--- a/scripts/irq2nvic_h
+++ b/scripts/irq2nvic_h
@@ -99,7 +99,19 @@ template_vector_nvic_c = '''\
{vectortableinitialization}
'''
-def convert(infile, outfile_nvic, outfile_vectornvic):
+template_cmsis_h = '''\
+/* This file is part of the libopencm3 project.
+ *
+ * It was generated by the irq2nvic_h script.
+ *
+ * These definitions bend every interrupt handler that is defined CMSIS style
+ * to the weak symbol exported by libopenmc3.
+ */
+
+{cmsisbends}
+'''
+
+def convert(infile, outfile_nvic, outfile_vectornvic, outfile_cmsis):
data = yaml.load(infile)
irq2name = list(enumerate(data['irqs']) if isinstance(data['irqs'], list) else data['irqs'].items())
@@ -114,9 +126,11 @@ def convert(infile, outfile_nvic, outfile_vectornvic):
data['isrprototypes'] = "\n".join('void WEAK %s_isr(void);'%name.lower() for name in irqnames)
data['isrpragmas'] = "\n".join('#pragma weak %s_isr = blocking_handler'%name.lower() for name in irqnames)
data['vectortableinitialization'] = ', \\\n '.join('[NVIC_%s_IRQ] = %s_isr'%(name.upper(), name.lower()) for name in irqnames)
+ data['cmsisbends'] = "\n".join("#define %s_IRQHandler %s_isr"%(name.upper(), name.lower()) for name in irqnames)
outfile_nvic.write(template_nvic_h.format(**data))
outfile_vectornvic.write(template_vector_nvic_c.format(**data))
+ outfile_cmsis.write(template_cmsis_h.format(**data))
def makeparentdir(filename):
try:
@@ -140,6 +154,7 @@ def main():
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')
+ cmsis = infile.replace('irq.yaml', 'irqhandlers.h').replace('/libopencm3/', '/libopencmsis/')
if remove:
if os.path.exists(nvic_h):
@@ -153,8 +168,9 @@ def main():
makeparentdir(nvic_h)
makeparentdir(vector_nvic_c)
+ makeparentdir(cmsis)
- convert(open(infile), open(nvic_h, 'w'), open(vector_nvic_c, 'w'))
+ convert(open(infile), open(nvic_h, 'w'), open(vector_nvic_c, 'w'), open(cmsis, 'w'))
if __name__ == "__main__":
main()