diff --git a/Makefile b/Makefile index 654e5ab3..e0f8e01c 100644 --- a/Makefile +++ b/Makefile @@ -31,7 +31,7 @@ TARGETS ?= stm32/f0 stm32/f1 stm32/f2 stm32/f3 stm32/f4 stm32/f7 \ stm32/l0 stm32/l1 stm32/l4 \ lpc13xx lpc17xx lpc43xx/m4 lpc43xx/m0 \ lm3s lm4f \ - efm32/tg efm32/g efm32/lg efm32/gg efm32/hg \ + efm32/tg efm32/g efm32/lg efm32/gg efm32/hg efm32/wg \ sam/3a sam/3n sam/3s sam/3u sam/3x sam/4l \ sam/d \ vf6xx diff --git a/include/libopencm3/dispatch/nvic.h b/include/libopencm3/dispatch/nvic.h index 62a6be46..67e318a7 100644 --- a/include/libopencm3/dispatch/nvic.h +++ b/include/libopencm3/dispatch/nvic.h @@ -31,6 +31,8 @@ # include #elif defined(EFM32HG) # include +#elif defined(EFM32WG) +# include #elif defined(LPC13XX) # include diff --git a/include/libopencm3/efm32/acmp.h b/include/libopencm3/efm32/acmp.h index cf5694dd..8eb7cfd4 100644 --- a/include/libopencm3/efm32/acmp.h +++ b/include/libopencm3/efm32/acmp.h @@ -19,6 +19,8 @@ #if defined(EFM32LG) # include +#elif defined(EFM32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/adc.h b/include/libopencm3/efm32/adc.h index 7b99f23b..17da9f5a 100644 --- a/include/libopencm3/efm32/adc.h +++ b/include/libopencm3/efm32/adc.h @@ -19,6 +19,8 @@ #if defined(EFM32LG) # include +#elif defined(EFM32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/burtc.h b/include/libopencm3/efm32/burtc.h index 1158d7f8..317e555d 100644 --- a/include/libopencm3/efm32/burtc.h +++ b/include/libopencm3/efm32/burtc.h @@ -19,6 +19,8 @@ #if defined(EFM32LG) # include +#elif defined(EFM32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/cmu.h b/include/libopencm3/efm32/cmu.h index e6f7a348..82225129 100644 --- a/include/libopencm3/efm32/cmu.h +++ b/include/libopencm3/efm32/cmu.h @@ -21,6 +21,8 @@ # include #elif defined(EFM32HG) # include +#elif defined(EFM32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/dac.h b/include/libopencm3/efm32/dac.h index 00011862..7a1e321a 100644 --- a/include/libopencm3/efm32/dac.h +++ b/include/libopencm3/efm32/dac.h @@ -19,6 +19,8 @@ #if defined(EFM32LG) # include +#elif defined(EFM32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/dma.h b/include/libopencm3/efm32/dma.h index cc06a229..7692a8ff 100644 --- a/include/libopencm3/efm32/dma.h +++ b/include/libopencm3/efm32/dma.h @@ -19,6 +19,8 @@ #if defined(EFM32LG) # include +#elif defined(EFM32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/emu.h b/include/libopencm3/efm32/emu.h index 0fc19bef..c57bbc34 100644 --- a/include/libopencm3/efm32/emu.h +++ b/include/libopencm3/efm32/emu.h @@ -19,6 +19,8 @@ #if defined(EFM32LG) # include +#elif defined(EFM32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/gpio.h b/include/libopencm3/efm32/gpio.h index d681bef5..77f64d29 100644 --- a/include/libopencm3/efm32/gpio.h +++ b/include/libopencm3/efm32/gpio.h @@ -21,6 +21,8 @@ # include #elif defined(EFM32HG) # include +#elif defined(EFM32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/i2c.h b/include/libopencm3/efm32/i2c.h index 0acf48a7..8fcb3d3e 100644 --- a/include/libopencm3/efm32/i2c.h +++ b/include/libopencm3/efm32/i2c.h @@ -19,6 +19,8 @@ #if defined(EFM32LG) # include +#elif defined(EFM32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/letimer.h b/include/libopencm3/efm32/letimer.h index 92b6ad7a..1a9bc5d0 100644 --- a/include/libopencm3/efm32/letimer.h +++ b/include/libopencm3/efm32/letimer.h @@ -19,6 +19,8 @@ #if defined(EFM32LG) # include +#elif defined(EFM32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/memorymap.h b/include/libopencm3/efm32/memorymap.h index f7501186..c23cc349 100644 --- a/include/libopencm3/efm32/memorymap.h +++ b/include/libopencm3/efm32/memorymap.h @@ -33,6 +33,8 @@ # include #elif defined(EFM32HG) # include +#elif defined(EFM32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/msc.h b/include/libopencm3/efm32/msc.h index 347b5be5..e3f7d27a 100644 --- a/include/libopencm3/efm32/msc.h +++ b/include/libopencm3/efm32/msc.h @@ -19,6 +19,8 @@ #if defined(EFM32LG) # include +#elif defined(EFM32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/opamp.h b/include/libopencm3/efm32/opamp.h index dbb1f844..1e68da00 100644 --- a/include/libopencm3/efm32/opamp.h +++ b/include/libopencm3/efm32/opamp.h @@ -19,6 +19,8 @@ #if defined(EFM32LG) # include +#elif defined(EFM32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/prs.h b/include/libopencm3/efm32/prs.h index 14ef9b2b..6c09268f 100644 --- a/include/libopencm3/efm32/prs.h +++ b/include/libopencm3/efm32/prs.h @@ -19,6 +19,8 @@ #if defined(EFM32LG) # include +#elif defined(EFM32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/rmu.h b/include/libopencm3/efm32/rmu.h index 82328877..e63dbf7e 100644 --- a/include/libopencm3/efm32/rmu.h +++ b/include/libopencm3/efm32/rmu.h @@ -19,6 +19,8 @@ #if defined(EFM32LG) # include +#elif defined(EFM32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/rtc.h b/include/libopencm3/efm32/rtc.h index a3e21776..654d46d7 100644 --- a/include/libopencm3/efm32/rtc.h +++ b/include/libopencm3/efm32/rtc.h @@ -19,6 +19,8 @@ #if defined(EFM32LG) # include +#elif defined(EFM32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/timer.h b/include/libopencm3/efm32/timer.h index 6920daeb..056eabc8 100644 --- a/include/libopencm3/efm32/timer.h +++ b/include/libopencm3/efm32/timer.h @@ -21,6 +21,8 @@ # include #elif defined(EFM32HG) # include +#elif defined(EFM32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/uart.h b/include/libopencm3/efm32/uart.h index 42a22987..6ab28717 100644 --- a/include/libopencm3/efm32/uart.h +++ b/include/libopencm3/efm32/uart.h @@ -19,6 +19,8 @@ #if defined(EFM32LG) # include +#elif defined(EFM32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/usart.h b/include/libopencm3/efm32/usart.h index af109b12..2c213ad5 100644 --- a/include/libopencm3/efm32/usart.h +++ b/include/libopencm3/efm32/usart.h @@ -19,6 +19,8 @@ #if defined(EFM32LG) # include +#elif defined(EFM32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/usb.h b/include/libopencm3/efm32/usb.h index ac7d48e1..a8035656 100644 --- a/include/libopencm3/efm32/usb.h +++ b/include/libopencm3/efm32/usb.h @@ -21,6 +21,8 @@ # include #elif defined(EFM32HG) # include +#elif defined(EFM32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/wdog.h b/include/libopencm3/efm32/wdog.h index 5631590c..21c12ab7 100644 --- a/include/libopencm3/efm32/wdog.h +++ b/include/libopencm3/efm32/wdog.h @@ -21,6 +21,8 @@ # include #elif defined(EFM32HG) # include +#elif defined(EFM32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/wg/acmp.h b/include/libopencm3/efm32/wg/acmp.h new file mode 100644 index 00000000..4a468c89 --- /dev/null +++ b/include/libopencm3/efm32/wg/acmp.h @@ -0,0 +1,25 @@ +/* + * This file is part of the libopencm3 project. + * + * Copyright (C) 2016 Bob Miller + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#ifndef LIBOPENCM3_EFM32_WG_ACMP_H +#define LIBOPENCM3_EFM32_WG_ACMP_H + +#include + +#endif diff --git a/include/libopencm3/efm32/wg/adc.h b/include/libopencm3/efm32/wg/adc.h new file mode 100644 index 00000000..3d6e07f3 --- /dev/null +++ b/include/libopencm3/efm32/wg/adc.h @@ -0,0 +1,25 @@ +/* + * This file is part of the libopencm3 project. + * + * Copyright (C) 2016 Bob Miller + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#ifndef LIBOPENCM3_EFM32_WG_ADC_H +#define LIBOPENCM3_EFM32_WG_ADC_H + +#include + +#endif diff --git a/include/libopencm3/efm32/wg/burtc.h b/include/libopencm3/efm32/wg/burtc.h new file mode 100644 index 00000000..9246ea03 --- /dev/null +++ b/include/libopencm3/efm32/wg/burtc.h @@ -0,0 +1,25 @@ +/* + * This file is part of the libopencm3 project. + * + * Copyright (C) 2016 Bob Miller + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#ifndef LIBOPENCM3_EFM32_WG_BURTC_H +#define LIBOPENCM3_EFM32_WG_BURTC_H + +#include + +#endif diff --git a/include/libopencm3/efm32/wg/cmu.h b/include/libopencm3/efm32/wg/cmu.h new file mode 100644 index 00000000..17701412 --- /dev/null +++ b/include/libopencm3/efm32/wg/cmu.h @@ -0,0 +1,25 @@ +/* + * This file is part of the libopencm3 project. + * + * Copyright (C) 2016 Bob Miller + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#ifndef LIBOPENCM3_EFM32_WG_CMU_H +#define LIBOPENCM3_EFM32_WG_CMU_H + +#include + +#endif diff --git a/include/libopencm3/efm32/wg/dac.h b/include/libopencm3/efm32/wg/dac.h new file mode 100644 index 00000000..5285c3ce --- /dev/null +++ b/include/libopencm3/efm32/wg/dac.h @@ -0,0 +1,25 @@ +/* + * This file is part of the libopencm3 project. + * + * Copyright (C) 2016 Bob Miller + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#ifndef LIBOPENCM3_EFM32_WG_DAC_H +#define LIBOPENCM3_EFM32_WG_DAC_H + +#include + +#endif diff --git a/include/libopencm3/efm32/wg/dma.h b/include/libopencm3/efm32/wg/dma.h new file mode 100644 index 00000000..cb4e9fa4 --- /dev/null +++ b/include/libopencm3/efm32/wg/dma.h @@ -0,0 +1,25 @@ +/* + * This file is part of the libopencm3 project. + * + * Copyright (C) 2016 Bob Miller + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#ifndef LIBOPENCM3_EFM32_WG_DMA_H +#define LIBOPENCM3_EFM32_WG_DMA_H + +#include + +#endif diff --git a/include/libopencm3/efm32/wg/doc-efm32wg.h b/include/libopencm3/efm32/wg/doc-efm32wg.h new file mode 100644 index 00000000..741b8b77 --- /dev/null +++ b/include/libopencm3/efm32/wg/doc-efm32wg.h @@ -0,0 +1,33 @@ +/** @mainpage libopencm3 EFM32 Wonder Gecko + +@version 1.0.0 + +@date 12 January 2016 + +API documentation for Silicon Laboratories EFM32 Wonder Gecko Cortex M4 series. + +LGPL License Terms @ref lgpl_license +*/ + +/** @defgroup EFM32WG EFM32 WonderGecko +Libraries for Silicon Laboratories EFM32 Wonder Gecko series. + +@version 1.0.0 + +@date 12 January 2016 + +LGPL License Terms @ref lgpl_license +*/ + +/** @defgroup EFM32LG_defines EFM32 Wonder Gecko Defines + +@brief Defined Constants and Types for the Silicon Laboratories EFM32 +Wonder Gecko series + +@version 1.0.0 + +@date 12 January 2016 + +LGPL License Terms @ref lgpl_license +*/ + diff --git a/include/libopencm3/efm32/wg/emu.h b/include/libopencm3/efm32/wg/emu.h new file mode 100644 index 00000000..a1a6d318 --- /dev/null +++ b/include/libopencm3/efm32/wg/emu.h @@ -0,0 +1,25 @@ +/* + * This file is part of the libopencm3 project. + * + * Copyright (C) 2016 Bob Miller + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#ifndef LIBOPENCM3_EFM32_WG_EMU_H +#define LIBOPENCM3_EFM32_WG_EMU_H + +#include + +#endif diff --git a/include/libopencm3/efm32/wg/gpio.h b/include/libopencm3/efm32/wg/gpio.h new file mode 100644 index 00000000..6bd8eb9b --- /dev/null +++ b/include/libopencm3/efm32/wg/gpio.h @@ -0,0 +1,25 @@ +/* + * This file is part of the libopencm3 project. + * + * Copyright (C) 2016 Bob Miller + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#ifndef LIBOPENCM3_EFM32_WG_GPIO_H +#define LIBOPENCM3_EFM32_WG_GPIO_H + +#include + +#endif diff --git a/include/libopencm3/efm32/wg/i2c.h b/include/libopencm3/efm32/wg/i2c.h new file mode 100644 index 00000000..0c40f10e --- /dev/null +++ b/include/libopencm3/efm32/wg/i2c.h @@ -0,0 +1,25 @@ +/* + * This file is part of the libopencm3 project. + * + * Copyright (C) 2016 Bob Miller + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#ifndef LIBOPENCM3_EFM32_WG_I2C_H +#define LIBOPENCM3_EFM32_WG_I2C_H + +#include + +#endif diff --git a/include/libopencm3/efm32/wg/irq.json b/include/libopencm3/efm32/wg/irq.json new file mode 100644 index 00000000..1332e7d0 --- /dev/null +++ b/include/libopencm3/efm32/wg/irq.json @@ -0,0 +1,47 @@ +{ + "_source": "The names and sequence are taken from d0233_efm32wg_reference_manual.pdf table 4.1.", + "irqs": [ + "dma", + "gpio_even", + "timer0", + "usart0_rx", + "usart0_tx", + "usb", + "acmp01", + "adc0", + "dac0", + "i2c0", + "i2c1", + "gpio_odd", + "timer1", + "timer2", + "timer3", + "usart1_rx", + "usart1_tx", + "lesense", + "usart2_rx", + "usart2_tx", + "uart0_rx", + "uart0_tx", + "uart1_rx", + "uart1_tx", + "leuart0", + "leuart1", + "letimer0", + "pcnt0", + "pcnt1", + "pcnt2", + "rtc", + "burtc", + "cmu", + "vcmp", + "lcd", + "msc", + "aes", + "ebi", + "emu" + ], + "partname_humanreadable": "EFM32 Wonder Gecko series", + "partname_doxygen": "EFM32WG", + "includeguard": "LIBOPENCM3_EFM32WG_NVIC_H" +} diff --git a/include/libopencm3/efm32/wg/letimer.h b/include/libopencm3/efm32/wg/letimer.h new file mode 100644 index 00000000..674b2fe4 --- /dev/null +++ b/include/libopencm3/efm32/wg/letimer.h @@ -0,0 +1,25 @@ +/* + * This file is part of the libopencm3 project. + * + * Copyright (C) 2016 Bob Miller + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#ifndef LIBOPENCM3_EFM32_WG_LETIMER_H +#define LIBOPENCM3_EFM32_WG_LETIMER_H + +#include + +#endif diff --git a/include/libopencm3/efm32/wg/memorymap.h b/include/libopencm3/efm32/wg/memorymap.h new file mode 100644 index 00000000..22c0073d --- /dev/null +++ b/include/libopencm3/efm32/wg/memorymap.h @@ -0,0 +1,117 @@ +/* + * This file is part of the libopencm3 project. + * + * Copyright (C) 2015 Kuldeep Singh Dhaka + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#ifndef LIBOPENCM3_EFM32_MEMORYMAP_H +#define LIBOPENCM3_EFM32_MEMORYMAP_H + +#include + +#define PERIPH_BASE (0x40000000U) + +/* Device information */ +#define DI_BASE (0x0FE08000U) + +/* all names are "DI_" + */ +#define DI_CMU_LFRCOCTRL MMIO32(DI_BASE + 0x020) +#define DI_CMU_HFRCOCTRL MMIO32(DI_BASE + 0x028) +#define DI_CMU_AUXHFRCOCTRL MMIO32(DI_BASE + 0x030) +#define DI_ADC0_CAL MMIO32(DI_BASE + 0x040) +#define DI_ADC0_BIASPROG MMIO32(DI_BASE + 0x048) +#define DI_DAC0_CAL MMIO32(DI_BASE + 0x050) +#define DI_DAC0_BIASPROG MMIO32(DI_BASE + 0x058) +#define DI_ACMP0_CTRL MMIO32(DI_BASE + 0x060) +#define DI_ACMP1_CTRL MMIO32(DI_BASE + 0x068) +#define DI_CMU_LCDCTRL MMIO32(DI_BASE + 0x078) +#define DI_DAC0_OPACTRL MMIO32(DI_BASE + 0x0A0) +#define DI_DAC0_OPAOFFSET MMIO32(DI_BASE + 0x0A8) +#define DI_EMU_BUINACT MMIO32(DI_BASE + 0x0B0) +#define DI_EMU_BUACT MMIO32(DI_BASE + 0x0B8) +#define DI_EMU_BUBODBUVINCAL MMIO32(DI_BASE + 0x0C0) +#define DI_EMU_BUBODUNREGCAL MMIO32(DI_BASE + 0x0C8) +#define DI_DI_CRC MMIO16(DI_BASE + 0x1B0) +#define DI_CAL_TEMP_0 MMIO8(DI_BASE + 0x1B2) +#define DI_ADC0_CAL_1V25 MMIO16(DI_BASE + 0x1B4) +#define DI_ADC0_CAL_2V5 MMIO16(DI_BASE + 0x1B6) +#define DI_ADC0_CAL_VDD MMIO16(DI_BASE + 0x1B8) +#define DI_ADC0_CAL_5VDIFF MMIO16(DI_BASE + 0x1BA) +#define DI_ADC0_CAL_2XVDD MMIO16(DI_BASE + 0x1BC) +#define DI_ADC0_TEMP_0_READ_1V25 MMIO16(DI_BASE + 0x1BE) +#define DI_DAC0_CAL_1V25 MMIO32(DI_BASE + 0x1C8) +#define DI_DAC0_CAL_2V5 MMIO32(DI_BASE + 0x1CC) +#define DI_DAC0_CAL_VDD MMIO32(DI_BASE + 0x1D0) +#define DI_AUXHFRCO_CALIB_BAND_1 MMIO8(DI_BASE + 0x1D4) +#define DI_AUXHFRCO_CALIB_BAND_7 MMIO8(DI_BASE + 0x1D5) +#define DI_AUXHFRCO_CALIB_BAND_11 MMIO8(DI_BASE + 0x1D6) +#define DI_AUXHFRCO_CALIB_BAND_14 MMIO8(DI_BASE + 0x1D7) +#define DI_AUXHFRCO_CALIB_BAND_21 MMIO8(DI_BASE + 0x1D8) +#define DI_AUXHFRCO_CALIB_BAND_28 MMIO8(DI_BASE + 0x1D9) +#define DI_HFRCO_CALIB_BAND_1 MMIO8(DI_BASE + 0x1DC) +#define DI_HFRCO_CALIB_BAND_7 MMIO8(DI_BASE + 0x1DD) +#define DI_HFRCO_CALIB_BAND_11 MMIO8(DI_BASE + 0x1DE) +#define DI_HFRCO_CALIB_BAND_14 MMIO8(DI_BASE + 0x1DF) +#define DI_HFRCO_CALIB_BAND_21 MMIO8(DI_BASE + 0x1E0) +#define DI_HFRCO_CALIB_BAND_28 MMIO8(DI_BASE + 0x1E1) +#define DI_MEM_INFO_PAGE_SIZE MMIO8(DI_BASE + 0x1E7) +#define DI_UNIQUE_0 MMIO32(DI_BASE + 0x1F0) +#define DI_UNIQUE_1 MMIO32(DI_BASE + 0x1F4) +#define DI_MEM_INFO_FLASH MMIO16(DI_BASE + 0x1F8) +#define DI_MEM_INFO_RAM MMIO16(DI_BASE + 0x1FA) +#define DI_PART_NUMBER MMIO16(DI_BASE + 0x1FC) +#define DI_PART_FAMILY MMIO8(DI_BASE + 0x1FE) +#define DI_PROD_REV MMIO8(DI_BASE + 0x1FF) + +#define AES_BASE (PERIPH_BASE + 0xE0000) +#define PRS_BASE (PERIPH_BASE + 0xCC000) +#define RMU_BASE (PERIPH_BASE + 0xCA000) +#define CMU_BASE (PERIPH_BASE + 0xC8000) +#define EMU_BASE (PERIPH_BASE + 0xC6000) +#define USB_BASE (PERIPH_BASE + 0xC4000) +#define DMA_BASE (PERIPH_BASE + 0xC2000) +#define MSC_BASE (PERIPH_BASE + 0xC0000) +#define LESENSE_BASE (PERIPH_BASE + 0x8C000) +#define LCD_BASE (PERIPH_BASE + 0x8A000) +#define WDOG_BASE (PERIPH_BASE + 0x88000) +#define PCNT2_BASE (PERIPH_BASE + 0x86800) +#define PCNT1_BASE (PERIPH_BASE + 0x86400) +#define PCNT0_BASE (PERIPH_BASE + 0x86000) +#define LEUART1_BASE (PERIPH_BASE + 0x84400) +#define LEUART0_BASE (PERIPH_BASE + 0x84000) +#define LETIMER0_BASE (PERIPH_BASE + 0x82000) +#define BURTC_BASE (PERIPH_BASE + 0x81000) +#define RTC_BASE (PERIPH_BASE + 0x80000) +#define TIMER3_BASE (PERIPH_BASE + 0x10C00) +#define TIMER2_BASE (PERIPH_BASE + 0x10800) +#define TIMER1_BASE (PERIPH_BASE + 0x10400) +#define TIMER0_BASE (PERIPH_BASE + 0x10000) +#define UART1_BASE (PERIPH_BASE + 0x0E400) +#define UART0_BASE (PERIPH_BASE + 0x0E000) +#define USART2_BASE (PERIPH_BASE + 0x0C800) +#define USART1_BASE (PERIPH_BASE + 0x0C400) +#define USART0_BASE (PERIPH_BASE + 0x0C000) +#define I2C1_BASE (PERIPH_BASE + 0x0A400) +#define I2C0_BASE (PERIPH_BASE + 0x0A000) +#define EBI_BASE (PERIPH_BASE + 0x08000) +#define GPIO_BASE (PERIPH_BASE + 0x06000) +#define DAC0_BASE (PERIPH_BASE + 0x04000) +#define ADC0_BASE (PERIPH_BASE + 0x02000) +#define ACMP1_BASE (PERIPH_BASE + 0x01400) +#define ACMP0_BASE (PERIPH_BASE + 0x01000) +#define VCMP_BASE (PERIPH_BASE + 0x00000) + +#endif diff --git a/include/libopencm3/efm32/wg/msc.h b/include/libopencm3/efm32/wg/msc.h new file mode 100644 index 00000000..e4324682 --- /dev/null +++ b/include/libopencm3/efm32/wg/msc.h @@ -0,0 +1,25 @@ +/* + * This file is part of the libopencm3 project. + * + * Copyright (C) 2016 Bob Miller + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#ifndef LIBOPENCM3_EFM32_WG_MSC_H +#define LIBOPENCM3_EFM32_WG_MSC_H + +#include + +#endif diff --git a/include/libopencm3/efm32/wg/opamp.h b/include/libopencm3/efm32/wg/opamp.h new file mode 100644 index 00000000..d534d55c --- /dev/null +++ b/include/libopencm3/efm32/wg/opamp.h @@ -0,0 +1,25 @@ +/* + * This file is part of the libopencm3 project. + * + * Copyright (C) 2016 Bob Miller + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#ifndef LIBOPENCM3_EFM32_WG_OPAMP_H +#define LIBOPENCM3_EFM32_WG_OPAMP_H + +#include + +#endif diff --git a/include/libopencm3/efm32/wg/prs.h b/include/libopencm3/efm32/wg/prs.h new file mode 100644 index 00000000..2df0410d --- /dev/null +++ b/include/libopencm3/efm32/wg/prs.h @@ -0,0 +1,25 @@ +/* + * This file is part of the libopencm3 project. + * + * Copyright (C) 2016 Bob Miller + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#ifndef LIBOPENCM3_EFM32_WG_PRS_H +#define LIBOPENCM3_EFM32_WG_PRS_H + +#include + +#endif diff --git a/include/libopencm3/efm32/wg/rmu.h b/include/libopencm3/efm32/wg/rmu.h new file mode 100644 index 00000000..d2ba356b --- /dev/null +++ b/include/libopencm3/efm32/wg/rmu.h @@ -0,0 +1,25 @@ +/* + * This file is part of the libopencm3 project. + * + * Copyright (C) 2016 Bob Miller + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#ifndef LIBOPENCM3_EFM32_WG_RMU_H +#define LIBOPENCM3_EFM32_WG_RMU_H + +#include + +#endif diff --git a/include/libopencm3/efm32/wg/rtc.h b/include/libopencm3/efm32/wg/rtc.h new file mode 100644 index 00000000..39c2ff0e --- /dev/null +++ b/include/libopencm3/efm32/wg/rtc.h @@ -0,0 +1,25 @@ +/* + * This file is part of the libopencm3 project. + * + * Copyright (C) 2016 Bob Miller + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#ifndef LIBOPENCM3_EFM32_WG_RTC_H +#define LIBOPENCM3_EFM32_WG_RTC_H + +#include + +#endif diff --git a/include/libopencm3/efm32/wg/timer.h b/include/libopencm3/efm32/wg/timer.h new file mode 100644 index 00000000..fc51e77d --- /dev/null +++ b/include/libopencm3/efm32/wg/timer.h @@ -0,0 +1,25 @@ +/* + * This file is part of the libopencm3 project. + * + * Copyright (C) 2016 Bob Miller + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#ifndef LIBOPENCM3_EFM32_WG_TIMER_H +#define LIBOPENCM3_EFM32_WG_TIMER_H + +#include + +#endif diff --git a/include/libopencm3/efm32/wg/uart.h b/include/libopencm3/efm32/wg/uart.h new file mode 100644 index 00000000..52c79f7b --- /dev/null +++ b/include/libopencm3/efm32/wg/uart.h @@ -0,0 +1,25 @@ +/* + * This file is part of the libopencm3 project. + * + * Copyright (C) 2016 Bob Miller + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#ifndef LIBOPENCM3_EFM32_WG_UART_H +#define LIBOPENCM3_EFM32_WG_UART_H + +#include + +#endif diff --git a/include/libopencm3/efm32/wg/usart.h b/include/libopencm3/efm32/wg/usart.h new file mode 100644 index 00000000..149842d7 --- /dev/null +++ b/include/libopencm3/efm32/wg/usart.h @@ -0,0 +1,25 @@ +/* + * This file is part of the libopencm3 project. + * + * Copyright (C) 2016 Bob Miller + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#ifndef LIBOPENCM3_EFM32_WG_USART_H +#define LIBOPENCM3_EFM32_WG_USART_H + +#include + +#endif diff --git a/include/libopencm3/efm32/wg/usb.h b/include/libopencm3/efm32/wg/usb.h new file mode 100644 index 00000000..49edde04 --- /dev/null +++ b/include/libopencm3/efm32/wg/usb.h @@ -0,0 +1,25 @@ +/* + * This file is part of the libopencm3 project. + * + * Copyright (C) 2016 Bob Miller + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#ifndef LIBOPENCM3_EFM32_WG_USB_H +#define LIBOPENCM3_EFM32_WG_USB_H + +#include + +#endif diff --git a/include/libopencm3/efm32/wg/wdog.h b/include/libopencm3/efm32/wg/wdog.h new file mode 100644 index 00000000..bec00e9d --- /dev/null +++ b/include/libopencm3/efm32/wg/wdog.h @@ -0,0 +1,25 @@ +/* + * This file is part of the libopencm3 project. + * + * Copyright (C) 2016 Bob Miller + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#ifndef LIBOPENCM3_EFM32_WG_WDOG_H +#define LIBOPENCM3_EFM32_WG_WDOG_H + +#include + +#endif diff --git a/lib/dispatch/vector_nvic.c b/lib/dispatch/vector_nvic.c index 06cad5cb..f99c4442 100644 --- a/lib/dispatch/vector_nvic.c +++ b/lib/dispatch/vector_nvic.c @@ -27,6 +27,8 @@ # include "../efm32/gg/vector_nvic.c" #elif defined(EFM32HG) # include "../efm32/hg/vector_nvic.c" +#elif defined(EFM32WG) +# include "../efm32/wg/vector_nvic.c" #elif defined(LPC13XX) # include "../lpc13xx/vector_nvic.c" diff --git a/lib/efm32/wg/Makefile b/lib/efm32/wg/Makefile new file mode 100644 index 00000000..39a8377e --- /dev/null +++ b/lib/efm32/wg/Makefile @@ -0,0 +1,51 @@ +## +## This file is part of the libopencm3 project. +## +## Copyright (C) 2009 Uwe Hermann +## Copyright (C) 2012 chrysn +## Copyright (C) 2015 Kuldeep Singh Dhaka +## +## This library is free software: you can redistribute it and/or modify +## it under the terms of the GNU Lesser General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## This library 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 Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public License +## along with this library. If not, see . +## + +LIBNAME = libopencm3_efm32wg +SRCLIBDIR ?= ../.. +FAMILY = EFM32WG + +PREFIX ?= arm-none-eabi +#PREFIX ?= arm-elf +CC = $(PREFIX)-gcc +AR = $(PREFIX)-ar +TGT_CFLAGS = -Os \ + -Wall -Wextra -Wimplicit-function-declaration \ + -Wredundant-decls -Wmissing-prototypes -Wstrict-prototypes \ + -Wundef -Wshadow \ + -I../../../include -fno-common \ + -mcpu=cortex-m4 $(FP_FLAGS) -mthumb -Wstrict-prototypes \ + -ffunction-sections -fdata-sections -MD -D$(FAMILY) +TGT_CFLAGS += $(DEBUG_FLAGS) +# ARFLAGS = rcsv +ARFLAGS = rcs +OBJS = + +OBJS = gpio_common.o cmu_common.o prs_common.o +OBJS += adc_common.o dma_common.o timer_common.o +OBJS += dac_common.o + +OBJS += usb.o usb_control.o usb_standard.o +OBJS += usb_efm32.o + +VPATH += ../../usb:../:../../cm3:../common + +include ../../Makefile.include diff --git a/lib/efm32/wg/libopencm3_efm32wg.ld b/lib/efm32/wg/libopencm3_efm32wg.ld new file mode 100644 index 00000000..87d6ee63 --- /dev/null +++ b/lib/efm32/wg/libopencm3_efm32wg.ld @@ -0,0 +1,106 @@ +/* + * This file is part of the libopencm3 project. + * + * Copyright (C) 2009 Uwe Hermann + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +/* Generic linker script for EFM32 targets using libopencm3. */ + +/* Memory regions must be defined in the ld script which includes this one. */ + +/* Enforce emmition of the vector table. */ +EXTERN (vector_table) + +/* Define the entry point of the output file. */ +ENTRY(reset_handler) + +/* Define sections. */ +SECTIONS +{ + .text : { + *(.vectors) /* Vector table */ + *(.text*) /* Program code */ + . = ALIGN(4); + *(.rodata*) /* Read-only data */ + . = ALIGN(4); + } >rom + + /* C++ Static constructors/destructors, also used for __attribute__ + * ((constructor)) and the likes */ + .preinit_array : { + . = ALIGN(4); + __preinit_array_start = .; + KEEP (*(.preinit_array)) + __preinit_array_end = .; + } >rom + .init_array : { + . = ALIGN(4); + __init_array_start = .; + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array)) + __init_array_end = .; + } >rom + .fini_array : { + . = ALIGN(4); + __fini_array_start = .; + KEEP (*(.fini_array)) + KEEP (*(SORT(.fini_array.*))) + __fini_array_end = .; + } >rom + + /* + * Another section used by C++ stuff, appears when using newlib with + * 64bit (long long) printf support + */ + .ARM.extab : { + *(.ARM.extab*) + } >rom + .ARM.exidx : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >rom + + . = ALIGN(4); + _etext = .; + + .data : { + _data = .; + *(.data*) /* Read-write initialized data */ + . = ALIGN(4); + _edata = .; + } >ram AT >rom + _data_loadaddr = LOADADDR(.data); + + .bss : { + *(.bss*) /* Read-write zero initialized data */ + *(COMMON) + . = ALIGN(4); + _ebss = .; + } >ram + + /* + * The .eh_frame section appears to be used for C++ exception handling. + * You may need to fix this if you're using C++. + */ + /DISCARD/ : { *(.eh_frame) } + + . = ALIGN(4); + end = .; +} + +PROVIDE(_stack = ORIGIN(ram) + LENGTH(ram)); +