RDA5850开发教程之欧阳治创编Word文档下载推荐.docx
《RDA5850开发教程之欧阳治创编Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《RDA5850开发教程之欧阳治创编Word文档下载推荐.docx(26页珍藏版)》请在冰豆网上搜索。
![RDA5850开发教程之欧阳治创编Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-12/13/39974c19-f542-47e7-a876-7407d878590d/39974c19-f542-47e7-a876-7407d878590d1.gif)
Trace配置32
音频校准32
音量校准32
Mp3解码器校准34
SBC参数设置35
回音消除参数设置35
更新历史
日期
版本
描述
作者
2012-5-26
1.0
新版本发布
2012-7-30
1.1
增加部分target配置
2012-8-21
1.2
增加gpio按键配置
2013-4-9
2.0
增加led,gdb,trace,calibration
2.1
增加蓝牙调试菜单,
增加sbc和回音消除设置方法的说明
声明
1.在未经RDA公司事先书面许可的情况下,严禁以任何形式复制、修改本手册中的任何内容;
在编制手册过程中已经力求内容的正确与完整,但并不保证本手册没有任何错误或遗漏。
本公司将不对本手册可能出现的错误或者疏漏负责;
我们保留在不预先通知的情况下,对本手册中描述的任何产品进行修改和改进的权利。
代码结构
系统分为两个部分,应用程序和平台代码。
平台代码位于platform目录,应用程序位于apps目录。
目录列表
内容
apps
ap_xxx
应用程序代码
ap_gui
公用显示程序,比如菜单、进度条等
gui
显示函数库,显示文字、图片等
projects_cfg
应用项目配置,包括选项、资源等
system
访问平台软件相关的代码
env
编译脚本和makefile
lib
库文件
platform
chip
芯片定义和rom文件
edrv
外部设备驱动程序
flash_prog
下载程序Ramrun
include
平台库文件的头文件。
Simulator
模拟器代码
target
平台定义文件
build
编译中间文件
hex
系统目标文件,每个target会有一个子目录。
toolpool
编译调试工具。
系统入口函数是BAL_TaskInit。
BAL_TaskInit里面首先调用BAL_Initalise函数进行系统的初始化。
然后创建了4个任务。
任务列表
总共有4个任务中系统中运行:
1.系统任务,主要处理底层驱动的消息
2.媒体任务,运行和调度解码模块
3.蓝牙任务,运行协议栈和profile
4.应用任务,运行应用程序,处理消息和显示界面。
4个任务中除了应用任务都是在平台代码里的。
应用开发模块
应用程序一般是一个消息处理循环,调用MESSAGE_Wait函数得到消息,根据应用分别处理对应的消息,不处理的消息调用MESSAGE_HandleHotkey函数处理热键。
示例代码:
INT32Sample_Entry(INT32param)
{
UINT32key;
UINT8result=RESULT_MAIN;
MESSAGE_Initial(g_comval);
//重置系统计数器
while
(1)
{
if(need_draw)//如果需要显示
{
#ifAPP_SUPPORT_LCD==1
if(AP_Support_LCD())
GUI_ClearScreen(NULL);
//清全屏幕
GUI_DisplayBattaryLever();
GUI_UpdateScreen(NULL);
}
#endif
need_draw=FALSE;
}
key=MESSAGE_Wait();
//取得系统消息
switch(key)//根据消息执行不同动作。
caseAP_MSG_RTC:
need_draw=TRUE;
break;
caseAP_KEY_MODE|AP_KEY_HOLD:
;
//…
default:
result=MESSAGE_HandleHotkey(key);
//处理热键
if(result==RESULT_REDRAW)
elseif(result!
=0)
returnresult;
}
驱动开发接口
需要用户定制的驱动主要是flash和lcd,其他部分的驱动一般不需要改动。
驱动的选择在平台的定义文件target.def里面。
Flash驱动
Flash驱动位于platform\edrv\memd目录下,驱动的接口定义在文件memd_m.h中,主要包括读、写、擦等函数接口。
//初始化函数,系统启动后会调用。
PUBLICMEMD_FLASH_LAYOUT_T*memd_FlashOpen(CONSTMEMD_FLASH_CONFIG_T*cfg);
//读函数,一般需不要使用,可以用memcpy实现
PUBLICMEMD_ERR_Tmemd_FlashRead(UINT8*flashAddress,
UINT32byteSize,
UINT32*pReadByteSize,
UINT8*buffer);
//写函数,下载程序和保存程序配置时调用
PUBLICMEMD_ERR_Tmemd_FlashWrite(UINT8*flashAddress,
UINT32*pWrittenByteSize,
CONSTUINT8*buffer);
//擦函数,调用写函数前会先调用擦函数来擦除要写的扇区。
PUBLICMEMD_ERR_Tmemd_FlashErase(
UINT8*startFlashAddress,
UINT8*endFlashAddress);
LCD驱动
LCD驱动位于platform\edrv\lcdd目录下,驱动的接口定义在文件lcdd_m.h中,主要包括打开,更新等接口。
PUBLICLCDD_ERR_Tlcdd_Open(VOID);
//刷屏函数,把Data指向的buff里的内容显示到屏幕上
PUBLICLCDD_ERR_Tlcdd_update_screen(UINT8*Data,LCDD_ROI_T*rect);
//8段数码管显示刷屏函数
PUBLICLCDD_ERR_Tled8s_update_screen(UINT16flag,UINT8*Data);
项目定义
平台定义
平台定义在目录target下,每个平台一个目录,包括一个target.def文件和两个头文件tgt_board_cfg.h和tgt_app_cfg.h。
平台定义包括了芯片的定义和硬件平台的定义,比如驱动的配置、按键的设置等信息。
target.def文件中需要修改的部分:
#=====================================
##3##
########FLASH驱动########
##SPIFlash(RAMispackagedinsidebasebandchip)
FLSH_MODEL?
=flsh_gd25q32
TARGET_EXPORT_FLAG+=MEMD_NO_ASSERT
##Flashmodelinterface:
parallel/spi
FLSH_IF?
=spi
##EBCCLKcfg:
__52MHz__/__78MHz__/__104MHz__/__156MHz__
SYS_MEMD_EBC_CLK?
=__78MHz__
##SPIFLASHspiCLKcfg:
ifeq"
$(strip${FLSH_IF})"
"
spi"
SYS_MEMD_FLSH_SPI_CLK?
endif#(${FLSH_IF},)
##RamisADMUXornot
TARGET_EXPORT_FLAG+=MEMD_RAM_IS_ADMUX
##FlashisADMUXornot
#TARGET_EXPORT_FLAG+=MEMD_FLASH_IS_ADMUX
##Ramsupportburstmodeornot
TARGET_EXPORT_FLAG+=MEMD_RAM_IS_BURST
##Flashsupportburstmodeornot
#TARGET_EXPORT_FLAG+=MEMD_FLASH_IS_BURST
##4##
########LCD驱动########
LCD_MODEL?
=mzl02
#ili9163cst7735r
##LCDinterface:
gouda/slcd
LCD_IF?
=gouda
##GOUDAcansupportserialLCDstartingfrom8808
${LCD_IF}"
gouda"
USE_SPI_LCD?
=1
TARGET_EXPORT_FLAG+=USE_SPI_LCD
endif
##9##
##用户项目定义#######
#项目名
CT_PROJECT:
=128_64
#是否有资源
CT_RESVALID:
=yes
GLOBAL_EXPORT_FLAG+=RESOURCE_SUPPORT
tgt_app_cfg.h一般不需要修改。
tgt_board_cfg.h可能需要修改的部分:
GPIO相关的定义
#defineTGT_GPIO_CONFIG_CFG\
{//红外使用的gpio
.gpio_irc=HAL_GPIO_4,\
//led使用的gpio
.led_count=3,\
.leds={//led列表\
{.gpoId=HAL_GPO_5},/*MUSIC*/\
{.gpoId=HAL_GPO_3},/*FM*/\
{.gpoId=HAL_GPO_0}},/*Bluetooth*/\
//按键使用的gpio
.key_count=0,//按键个数\
.key_interrupt_mode=TRUE,//是否中断模式,否则使用查询模式\
.high_keydown=TRUE,//按键按下时gpio值为高\
//gpio按键列表
.gpio_keys={HAL_GPIO_NONE},\
//linein检查gpio端口号
.gpio_lineIn=HAL_GPIO_NONE,\
//lineingpio是高有效
.lineinPlugHigh=TRUE,\
//t卡检测脚
.cardDetectGpio=HAL_GPIO_7,\
//低有效
.gpioCardDetectHigh=FALSE,\
//耳机检测脚
.earpieceDetectGpio=HAL_GPIO_1,\
.earpiecePlugHigh=FALSE,\
//没有设置gpio检测时是否有耳机
.earpiecePlugin=FALSE,\
#defineTGT_HAL_CONFIG\
{\
.keyInMask=0x07,//按键使用的keyin位开关\
.keyOutMask=0x07,//按键使用的keyout位开关\
.uartKeyinoutSel={\
//以下为用keyin/keyout做gpio的开关
.keyin0GpioEn=0,/*GPIO_20*/\
.keyout1GpioEn=0,/*GPIO_17*/\
.keyout2GpioEn=0,/*GPIO_11*/\
.keyout3GpioEn=0,/*GPIO_7*/\
.keyout4GpioEn=0,/*GPIO_8*/\
},\
….
//按键定义
#defineKEY_MAP\
{\
KEY_POWER,//power键的键值,设置为KEY_INVALID可以不用power键,直接拉高,加电自动开机。
\
….//gpio按键的值,顺序和gpio按键定义一致\
….//第一列按键的值\
….//第二列按键的值\
….//第三列按键的值\
//按键动作定义
#defineKEY_CONFIG\
.repeat_timeout=1000,//进入长按的延时,单位毫秒\
.repeat_interval=200,//进入长按后循环周期,单位毫秒\
.keymap=g_tgtKeyMap\
//红外遥控器定义
#defineIRC_CODE_MAP_SIZE22
#defineIRC_MAX_STYLE4
#defineIRC_STYLE_MAP\
{\
0xbf00,0x7f80,0xff00,0xfd02\
#defineIRC_MAP\
{0x10,0x0a,0x0c,0x08},/*KEY_1*/\
{0x11,0x1b,0x18,0x88},/*KEY_2*/\
……
#defineIRC_CONFIG\
.gpioId=HAL_GPIO_4,\
.irc_styles=IRC_MAX_STYLE,\
.map_size=IRC_CODE_MAP_SIZE,\
.timeout=200,\
.style_list=&
g_tgtIRCStyle[0],\
.code_map=&
g_tgtIRCMap[0][0]\
//pmd配置
#ifndefTGT_PMD_CONFIG
#defineTGT_PMD_CONFIG\
…….
//长按开机
.holdPowerOn=FALSE,\
//语音配置,对每种语音配置路径和参数
EAR_PIECE为耳机模式
LOUD_SPEAKER为外放模式
BLUETOOTH为耳机发射模式
BT_EP为蓝牙接收,耳机输出模式
BT_SP为蓝牙接收,外放输出模式
FM是收听收音机的模式
LINEIN为插入linein时使用的模式
RECEIVER和BLUETOOTH模式暂时没有用到。
#defineTGT_AUD_CONFIG_EAR_PIECE_DRIVERCodecGallite
#defineTGT_AUD_CONFIG_EAR_PIECE_PARAM0
#defineTGT_AUD_CONFIG_EAR_PIECE_OUTPUT_PATH
AUD_SPK_RECEIVER//语音输出路径,可选值为耳机(AUD_SPK_EAR_PIECE)或者外放(AUD_SPK_LOUD_SPEAKER)
#defineTGT_AUD_CONFIG_EAR_PIECE_OUTPUT_TYPEAUD_SPEAKER_STEREO//输出类型,立体声或者左、右声道
#defineTGT_AUD_CONFIG_EAR_PIECE_INPUT_PATHAUD_MIC_LOUD_SPEAKER//输入路径
xmake脚本中的CT_TARGET参数选择编译的平台。
应用定义
应用定义在目录apps\projects_cfg目录下,每个项目一个目录,包括一个头文件project_config.h和资源文件。
头文件中定义了上层应用的feature,比如lcd尺寸、是否支持菜单等。
#defineAPP_SUPPORT_BLUETOOTH1//支持蓝牙
#defineAPP_SUPPORT_USB0//支持usbhost
#defineAPP_SUPPORT_FM1//支持fm
#defineAPP_SUPPORT_FM_RECORD0//fm录音
#defineAPP_SUPPORT_FM_OUT0//fm输出
#defineAPP_SUPPORT_LCD1//lcd单色液晶屏
#defineAPP_SUPPORT_LED1//led指示灯
#defineAPP_SUPPORT_LED8S1//8段数码管显示
#defineAPP_SUPPORT_FLASHDISK0//内置磁盘空间
#defineAPP_SUPPORT_MENU1//菜单支持
#defineAPP_SUPPORT_REMOTECONTROL1//遥控器支持
#defineAPP_SUPPORT_LYRIC1//歌词显示
#defineAPP_SUPPORT_FADE_INOUT1//淡进淡出
#defineAPP_SUPPORT_INDEPEND_VOLUMNE1//每个模块使用独立音量
//上面值为0的选项目前还不支持,1的选项可以改为0来关闭
//语言支持,定义字符串资源时使用
#defineAPP_SUPPORT_LANG_ENGLISH1//English
………
#defineAPP_SUPPORT_LANG_SM_CHINESE1//SMChinese
//屏幕尺寸
#defineLCD_WIDTH128
#defineLCD_HEIGHT64
#defineAPP_DEFAULT_RESULTRESULT_MAIN//进入系统后首先运行的任务
应用项目的选择在平台定义的target.def文件里。
编译环境
第一次运行
解压ftp上DevelopTool目录下的MIPS_Compiler.rar和coolgdb.rar到toolpool目录。
编译方法
执行根目录下的msys.bat打开编译环境,注意会有杀毒软件警告,最好退出杀毒软件,以方便编译。
执行xmake命令进行编译,xmake文件是个脚本,可以用文本编辑软件修改,其中参数CT_TARGET指定需要编译的项目,其他参数不要修改。
xmake可以带路径参数来单独编译某个模块,比如xmakeplatform/edrv编译驱动模块。
xmakelink命令可以单独链接。
资源编辑器
资源保存在apps\projects_cfg\项目名\resource目录下,源文件名为resource.csv,可以用文本编辑工具直接编辑,目标文件名为res.bin,用来下载到flash,系统链接时会自动把资源目标文件加入到系统bin文件里。
资源编辑器打开的时候读取源文件,保存的时候会同时更新源文件和bin文件。
资源编辑器位于toolpool\bin目录下,文件名resedit.exe。
运行时先选择配置的项目。
项目设置
项目全局设置信息,包括feature,显示参数、蓝牙名字、密码等。
出厂设置
第一次运行或者用户选择恢复出厂设置时恢复的配置。
注:
其中LoopMode有三个选项:
RepeatOne:
循环播放一首歌曲,RepeatAll:
循环播放所有歌曲,Auto:
自动切换,按键选择下一首歌曲时切换为循环所有歌曲,按键选择上一首歌曲时切换为循环一首歌曲。
语音设置
语音设置配置各种提示音和内置音乐。
对于没有LCD的项目,只需要配置前三页:
项目设置、出厂设置和语言设置就可以了。
选中的mp3文件会被复制到对应项目的resource\audio子目录下。
语音ID在gui_const.h里面定义。
语音类型分为两种,mp3文件和内部编码。
内部编码用一串字符来定义一段语音,每个字符播放0.1秒时间,0代表没有声音,1~9代表从低到高的9个频点,大约频率见下表:
值
声音频率
没有声音
1
256Hz
2
384Hz
3
512Hz
4
640Hz
5
768Hz
6
853Hz
7
1024Hz
8
1280Hz
9
1536Hz
语言选择
选择语言包,语言包的id和语言菜单的id相对应。
语言包文件位于toolpool\bin目录下。
图片设置
选中的图片会被复制到对应项目的resource\images子目录下。
图片ID在gui_const.h里面定义。
对于同类别的图片可以做成图片组资源,显示的时候用一个ID,和要显示的索引值就可以了。
比如下图中的循环状态,把不同循环的图片,按照程序中变量值repeat_mode的顺序排列,显示的时候就会很方便:
GUI_ResShowImage(GUI_IMG_MUSICLOOPS,repeat_mode,POSITION_F,0);
定义图片组资源,需要指定图片的高度,以便显示程序截取图片。
字符串设置
字符串ID在gui_const.h里面定义。
需要为每个字符串在不同语言里设置内容,没有设置过的默认值为ID的名字。
可以直接用文本编辑工具修改资源源文件来设置字符串的值。
LED设置
LED显示模式设置,ID在gui_const.h里面定义。
每个显示模式依次设置开关灯已经延迟时间,单位0.1秒。
点击Preview可以预览led闪烁效果,如下图:
菜单设置
首先选择要编辑的菜单,选择后菜单项会显示在列表里。
每个菜单包括两个图片,一个是没选中时显示的图片,一个是选中时显示的图片。
QueryActive选项表示在显示菜单时,通过callback函数取得当前选中的菜单项。
每个菜单项需要定义对于的stringid,action,result,param。
菜单项定义:
项目
说明
string