Tasks
Using 7 tasks
1 task to run the menu screen
1 task to read song information (metadata) from mp3 file
1 task to send mp3 to decoder (play song)
1 task to control volume (read from ADC)
1 task to send data to LCD screen (through Uart)
1 task to handle button interface (GPIO)
1 task to monitor CPU usage
Drivers
SPI for interfacing audio decoder
Uart for interfacing LCD screen
ADC for volume from POT
GPIO for button interface
library for interfacing audio codec
Synchronization
Binary Semaphores
1 to signal song metadata read
1 to display song info
1 to initiate song playback
1 to begin volume control (read from ADC)
1 to initiate user input
Mutex
1 lock for screen data
1 lock for volume