# iRhythm 互联网 MP3 收音机
该设备是在ARC EM Starter Kit上设计的**Internet Radio**的原型,可以从在线试听网站中找到音乐,如*豆瓣FM*,*百度FM*,*酷我*,在音乐中下载mp3文件,并使用**ARC DSP指令**和**优化代码**进行mp3解码。通过添加带有 FPGA** 的 I2S 外设,可以从两个 **扬声器**发出和输出歌曲。
-----------------------------------------
*[简介](#Introduction)
-[功能](#function)
- [系统架构](#system 架构)
- [外观](#appearance)
- [视频](#video)
* [硬件和软件设置](#hardware-and-software-setup)
- [Required Hardware](#required-hardware)
- [Required Software](#required-software)
- [Hardware Connection](#hardware-connection)
* [用户使用手册](#user-manual)
- [在运行此应用程序之前](#before-running-this-application)
- [运行此应用程序](#run-this-application)
-------------------------------
## 简介
iRhythm是一款网络电台,可以从在线试听网站下载音乐,解压文件并播放,同时SD卡中的音乐文件也可以解码和播放。
借助FPGA,可以将SPI格式的数字音乐数据转换为I2S格式,音频D/A转换器可以识别。
通过外部的放大器,可以从两个大扬声器中播放在线音乐。这种感觉真的很好!
### 功能
* 在线音乐爬行和下载
* 解码 Mp3 文件
* 协议传输形式:SPI 到 I2S
* 功率放大
* 性能数据显示
### 系统架构
![System Architecture][1]
### 外观
* **系统顶视图 -- 控制部分**
![Control Part][2]
* **系统中视图--信号处理部分**
![Signal Processing Part][3]
![Signal Processing Part][4]
* **系统底视图 -- 输出部分**
![Output Part][5]
* **系统视图**
![iRhythm][6]
### 视频
[ iRhythm demo video ][7]
## 硬件和软件设置
-------------------------------
### 所需硬件
* 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
![Necessary Hardware][8]
--------------------------------
* 其他硬件:
- Lipo Battery *1
- Buck power regulator *2
- Audio Amplifiers *1
- Speaker *1
![Additional Hardware][9]
---------------------------------
### 所需软件
* 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
### 硬件连接
1. Insert your SD card with mp3 file in it.
2. Make sure all your module has been mounted on the board.
3. Make sure your power regulator connect is correct,including the voltage and polarity, or the prototype may be damaged
4. Connect your 3.5 inch Audio cable.
5. After all connector has been connected correctly,connect the Li-po battery to power up the design.
## 用户使用手册
### 在运行此应用程序之前
* 下载 iRhythm 的源代码。
* 下载 ./doc/spi2i2s.bit,这是 Cmod A7 的 bitstram 文件,用于扩展 i2s 外设
* 再次确保所有连接都正确无误。
*确保 iRhythm 处于 Wifi 环境中,与代码中的设置匹配,包括 wifi 名称和 wifi 密码。
* 检查 EMSK 的开关 1 和 2 是否处于关闭状态,以作为 ARCem_7d 核心启动。
### 运行此应用程序
* 使用USB-JTAG下载或使用引导加载程序启动程序。
* iRhythm 连接 wifi 后,初始化将非常快地完成,OLED 可能会亮起以显示从 SD 卡读取的歌曲。
* 之后,可以从扬声器听到这首歌,OLED显示下载速度和解码速度。如果没有,请尝试旋转音量条以增大音量。
* 用户可以随时使用钥匙进行控制。
#### 生成文件
- 在此处选择 FreeRTOS,然后您可以在应用程序中使用 [FreeRTOS API][10]:
>> # 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][11], **"Options to Hard-Code in the Application Makefile"** for more detailed information about **Makefile Options**.
#### GUI
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 |
#### HW_ASSI
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 |
#### MUSIC
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 |
#### NET
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 |
#### 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 |
#### INCLUDE
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 |
#### DSP
Placing the DSP source code in `inc` folder.
Placing the HEADER source file.
| folder/file | Function |
| ------------------- | -------------