Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Silicon Labs] Add support for EFM32 Pearl Gecko #1500

Closed
wants to merge 107 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
107 commits
Select commit Hold shift + click to select a range
b798d20
SiLabs Pearl: Initial commit
mpolojar Oct 8, 2015
fc8dd43
SiLabs: Update emlib to 4.1.0
mpolojar Oct 13, 2015
506ba84
SiLabs: Emlib 4.1.0 headers update for Giant Gecko
mpolojar Oct 23, 2015
3e699eb
SiLabs: Emlib 4.1.0 headers update for Happy Gecko
mpolojar Oct 26, 2015
3c233f6
SiLabs: Emlib 4.1.0 headers update for Leopard Gecko
mpolojar Oct 26, 2015
59c8ee2
SiLabs: Emlib 4.1.0 headers update for Wonder Gecko
mpolojar Oct 26, 2015
4fffd02
SiLabs: Emlib 4.1.0 headers update for Zero Gecko
mpolojar Oct 26, 2015
50773a2
SiLabs Pearl: Pin mappings for PWM
mpolojar Oct 9, 2015
4416ae7
SiLabs Pearl: GPIO HAL fixes
mpolojar Oct 9, 2015
16f25b7
SiLabs Pearl: RTCC support
mpolojar Oct 12, 2015
0296354
SiLabs Pearl: lp_ticker HAL adaptation
mpolojar Oct 12, 2015
6bb1740
SiLabs Pearl: Remove configuration for HW not present in Pearl
mpolojar Oct 13, 2015
d606eb6
SiLabs Pearl: Update pinmap for ADC and DAC
Oct 14, 2015
127c0d1
SiLabs Pearl: Mbed support for linker script
mpolojar Oct 14, 2015
d3faf7a
SiLabs Pearl: Correct STDIO_UART definition
mpolojar Oct 14, 2015
672bfc4
SiLabs Pearl: Fix I2C pin routing
mpolojar Oct 14, 2015
e9e8f95
SiLabs Pearl: Correct includes and interrupt names in RTC
mpolojar Oct 14, 2015
fe4db9e
SiLabs Pearl: LDMA initialization
mpolojar Oct 14, 2015
22bc348
SiLabs Pearl: AnalogIn support
Oct 15, 2015
6a3b59d
SiLabs Pearl: Serial HAL USART/LEUART pin routing
mpolojar Oct 15, 2015
8e4e063
SiLabs Pearl: LDMA support for serial_api
mpolojar Oct 15, 2015
f9e369e
SiLabs Pearl: ADC fixes
Oct 16, 2015
fc289b3
SiLabs Pearl: PWM output functionality
Oct 20, 2015
95b2765
SiLabs Pearl: LDMA fixes for serial
mpolojar Oct 20, 2015
58be3fc
SiLabs Pearl: I2C GPIO fix
Oct 22, 2015
1111df9
SiLabs Pearl: SPI pinmappings
Oct 23, 2015
1ff3a0b
SiLabs Pearl: SPI LDMA support
Oct 26, 2015
b957621
SiLabs: Fix interrupt amount configurations
mpolojar Oct 27, 2015
cd4db12
SiLabs Pearl: lpticker wakeup
Nov 4, 2015
012c251
SiLabs: Low power timer / RTC initialization fix
Nov 5, 2015
55ac8eb
SiLabs: Correct low power timer setup
Nov 9, 2015
56a3a8a
SiLabs: Multiple fixes for serial_api
mpolojar Nov 11, 2015
f9db4dd
SiLabs: Compilation fix for incorrect LFE clock flagging
mpolojar Nov 11, 2015
42a39a8
SiLabs: Fix infinite interrupt loop when using LEUART with DMA
mpolojar Nov 13, 2015
ad6c291
Silabs Pearl: Added a part number
Nov 13, 2015
5da0b3c
SiLabs Pearl: Free(er), dynamic allocation of UARTs
mpolojar Nov 16, 2015
e3838b7
SiLabs: Fix incorrect TX active conditional in serial_api
mpolojar Nov 16, 2015
0791844
SiLabs Pearl: Serial support for LEUART-USART switch
mpolojar Nov 17, 2015
f406d24
SiLabs: Fix compiler warnings and other cleanup
mpolojar Nov 19, 2015
ec1210f
SiLabs Pearl: Rename files and dirs to correct STK code
mpolojar Nov 20, 2015
b7ef78f
SiLabs: spi implementation
Nov 19, 2015
c56b85f
SiLabs Pearl: Support for ARM compiler toolchain
mpolojar Nov 20, 2015
f20d415
SiLabs Pearl: Allow serial transmitter disable on Pearl
mpolojar Nov 23, 2015
3915900
SiLabs Pearl: SPI support for 9-16 bit long frames
Nov 24, 2015
30a8b90
SiLabs Pearl: SPI fixes for 9-16 bit long frames
Nov 26, 2015
4f51c5c
SiLabs Pearl: Keep UART enabled during single byte transfers
mpolojar Nov 26, 2015
238b708
SiLabs: Update emlib to 4.2.0
mpolojar Nov 26, 2015
0fc4a22
SiLabs Pearl: More SPI fixes for 9-16 bit frames
Dec 1, 2015
dd87225
Silabs: SPI DMA fix
Dec 1, 2015
d1abfeb
Silabs Pearl: SPI LDMA descriptor fix
Dec 2, 2015
c3f9c5d
SiLabs: GPIO interrupts disabled/enabled incorrectly
mpolojar Dec 2, 2015
57464b9
SiLabs Pearl: I2C: Do not try to force specific locations of pins
mpolojar Dec 3, 2015
96bae7a
SiLabs: I2C: Always set master mode on initialization
mpolojar Dec 3, 2015
12e088e
SiLabs Pearl: SPI fixes
Dec 4, 2015
58ca7a7
SiLabs: port_api: Allow individual values on output pins and fix init
mpolojar Dec 4, 2015
4662336
SiLabs Pearl: Use any free UART for stdio
mpolojar Dec 7, 2015
d00aff9
SiLabs: serial_api: Fix LEUART interrupt dispatch
mpolojar Dec 8, 2015
20b5d46
SiLabs Pearl: SPI
Dec 9, 2015
1415c2c
Silabs: SPI
Dec 10, 2015
66f2e20
SiLabs: serial_api: Fixes for sleep, transmitter disable and uart switch
mpolojar Dec 10, 2015
b3859f7
SiLabs Pearl: Correct HFXO frequency
mpolojar Dec 10, 2015
025a111
SiLabs: analogout_api:
Dec 11, 2015
f100934
SiLabs Pearl: Minimize line glitches when doing LEUART-USART switch
mpolojar Dec 14, 2015
d07a530
SiLabs: serial_api: Unblock sleep correctly on TX side
mpolojar Dec 15, 2015
0cf5279
SiLabs Zero: Fix clocking when using LEUART for USB board controller
mpolojar Dec 15, 2015
49f6313
SiLabs: serial_api: Keep track of sleep mode changes
mpolojar Dec 16, 2015
c488618
SiLabs: serial_api: Fix memory underflow read in DMA handling
mpolojar Dec 16, 2015
a17c188
SiLabs: serial_api: Add missing object to sleep fix
mpolojar Dec 16, 2015
087720d
SiLabs: serial_api: Allow LEUART IRQ to fire both handlers
mpolojar Dec 16, 2015
428a138
SiLabs Pearl: Support for clocking via RC oscillators
mpolojar Dec 22, 2015
1ab9ced
EFM32 Pearl Gecko IAR support.
asmellby Dec 23, 2015
74d4316
Add EFM32 Pearl Gecko exporters.
asmellby Dec 23, 2015
b3ae952
EFM32: Fix HFRCO support for P2 devices.
asmellby Jan 4, 2016
7589eaa
EFM32 Pearl Gecko test pins.
asmellby Jan 4, 2016
8d51e4a
EFM32 Pearl Gecko SPI: Remove dynamic resource allocation.
asmellby Jan 4, 2016
a527a15
EFM32 Pearl Gecko Serial: Remove dynamic peripheral allocation.
asmellby Jan 4, 2016
e1fec94
Move to CMSIS defines to check for presence of certain LF clock trees
stevew817 Jan 5, 2016
e2deef9
Get rid of the check_usart_clock function which is unused and unneces…
stevew817 Jan 5, 2016
5559bb3
PWM refactoring to be less confusing with all the #ifdef for routes
stevew817 Jan 5, 2016
bf95e91
removed a line of code duplication
stevew817 Jan 5, 2016
179d211
Removed useless #error in analogin
stevew817 Jan 5, 2016
585b149
Update modules.h to reflect the actual configuration of Pearl Gecko.
stevew817 Jan 5, 2016
3b7f525
Remove unnecessary checking of bit before setting GPIO
stevew817 Jan 5, 2016
d17cfa9
Pinmap update for Pearl:
stevew817 Jan 5, 2016
985ef28
lp_ticker code condensation
stevew817 Jan 5, 2016
174aba9
Silence GCC
stevew817 Jan 5, 2016
552dcb1
Fixes to analogOut:
stevew817 Jan 5, 2016
cd511ac
Update serial_api to not rely on the maximum number of serial periphe…
stevew817 Jan 6, 2016
49a1a47
Cleanup in AnalogIn: remove functions that are unnecessary and no lon…
stevew817 Jan 6, 2016
8c3aa9b
analogout_api: clean up functions that are no longer part of the API.
stevew817 Jan 6, 2016
b7ff510
Sync port_api.c with port_api.h
stevew817 Jan 7, 2016
1004a73
Fixes to Pearl pinmap:
stevew817 Jan 8, 2016
b76b9a9
Reduce I2C object footprint
stevew817 Jan 8, 2016
a777552
Light documentation on the sleep API
stevew817 Jan 8, 2016
14111ad
Cleanup and bugfixes of the PWM implementation.
stevew817 Jan 8, 2016
0c3cf2d
Removed unnecessary code in _putc.
stevew817 Jan 8, 2016
18aacdc
No need to set up the interrupt handler every single time in lp_ticker.
stevew817 Jan 8, 2016
157bfd2
Fix version mismatch between included emlib and readme
stevew817 Jan 8, 2016
9169a7c
Fix error in comment
stevew817 Jan 8, 2016
83eaf5a
Demote LDMA interrupt priority. We assume that completion of a DMA tr…
stevew817 Jan 8, 2016
b6cf8f0
Remove static define that would result in erroneous code when unset, …
stevew817 Jan 8, 2016
1731a6a
Typo in AnalogOut
stevew817 Jan 11, 2016
7813922
SiLabs: Remove emlib LDMA modifications
mpolojar Jan 12, 2016
625dc6c
Update emlib to 4.2.1 to get a critical fix for DCDC on Pearl
stevew817 Jan 12, 2016
fb81869
Fix Pearl chip SKU and core ID in targets.
stevew817 Jan 12, 2016
5a0e408
Pull up EFM32 linker and startup files to latest SDK version.
stevew817 Jan 12, 2016
bf94582
Add back the manual placement of the DMA section for GCC to optimize …
stevew817 Jan 12, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ LR_IROM1 0x00000000 0x00100000 { ; load region size_region
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x200000E0 0x0001FF20 { ; RW data
RW_IRAM1 0x200000DC 0x0001FF24 { ; RW data
.ANY (+RW +ZI)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
; * @file startup_efm32gg.s
; * @brief CMSIS Core Device Startup File for
; * Silicon Labs EFM32GG Device Series
; * @version 3.20.6
; * @version 4.2.1
; * @date 03. February 2012
; *
; * @note
Expand Down Expand Up @@ -262,10 +262,7 @@ MSC_IRQHandler
AES_IRQHandler
EBI_IRQHandler
EMU_IRQHandler


B .

ENDP

ALIGN
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ LR_IROM1 0x00000000 0x00100000 { ; load region size_region
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x200000E0 0x0001FF20 { ; RW data
RW_IRAM1 0x200000DC 0x0001FF24 { ; RW data
.ANY (+RW +ZI)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
; * @file startup_efm32gg.s
; * @brief CMSIS Core Device Startup File for
; * Silicon Labs EFM32GG Device Series
; * @version 3.20.6
; * @version 4.2.1
; * @date 03. February 2012
; *
; * @note
Expand Down Expand Up @@ -262,10 +262,7 @@ MSC_IRQHandler
AES_IRQHandler
EBI_IRQHandler
EMU_IRQHandler


B .

ENDP

ALIGN
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,11 @@
/* CMSIS END USER LICENSE AGREEMENT.pdf, governing the use of */
/* Example Code. */
/* */
/* Silicon Laboratories, Inc. 2014 */
/* Silicon Laboratories, Inc. 2015 */
/* */
/* Version 4.2.0 */
/* */

MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 1048576
Expand All @@ -13,16 +17,20 @@ MEMORY
/* MBED: mbed needs to be able to dynamically set the interrupt vector table.
* We make room for the table at the very beginning of RAM, i.e. at
* 0x20000000. We need (16+39) * sizeof(uint32_t) = 220 bytes for EFM32GG */
__vector_size = 0xE0;
__vector_size = 0xDC;

/* Linker script to place sections and symbol values. Should be used together
* with other linker script that defines memory regions FLASH and RAM.
* It references following symbols, which must be defined in code:
* Reset_Handler : Entry of reset handler
*
*
* It defines following symbols, which code can use without definition:
* __exidx_start
* __exidx_end
* __copy_table_start__
* __copy_table_end__
* __zero_table_start__
* __zero_table_end__
* __etext
* __data_start__
* __preinit_array_start
Expand All @@ -40,14 +48,20 @@ __vector_size = 0xE0;
* __StackLimit
* __StackTop
* __stack
* __Vectors_End
* __Vectors_Size
*/
ENTRY(Reset_Handler)

SECTIONS
{
.text :
{
KEEP(*(.isr_vector))
KEEP(*(.vectors))
__Vectors_End = .;
__Vectors_Size = __Vectors_End - __Vectors;
__end__ = .;

*(.text*)

KEEP(*(.init))
Expand All @@ -72,7 +86,7 @@ SECTIONS
KEEP(*(.eh_frame*))
} > FLASH

.ARM.extab :
.ARM.extab :
{
*(.ARM.extab* .gnu.linkonce.armextab.*)
} > FLASH
Expand All @@ -84,15 +98,49 @@ SECTIONS
} > FLASH
__exidx_end = .;

/* To copy multiple ROM to RAM sections,
* uncomment .copy.table section and,
* define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */
/*
.copy.table :
{
. = ALIGN(4);
__copy_table_start__ = .;
LONG (__etext)
LONG (__data_start__)
LONG (__data_end__ - __data_start__)
LONG (__etext2)
LONG (__data2_start__)
LONG (__data2_end__ - __data2_start__)
__copy_table_end__ = .;
} > FLASH
*/

/* To clear multiple BSS sections,
* uncomment .zero.table section and,
* define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */
/*
.zero.table :
{
. = ALIGN(4);
__zero_table_start__ = .;
LONG (__bss_start__)
LONG (__bss_end__ - __bss_start__)
LONG (__bss2_start__)
LONG (__bss2_end__ - __bss2_start__)
__zero_table_end__ = .;
} > FLASH
*/

__etext = .;

.data : AT (__etext)
{
__data_start__ = .;
*("dma")
PROVIDE( __start_vector_table__ = .);
. += __vector_size;
PROVIDE( __end_vector_table__ = .);
. += __vector_size;
PROVIDE( __end_vector_table__ = .);
*(vtable)
*(.data*)
. = ALIGN (4);
Expand All @@ -118,6 +166,7 @@ SECTIONS
KEEP(*(.fini_array))
PROVIDE_HIDDEN (__fini_array_end = .);

KEEP(*(.jcr*))
. = ALIGN(4);
/* All data end */
__data_end__ = .;
Expand All @@ -126,27 +175,30 @@ SECTIONS

.bss :
{
. = ALIGN(4);
__bss_start__ = .;
*(.bss*)
*(COMMON)
. = ALIGN(4);
__bss_end__ = .;
} > RAM

.heap :
.heap (COPY):
{
__HeapBase = .;
__end__ = .;
end = __end__;
_end = __end__;
*(.heap*)
KEEP(*(.heap*))
__HeapLimit = .;
} > RAM

/* .stack_dummy section doesn't contains any symbols. It is only
* used for linker to calculate size of stack sections, and assign
* values to stack symbols later */
.stack_dummy :
.stack_dummy (COPY):
{
*(.stack)
KEEP(*(.stack*))
} > RAM

/* Set stack top to end of RAM, and stack limit move down by
Expand All @@ -157,4 +209,7 @@ SECTIONS

/* Check if data + heap + stack exceeds RAM limit */
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")

/* Check if FLASH usage exceeds FLASH size */
ASSERT( LENGTH(FLASH) >= (__etext + SIZEOF(.data)), "FLASH memory overflowed !")
}
Loading