This appilcation is a prototype of Internet Radio designed on ARC EM Starter Kit,which could find music from online audition websites,like douban FM,Baidu FM,KuWo,Download mp3 file among the music,and decode them by using ARC DSP Instruction and optimized code for mp3 decode.By adding a I2S peripheral with a FPGA,song can be sent out and outputted from two speaker.
iRhythm is a Internet Radio,which can download music from online audition websites,decompress the file and play,while the music file in SD card can also be decoded and played. With the help of a FPGA, the digital music data in SPI format can be converted into I2S format,which can be recognize by audio D/A convertor. Through an amplifier outside,the online music can be play out from two big speaker.And it's a really good feeling!
- Online Music Crawling and Download
- Decode Mp3 file
- Protocol transit form SPI to I2S
- Power Amplification
- Performance data display
- Necessary Hardware:
- DesignWare ARC EM Starter Kit(EMSK) *1
- SD card *1
- ESP8266 *1
- Cmod A7 XC7A35T FPGA develop board *1
- Pmod I2S *1
- OLED(12864) *1
- Headphone *1
- Additional Hardware:
- Lipo Battery *1
- Buck power regulator *2
- Audio Amplifiers *1
- Speaker *1
- embarc_ops newest commit:976b8ed3b24b061df91f78bcc71a726dd2a63fae
- Metaware or ARC GNU Toolset
- Serial port terminal, such as putty, tera-term or minicom
- Any bitstream file can config your FPGA as a SPI to I2S protocol interface
- More than one MP3 file in SD card to avoid waiting while downloading
- Insert your SD card with mp3 file in it.
- Make sure all your module has been mounted on the board.
- Make sure your power regulator connect is correct,including the voltage and polarity, or the prototype may be damaged
- Connect your 3.5 inch Audio cable.
- After all connector has been connected correctly,connect the Li-po battery to power up the design.
- Download source code of iRhythm from github.
- Download ./doc/spi2i2s.bit,which is the bitstram file of Cmod A7 to extend a i2s peripherals
- Make sure all connection is correct again.
- Make sure iRhythm is in the Wifi environment,which is matching with the setting in the code,including wifi name and wifi password.
- Check the switch 1 and 2 of EMSK are in off state to boot as ARCem_7d core.
- Download with USB-JTAG or use bootloader to boot the program.
- After iRhythm connect the wifi,initialization will complete very fast and OLED may light to show the song reading from SD card.
- After that song can be heard from the speaker and OLED shows download speed and decode speed.If not,try to rotate the volume bar to increase the volume.
- the user can control with the key any time.
- Selected FreeRTOS here, then you can use FreeRTOS API in your application:
# Selected OS OS_SEL ?= freertos
- Target options about EMSK and toolchain:
TOOLCHAIN=gnu BOARD=emsk BD_VER=23 CUR_CORE=arcem7d
- The relative series of the root directory, here the path of the Makefile is
./embarc_osp/application/iRhythm/makefile
:
# # root dir of embARC # EMBARC_ROOT = ../..
- Directories of source files and header files, notice that it is not recursive:
# application source dirs APPL_CSRC_DIR = ./src/GUI ./src/MUSIC ./src/MUSIC/mp3_dec ./src/MUSIC/mp3_dec/mp3_Ori ./src/MUSIC/mp3_dec/mp3_Dsp ./src/HW_ASSI ./src/NET ./src/NET/esp8266_wifi ./src/TASK APPL_ASMSRC_DIR = .
# application include dirs APPL_INC_DIR = ./inc ./inc/mp3_dec APPL_DEFINES =
- Directories of Linker Script File,to use CCM
# linker script file LINKER_SCRIPT_FILE ?= linker_file.ldf
See embARC Example User Guide, "Options to Hard-Code in the Application Makefile" for more detailed information about Makefile Options.
Placing the GUI source code in src/GUI
folder.
Placing the C source file.
folder/file | Function |
---|---|
gui.c | gui control reflash |
key.c | key interrupt callback |
Placing the HW_ASSI source code in src/HW_ASSI
folder.
Placing the C source file.
folder/file | Function |
---|---|
dma2spi.c | dma configuration for spi |
iosignal.c | IO initialization |
mem.c | SD file read |
Placing the MUSIC source code in src/MUSIC
folder.
Placing the C source file.
folder/file | Function |
---|---|
mp3_dec/ | walkgeek library for mp3 decode |
filelist.c | api for link list control |
mp3api.c | top lever Api of mp3 decode |
music.c | music task top lever api |
Placing the NET source code in src/NET
folder.
Placing the C source file.
folder/file | Function |
---|---|
esp8266_wifi/ | control api for ESP8266 |
net.c | api for net task |
Placing the TASK source code in src/TASK
folder.
Placing the C source file.
folder/file | Function |
---|---|
GUI_task.c | main function of gui task |
MUSIC_task.c | main function of mussic task |
NET_task.c | main function of net task |
main.c | start application |
Placing the INCLUDE source code in inc
folder.
Placing the HEADER source file.
folder/file | Function |
---|---|
mp3_dec | walkgeek library for mp3 decode |
at_parser.h/esp8266.h | control api for ESP8266 |
include.h | all declaration of c file |
perform.h/inc_task.h | api for debuging |
FreeRTOSConfig.h | configuration of ROTS |
ssd1306_app_config.h | configuration of u8glib |
Placing the DSP source code in inc
folder.
Placing the HEADER source file.
folder/file | Function |
---|---|
Dsp_assembly.h | optimize code for Arc Dsp |