1. SDK说明
1.1. SDK工程选择
- SDK一般会有以下工程:
voice_toy工程:该工程有完整发声玩具功能,能实现解码、MIDI功能;同时将VM、按键、休眠应用在工程中;使用4 cache way,所以 CPU指令运行效率最高。
voice_enhanced工程:该工程包含voice_toy工程所有功能,使用2 cache way,多腾出了8K RAM 给开发使用,支持了完整的FAT文件系统驱动;
voice_enhanced玩具应用篇,链接->”玩具应用篇(voice_enhanced)“
目前芯片支持的工程如下:
芯片/工程
voice_enhanced
voice_toy
AD24N
√
√
- 如何进入对应工程:
![]()
下面介绍voice_toy工程占用的一些硬件资源
- 芯片的串口使用情况:
芯片
AD24N
UART0
√(作为打印)
UART1
√(无使用)
UART2
×
- 芯片的timer定时器使用情况:
芯片
AD24N
TIMER0
√(无使用)
TIMER1
√(无使用)
TIMER2
√(红外按键)
TIMER3
×
- 芯片的软中断使用情况:
芯片
AD24N
IRQ_SOFT0
√(解码)
IRQ_SOFT1
√(编码)
IRQ_SOFT2
√(红外按键)
IRQ_SOFT3
√(录音写数据)
IRQ_SOFT4
√(未使用)
IRQ_SOFT5
√(未使用)
IRQ_SOFT6
√(未使用)
IRQ_SOFT7
√(未使用)
- 芯片的IO口(PA口类)使用情况:
芯片
AD24N
PA0
√
PA1
√(ADkey、唤醒口)
PA2
√(SD卡CMD脚、矩阵按键)
PA3
√(SD卡DAT脚、矩阵按键)
PA4
√(打印)
PA5
√(外挂flash片选口、矩阵按键)
PA6
√
PA7
√
PA8
√(MCLR)
PA9
√(触摸按键、红外按键)
PA10
√(触摸按键、矩阵按键、外挂flash_di)
PA11
√(触摸按键、矩阵按键、外挂flash_clk)
PA12
√(外挂flash_d0)
PA13
√
PA14
√
PA15
√(SD卡CLK脚)
- 芯片的IO口(PB口类)使用情况:
芯片
AD24N
PB0
√(DAC输出口)
PB1
√
PB2
√
PB3
√
1.2. SDK相关配置文件
- SDK相关配置 与 五个文件相关:
《app_config.c》:“应用配置文件《app_config.c》介绍”;
《app_config.h》:“应用配置文件《app_config.h》介绍”;
《cpu_config.c》:“芯片相关配置配置文件《cpu_config.c》介绍”;
《board_cfg.c》:“模块IO相关配置配置文件《board_cfg.c》介绍”;
《app_modules.c》:“应用APP配置文件《app_modules.h》介绍”;
其他配置介绍:“其他配置介绍”;
下面介绍这五个文件和一些额外其他的配置。
1.2.1. 应用配置文件《app_config.c》介绍
《app_config.c》主要配置 与系统相关的配置:
文件路径为: app/src/对应工程/
注:voice_toy工程与voice_enhanced工程共用app/src/voice_func/app_config.c
1、ISR Configuration 中断优先级配置
中断优先级; *注:控制各个模块的中断优先级!*2、vm_sfc Configuration vm_sfc优先级配置
config_spi_code_user_cache:vm_sfc放code区 1:放置在code区 0:放置在3、midi Configuration midi配置
const int MAINTRACK_USE_CHN = 0; //0:用track号来区分 1:用channel号来区分。 const int MAX_DEC_PLAYER_CNT = 8; //midi乐谱解码最大同时发声的key数,范围[1,31] const int MAX_CTR_PLAYER_CNT = 8; //midi琴最大同时发声的key数,范围[1,31] const int NOTE_OFF_TRIGGER = 0; //midi琴note_off回调 1:time传0时,不会回调 0:time传0时,回调 const int MIDI_MAX_MARK_CNT = 0; //midi解码最大支持的mark数4、malloc Configuration malloc配置
MM_ASSERT:MALLOC内部断言打印使能 FALSE:关闭malloc内部断言打印; TRUE:打开malloc内部断言打印,默认打开;5、update Configuration 升级配置
//升级使用的区域,0:VM区, 1:eeprom区 const u8 dev_update_use_eeprom = 0; //设备升级时,是否保持住io的状态 const u8 dev_update_keep_io_status = 0; //设备升级时,用到的电源引脚 const u8 dev_update_power_io = -1; //ufw升级文件的vid要求: 0:vid要相同 1:vid要不一样 2:升级文件vid > 当前设备vid 3:升级文件vid < 当前设备vid const u8 ufw_vid_need_to_be_different = 0;6、src Configuration src配置
//软件重采样quality影响运算速度,可选范围3~8,默认选8 const u8 resample_quality = 8;7、sdmmc Configuration sdmmc配置
//sd空闲后挂起的最大cnt值,单位时间是sd检测函数的时间,即sd空闲后每次检测函数cnt就加1,为0时,则每次读写完都会发挂起命令 const u8 is_sdx_active_cnt_max = 20;8、UART Configuration uart配置
const u8 lib_config_uart_flow_enable = 0; //浮点打印,仅仅作用在AD17N,AD18N const int printf_support_float = 0;9、debug Configuration 异常配置
const u8 config_asser = 1; 该变量控制异常时行为,也控制断言ASSERT行为 控制异常行为:0:异常复位;1:异常打印卡死 控制断言ASSERT行为:0:断言时直接操作用户的断言处理函数;1:断言时增加断言位置打印再操作用户的断言处理函数; 断言部分详细介绍可参考 `其他配置介绍` 部分的断言ASSERT部分介绍10、log Configuration 打印开关配置
各模块的打印总开关
1.2.2. 应用配置文件《app_config.h》介绍
《app_config.h》能配置与系统相关的配置:
文件路径为: app/src/对应工程/
注:voice_toy工程与voice_enhanced工程共用app/src/voice_func/app_config.h
voice_toy工程:该工程有完整发声玩具功能,能实现解码、MIDI功能;同时将VM、按键、休眠应用在工程中;使用4 cache way,所以**CPU指令运行效率最高**。
voice_enhanced工程
1、KEY VOICE Configuration 按键音配置
KEY_VOICE_EN:控制按键音开关配置2、KEY Configuration 按键模块开关配置
KEY_IO_EN:IO按键开关配置 KEY_AD_EN:AD按键开关配置 KEY_MATRIX_EN:矩阵按键开关配置 KEY_IR_EN:红外按键开关配置 KEY_TOUCH_EN:触摸按键开关配置3、Vm Mode Configuration VM模块配置
USE_NEW_VM:选择旧版VM(该版本已不维护) USE_OLD_VM:选择新版VM SYS_MEMORY_SELECT:默认选择新版VM4、EXFLASH Configuration 外挂模块配置
TCFG_FLASH_SPI_TYPE_SELECT:外挂flash选择硬件spi还是软件spi(若选择硬件spi则默认使用SPI1) SPI_SD_IO_REUSE:spi引脚是否与sd卡io复用 TFG_SPI_UNIDIR_MODE_EN:外挂flash是否使用1线模式;5、USB Configuration USB模块配置
TCFG_PC_ENABLE:是否开启PC模块 TCFG_USB_MSD_CDROM_ENABLE:是否开启USB_MSD_CDROM TCFG_USB_EXFLASH_UDISK_ENABLE:是否开启外挂flash用作u盘模块 TCFG_UDISK_ENABLE:是否开启u盘模块 TCFG_HID_HOST_ENABLE:是否开启主机HID功能(该功能暂不支持) TCFG_ADB_ENABLE:该功能暂不支持 TCFG_AOA_ENABLE:该功能暂不支持 TCFG_PUSH_CODE_ENABLE:该功能暂不支持 TCFG_USB_PORT_CHARGE:USB是否默认用作充电模式 TCFG_USB_DM_MULTIPLEX_WITH_SD_DAT0:USBDM是否与SD卡IO复用 USB_DEVICE_CLASS_CONFIG:USB从机模式支持的class6、PMU Configuration PMU模块配置
TCFG_LOWPOWER_POWER_SEL:电源模式设置,只能固定使用LD0 TCFG_LOWPOWER_BTOSC_DISABLE:低功耗模式下BTOSC是否保持(无效参数) TCFG_LOWPOWER_LOWPOWER_SEL:控制芯片进入powerdown还是poweroff TCFG_LOWPOWER_PATTERN:选择软关机的方式(无效参数) TCFG_LOWPOWER_VDDIOM_LEVEL:强VDDIO等级配置 TCFG_LOWPOWER_VDDIOW_LEVEL:弱VDDIO等级配置 TCFG_LOWPOWER_OSC_TYPE:固定低功耗lptimer使用LRC TCFG_LOWPOWER_SOFF:控制softoff功能开关(无效参数)
1.2.3. 芯片相关配置配置文件《cpu_config.c》介绍
《cpu_config.c》主要配置 与芯片相关的配置:
文件路径为: app/src/对应工程/对应芯片
注:voice_toy工程与voice_enhanced工程共用app/src/voice_func/cpu/对应芯片/cpu_config.c
1、audio电源配置
/* *********************** * 在不同供电场景下config_adda_voltage_mode配置不同的值: * 0:高压供电vbat,工作电压在2.7v ~ 5.4v之间 * 1:低压供电到iovdd&vbat,工作电压在1.8v ~ 3.6v之间 * 注:低压供电时,iovdd需要和vabt短接; * 注:此项配置只会影响到audio dac & audio adc的性能;不会对APA性能产生影响 * ************************/ const unsigned char config_adda_low_voltage_mode = 0;2、audio模块配置
AD24N AUDIO & APA 工作依赖常量
Audio DAC
Audio ADC
Audio APA
au_const_apa_en
✘
✘
✔
au_const_dac_digital_en
✔
✘
✔
au_const_dac_analog_en
✔
✘
✘
au_const_adda_common_en
✔
✔
✘
AD24N AUDIO & APA 工作依赖常量
const u8 au_const_apa_en = 1; const u8 au_const_dac_digital_en = 1; const u8 au_const_dac_analog_en = 1; const u8 au_const_adda_common_en = 1;3、audio_adc模块配置
const char MIC_PGA_G = 14; //0 ~ 14,无效参数 const bool audio_adc_diff_mic_mode = 0;// 差分amic使能(N端固定PA15) 0:单端amic 1:差分amic const bool audio_adc_diff_aux_mode = 0;// 差分aux使能(N端固定PA15) 0:单端aux 1:差分aux const AUADC_PERFORM_MODE auadc_perf_mode = AUADC_STANDARD_PERF; //audio_adc性能 const AUDIO_MIC_RS_MODE auadc_mic_rs_pwr_mode = MIC_RS_INSIDE; //偏置电阻选择 const AUDIO_MICPGA_G audio_adc_mic_pga_g = AUMIC_27db;//后级增益 const AUDIO_MICBIAS_RS audio_adc_mic_bias_rs = AUMIC_1k5;//micbias内部偏置电阻选择 const AUDIO_MICLDO_VS audio_adc_mic_ldo_vs = AUMIC_2v0;//micldo偏置电压选择 const AUDIO_MIC_INPUT_PORT audio_adc_mic_input_port = MIC_INPUT_ANA1_PB1;//mic_in输入口 const AUDIO_MIC_INPUT_PORT audio_adc_aux_input_port = MIC_INPUT_ANA2_PA14;//linein_in输入口
1.2.4. 模块IO相关配置配置文件《board_cfg.c》介绍
《board_cfg.c》 主要配置 对应芯片使用的各模块使用到的IO。
文件路径为: app/src/对应工程/对应芯片
1、UART Configuration 串口模块
UART_OUTPUT_CH_PORT: 串口IO,支持任意IO2、KEY Configuration 按键模块
AD_KEY_CH_SEL:AD按键选择 IR_KEY_IO_SEL:IO按键选择 TCFG_ADKEY_IR_IO_REUSE:AD按键是否与红外IO复用 X_ADC_CH_SEL:矩阵按键x轴IO选择(要求是AD口) Y_PORT_SEL:矩阵按键y轴IO选择(普通IO即可) TOUCH_KEY_SEL:触摸按键3、POWER WAKEUP IO Configuration 唤醒IO配置
POWER_WAKEUP_IO:唤醒IO4、EXFLASH PORT Configuration 外挂flash配置
//port select for hardware spi //support any io EXFLASH_CS_PORT_SEL:硬件外挂flash片选脚 EXFLASH_CLK_PORT_SEL:硬件外挂flash时钟脚 EXFLASH_D0_PORT_SEL :硬件外挂flash D0脚 EXFLASH_D1_PORT_SEL:硬件外挂flash D1脚 //select for soft spi //support any io A_CLK_BIT 软件spi时钟脚 A_CLK_PORT(x) A_D0_BIT 软件spi D0脚 A_D0_PORT(x) A_D1_BIT 软件spi D1脚 A_D1_PORT(x)5、SMMC PORT Configuration SD卡IO配置
SDMMC_IO_USE_CROSSBAR:默认为1即可。 //support any io SDMMC_CLK_IO:SD卡时钟脚(CLK) SDMMC_CMD_IO:SD卡命令脚(CMD) SDMMC_DAT_IO:SD卡数据脚(DATA)
1.2.5. 其他配置介绍
- 1、断言ASSERT处理(对应芯片的cpu.h)
断言分为 驱动断言(assert_d) 和 系统断言(ASSERT)。驱动断言(assert_d)为 相关驱动使用的断言行为,通常为while1,建议用户不要使用和修改该断言。系统断言(ASSERT)为 系统外部使用的断言行为,用户可以在cpu_assert_debug函数里自定义断言的行为。![]()
1.2.6. 应用APP配置文件《app_modules.h》介绍
各个工程下有对应cpu的应用配置文件《app_modules.h》,其中的宏定义能配置支持的编解码格式、以及APP模式相关的配置;
每一个配置项都可独立开关,关闭没有用到的宏定义,可以 * 减少生成的代码量,节省程序空间和运行空间 * 。
该文件中出现的宏,即该工程拥有的功能;对于默认为0的宏,使能为1即可正常使用;
1.2.6.1. 解码模块
宏定义
含义
DECODER_UMP3_EN
UMP3解码使能;
DECODER_MP3_ST_EN
标准MP3解码使能(mbox独有);
DECODER_WAV_EN
WAV解码使能(mbox独有);
DECODER_F1A_EN
F1A解码使能;
DECODER_MIDI_EN
MIDI解码使能;
DECODER_MIDI_KEYBOARD_EN
MIDI琴解码使能;
DECODER_A_EN
A格式解码使能;
HAS_MIO_EN
MIO功能使能;
1.2.6.2. 音频算法模块
宏定义
含义
AUDIO_SPEED_EN
变速变调算法使能
SPEAKER_EN
扩音使能;
VO_PITCH_EN
变音算法使能;
VO_CHANGE_EN
动物变声算法使能;
PCM_EQ_EN
EQ算法使能;
ECHO_EN
ECHO算法模块使能;
ANS_EN
音频降噪算法模块使能;
1.2.6.3. 驱动模块功能
宏定义
含义
EXT_FLASH_EN
外挂FLASH使能,使用外挂FLASH需要打开该宏;
TFG_SD_EN
SD卡模块使能,使用SD卡需要打开该宏;
1.2.6.4. 芯片应用功能
宏定义
含义
RECORD_MODE_EN
录音模式使能;
LINEIN_MODE_EN
LINEIN(AUX)模式使能;
SIMPLE_DEC_EN
多路解码模式使能;
LOUDSPEAKER_EN
扩音模式使能;
FM_EN
FM模块使能;
![]()
app_modules.h配置
1.2.6.5. 芯片Codeblocks宏定义功能
宏定义
含义
AUDIO_ADC_EN
AUDIO ADC使能;
ENCODER_EN
编码使能,有该配置即支持编码功能;
EEPROM_EN
EEPROM使能,使用EEPROM需要打开该宏,并在SDK工程中添加相应的c文件以及h文件;
![]()
1.3. SDK工程裁切
SDK自带了app_modules.h模块管理机制;
裁切工程只需将app_modules.h中需要关闭的宏定义配置为0即可;
![]()
1.3.1. 如何将压缩格式从工程中移除
目前发布的AD24N SDK里面支持UMP3、A两种格式的压缩,在开发过程中如果不需要支持某些格式,那么可以将相关的代码删除。这样可以极大的节省生成的代码大小;
- 下面以移除UMP3压缩格式为例介绍,主要分三步:
① 移除相关的库文件;② 移除相关的源文件;③ 删除源码使用到的地方定义;
1.3.1.1. 裁切压缩第一步
打开<Project build option>窗口,删除mp3编码库的库包含:
![]()
注:部分宏配置需要在《app_modules.h》中关闭!详情请见上文《裁切解码第一步》
1.3.1.2. 裁切压缩第二步
移除工程目录app\src\common\decoder\list\下的压缩源文件:
![]()
1.3.1.3. 裁切压缩第三步
在文件app\post_build\sh54\app_ld.c中删除相关格式用到的资源定义,切记此文件在不可放在工程中编译,如果添加进了工程,一定要将其编译和链接包含取消掉。
![]()
1.3.1.4. 裁切压缩第四步
修改一些编译错误,这里主要指在在程序中对编码接口的调用:
![]()