diff --git a/Makefile b/Makefile index e0f8e01c..6929769d 100644 --- a/Makefile +++ b/Makefile @@ -32,6 +32,7 @@ TARGETS ?= stm32/f0 stm32/f1 stm32/f2 stm32/f3 stm32/f4 stm32/f7 \ lpc13xx lpc17xx lpc43xx/m4 lpc43xx/m0 \ lm3s lm4f \ efm32/tg efm32/g efm32/lg efm32/gg efm32/hg efm32/wg \ + efm32/ezr32wg \ 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 67e318a7..cefab466 100644 --- a/include/libopencm3/dispatch/nvic.h +++ b/include/libopencm3/dispatch/nvic.h @@ -33,6 +33,8 @@ # include #elif defined(EFM32WG) # include +#elif defined(EZR32WG) +# include #elif defined(LPC13XX) # include diff --git a/include/libopencm3/efm32/acmp.h b/include/libopencm3/efm32/acmp.h index 8eb7cfd4..471ce29c 100644 --- a/include/libopencm3/efm32/acmp.h +++ b/include/libopencm3/efm32/acmp.h @@ -21,6 +21,8 @@ # include #elif defined(EFM32WG) # include +#elif defined(EZR32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/adc.h b/include/libopencm3/efm32/adc.h index 17da9f5a..afa5abe0 100644 --- a/include/libopencm3/efm32/adc.h +++ b/include/libopencm3/efm32/adc.h @@ -21,6 +21,8 @@ # include #elif defined(EFM32WG) # include +#elif defined(EZR32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/burtc.h b/include/libopencm3/efm32/burtc.h index 317e555d..2a2f3715 100644 --- a/include/libopencm3/efm32/burtc.h +++ b/include/libopencm3/efm32/burtc.h @@ -21,6 +21,8 @@ # include #elif defined(EFM32WG) # include +#elif defined(EZR32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/cmu.h b/include/libopencm3/efm32/cmu.h index 82225129..d9f51c24 100644 --- a/include/libopencm3/efm32/cmu.h +++ b/include/libopencm3/efm32/cmu.h @@ -23,6 +23,8 @@ # include #elif defined(EFM32WG) # include +#elif defined(EZR32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/dac.h b/include/libopencm3/efm32/dac.h index 7a1e321a..8cc5b135 100644 --- a/include/libopencm3/efm32/dac.h +++ b/include/libopencm3/efm32/dac.h @@ -21,6 +21,8 @@ # include #elif defined(EFM32WG) # include +#elif defined(EZR32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/dma.h b/include/libopencm3/efm32/dma.h index 7692a8ff..dac20e7e 100644 --- a/include/libopencm3/efm32/dma.h +++ b/include/libopencm3/efm32/dma.h @@ -21,6 +21,8 @@ # include #elif defined(EFM32WG) # include +#elif defined(EZR32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/emu.h b/include/libopencm3/efm32/emu.h index c57bbc34..266c6de9 100644 --- a/include/libopencm3/efm32/emu.h +++ b/include/libopencm3/efm32/emu.h @@ -21,6 +21,8 @@ # include #elif defined(EFM32WG) # include +#elif defined(EZR32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/ezr32wg/acmp.h b/include/libopencm3/efm32/ezr32wg/acmp.h new file mode 100644 index 00000000..c0c2b639 --- /dev/null +++ b/include/libopencm3/efm32/ezr32wg/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_EZR32WG_ACMP_H +#define LIBOPENCM3_EFM32_EZR32WG_ACMP_H + +#include + +#endif diff --git a/include/libopencm3/efm32/ezr32wg/adc.h b/include/libopencm3/efm32/ezr32wg/adc.h new file mode 100644 index 00000000..f06b9492 --- /dev/null +++ b/include/libopencm3/efm32/ezr32wg/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_EZR32WG_ADC_H +#define LIBOPENCM3_EFM32_EZR32WG_ADC_H + +#include + +#endif diff --git a/include/libopencm3/efm32/ezr32wg/burtc.h b/include/libopencm3/efm32/ezr32wg/burtc.h new file mode 100644 index 00000000..b96789d2 --- /dev/null +++ b/include/libopencm3/efm32/ezr32wg/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_EZR32WG_BURTC_H +#define LIBOPENCM3_EFM32_EZR32WG_BURTC_H + +#include + +#endif diff --git a/include/libopencm3/efm32/ezr32wg/cmu.h b/include/libopencm3/efm32/ezr32wg/cmu.h new file mode 100644 index 00000000..f292ab4f --- /dev/null +++ b/include/libopencm3/efm32/ezr32wg/cmu.h @@ -0,0 +1,32 @@ +/* + * 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_EZR32WG_CMU_H +#define LIBOPENCM3_EFM32_EZR32WG_CMU_H + +#include + +/* EZR32WG refers to USART0 as USART0RF + * because it is connected to the radio MCU. + */ + +#define CMU_HFPERCLKEN0_USARTRF0 CMU_HFPERCLKEN0_USART0 +#define CMU_USARTRF0 CMU_USART0 + +#endif diff --git a/include/libopencm3/efm32/ezr32wg/dac.h b/include/libopencm3/efm32/ezr32wg/dac.h new file mode 100644 index 00000000..aba83df2 --- /dev/null +++ b/include/libopencm3/efm32/ezr32wg/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_EZR32WG_DAC_H +#define LIBOPENCM3_EFM32_EZR32WG_DAC_H + +#include + +#endif diff --git a/include/libopencm3/efm32/ezr32wg/dma.h b/include/libopencm3/efm32/ezr32wg/dma.h new file mode 100644 index 00000000..4f47a448 --- /dev/null +++ b/include/libopencm3/efm32/ezr32wg/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_EZR32WG_DMA_H +#define LIBOPENCM3_EFM32_EZR32WG_DMA_H + +#include + +#endif diff --git a/include/libopencm3/efm32/ezr32wg/doc-ezr32wg.h b/include/libopencm3/efm32/ezr32wg/doc-ezr32wg.h new file mode 100644 index 00000000..3adbefa2 --- /dev/null +++ b/include/libopencm3/efm32/ezr32wg/doc-ezr32wg.h @@ -0,0 +1,33 @@ +/** @mainpage libopencm3 EFM32 Wonder Gecko + +@version 1.0.0 + +@date 14 January 2016 + +API documentation for Silicon Laboratories EZR32 Wonder Gecko Cortex M4 series. + +LGPL License Terms @ref lgpl_license +*/ + +/** @defgroup EZR32WG EZR32 WonderGecko +Libraries for Silicon Laboratories EZR32 Wonder Gecko series. + +@version 1.0.0 + +@date 14 January 2016 + +LGPL License Terms @ref lgpl_license +*/ + +/** @defgroup EZR32LG_defines EZR32 Wonder Gecko Defines + +@brief Defined Constants and Types for the Silicon Laboratories EZR32 +Wonder Gecko series + +@version 1.0.0 + +@date 12 January 2016 + +LGPL License Terms @ref lgpl_license +*/ + diff --git a/include/libopencm3/efm32/ezr32wg/emu.h b/include/libopencm3/efm32/ezr32wg/emu.h new file mode 100644 index 00000000..054a748a --- /dev/null +++ b/include/libopencm3/efm32/ezr32wg/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_EZR32WG_EMU_H +#define LIBOPENCM3_EFM32_EZR32WG_EMU_H + +#include + +#endif diff --git a/include/libopencm3/efm32/ezr32wg/gpio.h b/include/libopencm3/efm32/ezr32wg/gpio.h new file mode 100644 index 00000000..21cc6630 --- /dev/null +++ b/include/libopencm3/efm32/ezr32wg/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_EZR32WG_GPIO_H +#define LIBOPENCM3_EFM32_EZR32WG_GPIO_H + +#include + +#endif diff --git a/include/libopencm3/efm32/ezr32wg/i2c.h b/include/libopencm3/efm32/ezr32wg/i2c.h new file mode 100644 index 00000000..e8a3a9c8 --- /dev/null +++ b/include/libopencm3/efm32/ezr32wg/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_EZR32WG_I2C_H +#define LIBOPENCM3_EFM32_EZR32WG_I2C_H + +#include + +#endif diff --git a/include/libopencm3/efm32/ezr32wg/irq.json b/include/libopencm3/efm32/ezr32wg/irq.json new file mode 100644 index 00000000..35ccb794 --- /dev/null +++ b/include/libopencm3/efm32/ezr32wg/irq.json @@ -0,0 +1,47 @@ +{ + "_source": "The names and sequence are taken from d0334_ezr32wg_reference_manual.pdf table 5.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": "EZR32 Wonder Gecko series", + "partname_doxygen": "EZR32WG", + "includeguard": "LIBOPENCM3_EZR32WG_NVIC_H" +} diff --git a/include/libopencm3/efm32/ezr32wg/letimer.h b/include/libopencm3/efm32/ezr32wg/letimer.h new file mode 100644 index 00000000..6fbfbc7f --- /dev/null +++ b/include/libopencm3/efm32/ezr32wg/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_EZR32WG_LETIMER_H +#define LIBOPENCM3_EFM32_EZR32WG_LETIMER_H + +#include + +#endif diff --git a/include/libopencm3/efm32/ezr32wg/memorymap.h b/include/libopencm3/efm32/ezr32wg/memorymap.h new file mode 100644 index 00000000..89536ca7 --- /dev/null +++ b/include/libopencm3/efm32/ezr32wg/memorymap.h @@ -0,0 +1,121 @@ + /* + * 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_EZR32WG_MEMORYMAP_H +#define LIBOPENCM3_EZR32WG_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_MCM_REV_MIN MMIO8(DI_BASE + 0x1AA) +#define DI_MCM_REV_MAJ MMIO8(DI_BASE + 0x1AB) +#define DI_RADIO_REV_MIN MMIO8(DI_BASE + 0x1AC) +#define DI_RADIO_REV_MAJ MMIO8(DI_BASE + 0x1AD) +#define DI_RADIO_OPN MMIO8(DI_BASE + 0x1AE) +#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_RADIO_ID MMIO16(DI_BASE + 0x1EE) +#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 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 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 PRS_BASE (PERIPH_BASE + 0xCC000) +#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 USARTRF0_BASE (PERIPH_BASE + 0x0C000) +#define I2C1_BASE (PERIPH_BASE + 0x0A400) +#define I2C0_BASE (PERIPH_BASE + 0x0A000) +#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/ezr32wg/msc.h b/include/libopencm3/efm32/ezr32wg/msc.h new file mode 100644 index 00000000..b8800ea8 --- /dev/null +++ b/include/libopencm3/efm32/ezr32wg/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_EZR32WG_MSC_H +#define LIBOPENCM3_EFM32_EZR32WG_MSC_H + +#include + +#endif diff --git a/include/libopencm3/efm32/ezr32wg/opamp.h b/include/libopencm3/efm32/ezr32wg/opamp.h new file mode 100644 index 00000000..1b0ded90 --- /dev/null +++ b/include/libopencm3/efm32/ezr32wg/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_EZR32WG_OPAMP_H +#define LIBOPENCM3_EFM32_EZR32WG_OPAMP_H + +#include + +#endif diff --git a/include/libopencm3/efm32/ezr32wg/prs.h b/include/libopencm3/efm32/ezr32wg/prs.h new file mode 100644 index 00000000..6b58af82 --- /dev/null +++ b/include/libopencm3/efm32/ezr32wg/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_EZR32WG_PRS_H +#define LIBOPENCM3_EFM32_EZR32WG_PRS_H + +#include + +#endif diff --git a/include/libopencm3/efm32/ezr32wg/rmu.h b/include/libopencm3/efm32/ezr32wg/rmu.h new file mode 100644 index 00000000..f0eab3a9 --- /dev/null +++ b/include/libopencm3/efm32/ezr32wg/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_EZR32WG_RMU_H +#define LIBOPENCM3_EFM32_EZR32WG_RMU_H + +#include + +#endif diff --git a/include/libopencm3/efm32/ezr32wg/rtc.h b/include/libopencm3/efm32/ezr32wg/rtc.h new file mode 100644 index 00000000..3c96410c --- /dev/null +++ b/include/libopencm3/efm32/ezr32wg/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_EZR32WG_RTC_H +#define LIBOPENCM3_EFM32_EZR32WG_RTC_H + +#include + +#endif diff --git a/include/libopencm3/efm32/ezr32wg/timer.h b/include/libopencm3/efm32/ezr32wg/timer.h new file mode 100644 index 00000000..848d4eaa --- /dev/null +++ b/include/libopencm3/efm32/ezr32wg/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_EZR32WG_TIMER_H +#define LIBOPENCM3_EFM32_EZR32WG_TIMER_H + +#include + +#endif diff --git a/include/libopencm3/efm32/ezr32wg/uart.h b/include/libopencm3/efm32/ezr32wg/uart.h new file mode 100644 index 00000000..a012581b --- /dev/null +++ b/include/libopencm3/efm32/ezr32wg/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_EZR32WG_UART_H +#define LIBOPENCM3_EFM32_EZR32WG_UART_H + +#include + +#endif diff --git a/include/libopencm3/efm32/ezr32wg/usart.h b/include/libopencm3/efm32/ezr32wg/usart.h new file mode 100644 index 00000000..07a80415 --- /dev/null +++ b/include/libopencm3/efm32/ezr32wg/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_EZR32WG_USART_H +#define LIBOPENCM3_EFM32_EZR32WG_USART_H + +#include + +#endif diff --git a/include/libopencm3/efm32/ezr32wg/usb.h b/include/libopencm3/efm32/ezr32wg/usb.h new file mode 100644 index 00000000..87be3234 --- /dev/null +++ b/include/libopencm3/efm32/ezr32wg/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_EZR32WG_USB_H +#define LIBOPENCM3_EFM32_EZR32WG_USB_H + +#include + +#endif diff --git a/include/libopencm3/efm32/ezr32wg/wdog.h b/include/libopencm3/efm32/ezr32wg/wdog.h new file mode 100644 index 00000000..0446680c --- /dev/null +++ b/include/libopencm3/efm32/ezr32wg/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_EZR32WG_WDOG_H +#define LIBOPENCM3_EFM32_EZR32WG_WDOG_H + +#include + +#endif diff --git a/include/libopencm3/efm32/gpio.h b/include/libopencm3/efm32/gpio.h index 77f64d29..6bd3abf8 100644 --- a/include/libopencm3/efm32/gpio.h +++ b/include/libopencm3/efm32/gpio.h @@ -23,6 +23,8 @@ # include #elif defined(EFM32WG) # include +#elif defined(EZR32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/i2c.h b/include/libopencm3/efm32/i2c.h index 8fcb3d3e..0f654110 100644 --- a/include/libopencm3/efm32/i2c.h +++ b/include/libopencm3/efm32/i2c.h @@ -21,6 +21,8 @@ # include #elif defined(EFM32WG) # include +#elif defined(EZR32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/letimer.h b/include/libopencm3/efm32/letimer.h index 1a9bc5d0..1118fdda 100644 --- a/include/libopencm3/efm32/letimer.h +++ b/include/libopencm3/efm32/letimer.h @@ -21,6 +21,8 @@ # include #elif defined(EFM32WG) # include +#elif defined(EZR32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/lg/irq.json b/include/libopencm3/efm32/lg/irq.json index beb036dc..3ffdc0df 100644 --- a/include/libopencm3/efm32/lg/irq.json +++ b/include/libopencm3/efm32/lg/irq.json @@ -38,7 +38,8 @@ "lcd", "msc", "aes", - "ebi" + "ebi", + "emu" ], "partname_humanreadable": "EFM32 Leopard Gecko series", "partname_doxygen": "EFM32LG", diff --git a/include/libopencm3/efm32/memorymap.h b/include/libopencm3/efm32/memorymap.h index c23cc349..6cee0f1f 100644 --- a/include/libopencm3/efm32/memorymap.h +++ b/include/libopencm3/efm32/memorymap.h @@ -35,6 +35,8 @@ # include #elif defined(EFM32WG) # include +#elif defined(EZR32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/msc.h b/include/libopencm3/efm32/msc.h index e3f7d27a..4435ba63 100644 --- a/include/libopencm3/efm32/msc.h +++ b/include/libopencm3/efm32/msc.h @@ -21,6 +21,8 @@ # include #elif defined(EFM32WG) # include +#elif defined(EZR32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/opamp.h b/include/libopencm3/efm32/opamp.h index 1e68da00..10de5e86 100644 --- a/include/libopencm3/efm32/opamp.h +++ b/include/libopencm3/efm32/opamp.h @@ -21,6 +21,8 @@ # include #elif defined(EFM32WG) # include +#elif defined(EZR32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/prs.h b/include/libopencm3/efm32/prs.h index 6c09268f..49eb1330 100644 --- a/include/libopencm3/efm32/prs.h +++ b/include/libopencm3/efm32/prs.h @@ -21,6 +21,8 @@ # include #elif defined(EFM32WG) # include +#elif defined(EZR32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/rmu.h b/include/libopencm3/efm32/rmu.h index e63dbf7e..cd324867 100644 --- a/include/libopencm3/efm32/rmu.h +++ b/include/libopencm3/efm32/rmu.h @@ -21,6 +21,8 @@ # include #elif defined(EFM32WG) # include +#elif defined(EZR32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/rtc.h b/include/libopencm3/efm32/rtc.h index 654d46d7..7d5eaa98 100644 --- a/include/libopencm3/efm32/rtc.h +++ b/include/libopencm3/efm32/rtc.h @@ -21,6 +21,8 @@ # include #elif defined(EFM32WG) # include +#elif defined(EZR32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/timer.h b/include/libopencm3/efm32/timer.h index 056eabc8..572baa7b 100644 --- a/include/libopencm3/efm32/timer.h +++ b/include/libopencm3/efm32/timer.h @@ -23,6 +23,8 @@ # include #elif defined(EFM32WG) # include +#elif defined(EZR32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/uart.h b/include/libopencm3/efm32/uart.h index 6ab28717..ff957f21 100644 --- a/include/libopencm3/efm32/uart.h +++ b/include/libopencm3/efm32/uart.h @@ -21,6 +21,8 @@ # include #elif defined(EFM32WG) # include +#elif defined(EZR32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/usart.h b/include/libopencm3/efm32/usart.h index 2c213ad5..74c6de6c 100644 --- a/include/libopencm3/efm32/usart.h +++ b/include/libopencm3/efm32/usart.h @@ -21,6 +21,8 @@ # include #elif defined(EFM32WG) # include +#elif defined(EZR32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/usb.h b/include/libopencm3/efm32/usb.h index a8035656..b6a4f0c7 100644 --- a/include/libopencm3/efm32/usb.h +++ b/include/libopencm3/efm32/usb.h @@ -23,6 +23,8 @@ # include #elif defined(EFM32WG) # include +#elif defined(EZR32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/include/libopencm3/efm32/wdog.h b/include/libopencm3/efm32/wdog.h index 21c12ab7..7ba7ac56 100644 --- a/include/libopencm3/efm32/wdog.h +++ b/include/libopencm3/efm32/wdog.h @@ -23,6 +23,8 @@ # include #elif defined(EFM32WG) # include +#elif defined(EZR32WG) +# include #else # error "efm32 family not defined." #endif diff --git a/lib/dispatch/vector_nvic.c b/lib/dispatch/vector_nvic.c index f99c4442..8ee6461f 100644 --- a/lib/dispatch/vector_nvic.c +++ b/lib/dispatch/vector_nvic.c @@ -29,6 +29,8 @@ # include "../efm32/hg/vector_nvic.c" #elif defined(EFM32WG) # include "../efm32/wg/vector_nvic.c" +#elif defined(EZR32WG) +# include "../efm32/ezr32wg/vector_nvic.c" #elif defined(LPC13XX) # include "../lpc13xx/vector_nvic.c" diff --git a/lib/efm32/ezr32wg/Makefile b/lib/efm32/ezr32wg/Makefile new file mode 100644 index 00000000..c30e5faf --- /dev/null +++ b/lib/efm32/ezr32wg/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_ezr32wg +SRCLIBDIR ?= ../.. +FAMILY = EZR32WG + +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/ezr32wg/libopencm3_ezr32wg.ld b/lib/efm32/ezr32wg/libopencm3_ezr32wg.ld new file mode 100644 index 00000000..87d6ee63 --- /dev/null +++ b/lib/efm32/ezr32wg/libopencm3_ezr32wg.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)); +