Firmware spelunking

This page was not written by Julian! These are just my notes from a beginning microcontroller programmer exploring the firmware.

Overview
The drumsynth firmware (ie., not the interface board) is divided into a few logical parts: the hardware handling, the communications interfaces (MIDI via UART and USB, SD over SPI), the sound generation and the sequencer.

Files and folders
├── AudioCodecManager │  ├── AudioCodecManager.c  │   └── AudioCodecManager.h  ├── config.h  ├── datatypes.h  ├── DSPAudio │  ├── 1PoleLp.c   │   ├── 1PoleLp.h  │   ├── automationNode.c  │   ├── automationNode.h  │   ├── BufferTools.c  │   ├── BufferTools.h   │   ├── CymbalVoice.c   │   ├── CymbalVoice.h  │   ├── Decay.c  │   ├── Decay.h  │   ├── distortion.c  │   ├── distortion.h  │   ├── dither.c  │   ├── dither.h  │   ├── DrumVoice.c  │   ├── DrumVoice.h  │   ├── HiHat.c  │   ├── HiHat.h  │   ├── lfo.c  │   ├── lfo.h  │   ├── mixer.c  │   ├── mixer.h  │   ├── modulationNode.c  │   ├── modulationNode.h  │   ├── Oscillator.c  │   ├── Oscillator.h  │   ├── random.c  │   ├── random.h  │   ├── ResonantFilter.c  │   ├── ResonantFilter.h  │   ├── Samples.c  │   ├── Samples.h  │   ├── SlopeEg2.c  │   ├── SlopeEg2.h  │   ├── snapEg.c  │   ├── snapEg.h  │   ├── Snare.c  │   ├── Snare.h  │   ├── squareRootLut.c  │   ├── squareRootLut.h  │   ├── transientGenerator.c  │   ├── transientGenerator.h  │   ├── transientTables.c  │   ├── transientTables.h  │   ├── wavetable.c  │   └── wavetable.h  ├── globals.h  ├── hardfaultHandler.c  ├── hardfault.S  ├── Hardware │  ├── cs4344_cs5343.c  │   ├── cs4344_cs5343.h  │   ├── FIFO.c  │   ├── FIFO.h  │   ├── SD_FAT │  │   ├── diskIo.c  │   │   ├── diskio.h  │   │   ├── ff.c  │   │   ├── ffconf.h  │   │   ├── ff.h  │   │   ├── integer.h  │   │   ├── SD_Manager.c  │   │   ├── SD_Manager.h  │   │   ├── SD_routines.c  │   │   ├── sd_routines.h  │   │   ├── SPI_routines.c  │   │   └── SPI_routines.h  │   ├── TriggerOut.c  │   ├── TriggerOut.h  │   └── USB │      ├── usb_bsp.c  │       ├── usbd_desc.c  │       ├── usbd_desc.h  │       ├── usbd_usr.c  │       ├── usb_manager.c  │       ├── usb_manager.h  │       ├── usb_midi_core.c  │       └── usb_midi_core.h  ├── main.c  ├── MIDI │  ├── frontPanelParser.c  │   ├── frontPanelParser.h  │   ├── MidiMessages.h  │   ├── MidiNoteNumbers.h  │   ├── MidiParser.c  │   ├── MidiParser.h  │   ├── MidiVoiceControl.c  │   ├── MidiVoiceControl.h  │   ├── ParameterArray.c  │   ├── ParameterArray.h  │   ├── Uart.c  │   ├── Uart.h  │   └── valueShaper.h  ├── SampleRom │  ├── flash_if.c  │   ├── flash_if.h  │   ├── SampleMemory.c  │   └── SampleMemory.h  ├── Sequencer │  ├── clockSync.c  │   ├── clockSync.h  │   ├── EuklidGenerator.c  │   ├── EuklidGenerator.h  │   ├── sequencer.c  │   ├── sequencer.h  │   ├── SomData.c  │   ├── SomData.h  │   ├── SomGenerator.c  │   └── SomGenerator.h  ├── startup_stm32f4xx.S  ├── stm32f4xx_conf.h  ├── stm32f4xx_it.c  ├── stm32f4xx_it.h  └── system_stm32f4xx.c

Communications
mainboard (stm32) <-> frontpanel(AVR) => UART

SD-Card (AVR + STM32) => SPI

Codec <-> STM32 => I2S