AUDIO loopback with DISCO_H747I

Dependencies:   BSP_DISCO_H747I

Building

hg clone https://mbed.org/teams/ST/code/DISCO_H747I_AUDIO_demo

cd DISCO_H747I_AUDIO_demo

mbed deploy

mbed compile -m DISCO_H747I -t <GCC_ARM/ARM/IAR> -f

Running

A single printf is done at main start

Audio is recorded from board micro (U21) next to joystick.

Audio output is the jack connector (CN11) (green one).

Warning

Audio configuration is not compatible with Ethernet HW patch

https://os.mbed.com/teams/ST/wiki/DISCO_H747I-modifications-for-Ethernet

Committer:
Jerome Coutant
Date:
Thu Nov 07 11:33:58 2019 +0100
Revision:
0:78e37c7585e6
First commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jerome Coutant 0:78e37c7585e6 1 /* Linker script to configure memory regions. */
Jerome Coutant 0:78e37c7585e6 2 /*******************************************************************************
Jerome Coutant 0:78e37c7585e6 3 * @attention
Jerome Coutant 0:78e37c7585e6 4 *
Jerome Coutant 0:78e37c7585e6 5 * Copyright (c) 2018-2019 STMicroelectronics.
Jerome Coutant 0:78e37c7585e6 6 * All rights reserved.
Jerome Coutant 0:78e37c7585e6 7 *
Jerome Coutant 0:78e37c7585e6 8 * This software component is licensed by ST under BSD 3-Clause license,
Jerome Coutant 0:78e37c7585e6 9 * the "License"; You may not use this file except in compliance with the
Jerome Coutant 0:78e37c7585e6 10 * License. You may obtain a copy of the License at:
Jerome Coutant 0:78e37c7585e6 11 * opensource.org/licenses/BSD-3-Clause
Jerome Coutant 0:78e37c7585e6 12 *
Jerome Coutant 0:78e37c7585e6 13 ******************************************************************************
Jerome Coutant 0:78e37c7585e6 14 */
Jerome Coutant 0:78e37c7585e6 15
Jerome Coutant 0:78e37c7585e6 16 #if !defined(MBED_APP_START)
Jerome Coutant 0:78e37c7585e6 17 #define MBED_APP_START 0x08000000
Jerome Coutant 0:78e37c7585e6 18 #endif
Jerome Coutant 0:78e37c7585e6 19
Jerome Coutant 0:78e37c7585e6 20 #if !defined(MBED_APP_SIZE)
Jerome Coutant 0:78e37c7585e6 21 #define MBED_APP_SIZE 1024K
Jerome Coutant 0:78e37c7585e6 22 #endif
Jerome Coutant 0:78e37c7585e6 23
Jerome Coutant 0:78e37c7585e6 24 #if !defined(MBED_BOOT_STACK_SIZE)
Jerome Coutant 0:78e37c7585e6 25 #define MBED_BOOT_STACK_SIZE 0x400
Jerome Coutant 0:78e37c7585e6 26 #endif
Jerome Coutant 0:78e37c7585e6 27
Jerome Coutant 0:78e37c7585e6 28 STACK_SIZE = MBED_BOOT_STACK_SIZE;
Jerome Coutant 0:78e37c7585e6 29
Jerome Coutant 0:78e37c7585e6 30 MEMORY
Jerome Coutant 0:78e37c7585e6 31 {
Jerome Coutant 0:78e37c7585e6 32 FLASH (rx) : ORIGIN = MBED_APP_START, LENGTH = MBED_APP_SIZE
Jerome Coutant 0:78e37c7585e6 33 DTCMRAM (rwx) : ORIGIN = 0x20000298, LENGTH = 128K-0x298
Jerome Coutant 0:78e37c7585e6 34 RAM (xrw) : ORIGIN = 0x24000000, LENGTH = 512K
Jerome Coutant 0:78e37c7585e6 35 RAM_D2 (xrw) : ORIGIN = 0x30000000, LENGTH = 288K
Jerome Coutant 0:78e37c7585e6 36 RAM_D3 (xrw) : ORIGIN = 0x38000000, LENGTH = 64K
Jerome Coutant 0:78e37c7585e6 37 ITCMRAM (xrw) : ORIGIN = 0x00000000, LENGTH = 64K
Jerome Coutant 0:78e37c7585e6 38 }
Jerome Coutant 0:78e37c7585e6 39
Jerome Coutant 0:78e37c7585e6 40 /* Linker script to place sections and symbol values. Should be used together
Jerome Coutant 0:78e37c7585e6 41 * with other linker script that defines memory regions FLASH and RAM.
Jerome Coutant 0:78e37c7585e6 42 * It references following symbols, which must be defined in code:
Jerome Coutant 0:78e37c7585e6 43 * Reset_Handler : Entry of reset handler
Jerome Coutant 0:78e37c7585e6 44 *
Jerome Coutant 0:78e37c7585e6 45 * It defines following symbols, which code can use without definition:
Jerome Coutant 0:78e37c7585e6 46 * __exidx_start
Jerome Coutant 0:78e37c7585e6 47 * __exidx_end
Jerome Coutant 0:78e37c7585e6 48 * __etext
Jerome Coutant 0:78e37c7585e6 49 * __data_start__
Jerome Coutant 0:78e37c7585e6 50 * __preinit_array_start
Jerome Coutant 0:78e37c7585e6 51 * __preinit_array_end
Jerome Coutant 0:78e37c7585e6 52 * __init_array_start
Jerome Coutant 0:78e37c7585e6 53 * __init_array_end
Jerome Coutant 0:78e37c7585e6 54 * __fini_array_start
Jerome Coutant 0:78e37c7585e6 55 * __fini_array_end
Jerome Coutant 0:78e37c7585e6 56 * __data_end__
Jerome Coutant 0:78e37c7585e6 57 * __bss_start__
Jerome Coutant 0:78e37c7585e6 58 * __bss_end__
Jerome Coutant 0:78e37c7585e6 59 * __end__
Jerome Coutant 0:78e37c7585e6 60 * end
Jerome Coutant 0:78e37c7585e6 61 * __HeapLimit
Jerome Coutant 0:78e37c7585e6 62 * __StackLimit
Jerome Coutant 0:78e37c7585e6 63 * __StackTop
Jerome Coutant 0:78e37c7585e6 64 * __stack
Jerome Coutant 0:78e37c7585e6 65 * _estack
Jerome Coutant 0:78e37c7585e6 66 */
Jerome Coutant 0:78e37c7585e6 67 ENTRY(Reset_Handler)
Jerome Coutant 0:78e37c7585e6 68
Jerome Coutant 0:78e37c7585e6 69 SECTIONS
Jerome Coutant 0:78e37c7585e6 70 {
Jerome Coutant 0:78e37c7585e6 71 .text :
Jerome Coutant 0:78e37c7585e6 72 {
Jerome Coutant 0:78e37c7585e6 73 KEEP(*(.isr_vector))
Jerome Coutant 0:78e37c7585e6 74 *(.text*)
Jerome Coutant 0:78e37c7585e6 75 KEEP(*(.init))
Jerome Coutant 0:78e37c7585e6 76 KEEP(*(.fini))
Jerome Coutant 0:78e37c7585e6 77
Jerome Coutant 0:78e37c7585e6 78 /* .ctors */
Jerome Coutant 0:78e37c7585e6 79 *crtbegin.o(.ctors)
Jerome Coutant 0:78e37c7585e6 80 *crtbegin?.o(.ctors)
Jerome Coutant 0:78e37c7585e6 81 *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
Jerome Coutant 0:78e37c7585e6 82 *(SORT(.ctors.*))
Jerome Coutant 0:78e37c7585e6 83 *(.ctors)
Jerome Coutant 0:78e37c7585e6 84
Jerome Coutant 0:78e37c7585e6 85 /* .dtors */
Jerome Coutant 0:78e37c7585e6 86 *crtbegin.o(.dtors)
Jerome Coutant 0:78e37c7585e6 87 *crtbegin?.o(.dtors)
Jerome Coutant 0:78e37c7585e6 88 *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
Jerome Coutant 0:78e37c7585e6 89 *(SORT(.dtors.*))
Jerome Coutant 0:78e37c7585e6 90 *(.dtors)
Jerome Coutant 0:78e37c7585e6 91
Jerome Coutant 0:78e37c7585e6 92 *(.rodata*)
Jerome Coutant 0:78e37c7585e6 93
Jerome Coutant 0:78e37c7585e6 94 KEEP(*(.eh_frame*))
Jerome Coutant 0:78e37c7585e6 95 } > FLASH
Jerome Coutant 0:78e37c7585e6 96
Jerome Coutant 0:78e37c7585e6 97 .ARM.extab :
Jerome Coutant 0:78e37c7585e6 98 {
Jerome Coutant 0:78e37c7585e6 99 *(.ARM.extab* .gnu.linkonce.armextab.*)
Jerome Coutant 0:78e37c7585e6 100 } > FLASH
Jerome Coutant 0:78e37c7585e6 101
Jerome Coutant 0:78e37c7585e6 102 __exidx_start = .;
Jerome Coutant 0:78e37c7585e6 103 .ARM.exidx :
Jerome Coutant 0:78e37c7585e6 104 {
Jerome Coutant 0:78e37c7585e6 105 *(.ARM.exidx* .gnu.linkonce.armexidx.*)
Jerome Coutant 0:78e37c7585e6 106 } > FLASH
Jerome Coutant 0:78e37c7585e6 107 __exidx_end = .;
Jerome Coutant 0:78e37c7585e6 108
Jerome Coutant 0:78e37c7585e6 109 __etext = .;
Jerome Coutant 0:78e37c7585e6 110 _sidata = .;
Jerome Coutant 0:78e37c7585e6 111
Jerome Coutant 0:78e37c7585e6 112 .data : AT (__etext)
Jerome Coutant 0:78e37c7585e6 113 {
Jerome Coutant 0:78e37c7585e6 114 __data_start__ = .;
Jerome Coutant 0:78e37c7585e6 115 _sdata = .;
Jerome Coutant 0:78e37c7585e6 116 *(vtable)
Jerome Coutant 0:78e37c7585e6 117 *(.data*)
Jerome Coutant 0:78e37c7585e6 118
Jerome Coutant 0:78e37c7585e6 119 . = ALIGN(8);
Jerome Coutant 0:78e37c7585e6 120 /* preinit data */
Jerome Coutant 0:78e37c7585e6 121 PROVIDE_HIDDEN (__preinit_array_start = .);
Jerome Coutant 0:78e37c7585e6 122 KEEP(*(.preinit_array))
Jerome Coutant 0:78e37c7585e6 123 PROVIDE_HIDDEN (__preinit_array_end = .);
Jerome Coutant 0:78e37c7585e6 124
Jerome Coutant 0:78e37c7585e6 125 . = ALIGN(8);
Jerome Coutant 0:78e37c7585e6 126 /* init data */
Jerome Coutant 0:78e37c7585e6 127 PROVIDE_HIDDEN (__init_array_start = .);
Jerome Coutant 0:78e37c7585e6 128 KEEP(*(SORT(.init_array.*)))
Jerome Coutant 0:78e37c7585e6 129 KEEP(*(.init_array))
Jerome Coutant 0:78e37c7585e6 130 PROVIDE_HIDDEN (__init_array_end = .);
Jerome Coutant 0:78e37c7585e6 131
Jerome Coutant 0:78e37c7585e6 132
Jerome Coutant 0:78e37c7585e6 133 . = ALIGN(8);
Jerome Coutant 0:78e37c7585e6 134 /* finit data */
Jerome Coutant 0:78e37c7585e6 135 PROVIDE_HIDDEN (__fini_array_start = .);
Jerome Coutant 0:78e37c7585e6 136 KEEP(*(SORT(.fini_array.*)))
Jerome Coutant 0:78e37c7585e6 137 KEEP(*(.fini_array))
Jerome Coutant 0:78e37c7585e6 138 PROVIDE_HIDDEN (__fini_array_end = .);
Jerome Coutant 0:78e37c7585e6 139
Jerome Coutant 0:78e37c7585e6 140 KEEP(*(.jcr*))
Jerome Coutant 0:78e37c7585e6 141 . = ALIGN(8);
Jerome Coutant 0:78e37c7585e6 142 /* All data end */
Jerome Coutant 0:78e37c7585e6 143 __data_end__ = .;
Jerome Coutant 0:78e37c7585e6 144 _edata = .;
Jerome Coutant 0:78e37c7585e6 145
Jerome Coutant 0:78e37c7585e6 146 } > RAM
Jerome Coutant 0:78e37c7585e6 147
Jerome Coutant 0:78e37c7585e6 148 .bss :
Jerome Coutant 0:78e37c7585e6 149 {
Jerome Coutant 0:78e37c7585e6 150 . = ALIGN(8);
Jerome Coutant 0:78e37c7585e6 151 __bss_start__ = .;
Jerome Coutant 0:78e37c7585e6 152 _sbss = .;
Jerome Coutant 0:78e37c7585e6 153 *(.bss*)
Jerome Coutant 0:78e37c7585e6 154 *(COMMON)
Jerome Coutant 0:78e37c7585e6 155 . = ALIGN(8);
Jerome Coutant 0:78e37c7585e6 156 __bss_end__ = .;
Jerome Coutant 0:78e37c7585e6 157 _ebss = .;
Jerome Coutant 0:78e37c7585e6 158 } > RAM
Jerome Coutant 0:78e37c7585e6 159
Jerome Coutant 0:78e37c7585e6 160 .heap (COPY):
Jerome Coutant 0:78e37c7585e6 161 {
Jerome Coutant 0:78e37c7585e6 162 __end__ = .;
Jerome Coutant 0:78e37c7585e6 163 end = __end__;
Jerome Coutant 0:78e37c7585e6 164 *(.heap*)
Jerome Coutant 0:78e37c7585e6 165 . = ORIGIN(RAM) + LENGTH(RAM) - STACK_SIZE;
Jerome Coutant 0:78e37c7585e6 166 __HeapLimit = .;
Jerome Coutant 0:78e37c7585e6 167 } > RAM
Jerome Coutant 0:78e37c7585e6 168
Jerome Coutant 0:78e37c7585e6 169
Jerome Coutant 0:78e37c7585e6 170 /* .stack_dummy section doesn't contains any symbols. It is only
Jerome Coutant 0:78e37c7585e6 171 * used for linker to calculate size of stack sections, and assign
Jerome Coutant 0:78e37c7585e6 172 * values to stack symbols later */
Jerome Coutant 0:78e37c7585e6 173 .stack_dummy (COPY):
Jerome Coutant 0:78e37c7585e6 174 {
Jerome Coutant 0:78e37c7585e6 175 *(.stack*)
Jerome Coutant 0:78e37c7585e6 176 } > RAM
Jerome Coutant 0:78e37c7585e6 177
Jerome Coutant 0:78e37c7585e6 178 /* Set stack top to end of RAM, and stack limit move down by
Jerome Coutant 0:78e37c7585e6 179 * size of stack_dummy section */
Jerome Coutant 0:78e37c7585e6 180 __StackTop = ORIGIN(RAM) + LENGTH(RAM);
Jerome Coutant 0:78e37c7585e6 181 _estack = __StackTop;
Jerome Coutant 0:78e37c7585e6 182 __StackLimit = __StackTop - STACK_SIZE;
Jerome Coutant 0:78e37c7585e6 183 PROVIDE(__stack = __StackTop);
Jerome Coutant 0:78e37c7585e6 184
Jerome Coutant 0:78e37c7585e6 185 /* Check if data + heap + stack exceeds RAM limit */
Jerome Coutant 0:78e37c7585e6 186 ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
Jerome Coutant 0:78e37c7585e6 187
Jerome Coutant 0:78e37c7585e6 188 .RAM_D3 (NOLOAD):
Jerome Coutant 0:78e37c7585e6 189 {
Jerome Coutant 0:78e37c7585e6 190 *(.RAM_D3)
Jerome Coutant 0:78e37c7585e6 191 } >RAM_D3
Jerome Coutant 0:78e37c7585e6 192 }