RDA5850开发教程.docx
- 文档编号:29379751
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:94
- 大小:1,001.97KB
RDA5850开发教程.docx
《RDA5850开发教程.docx》由会员分享,可在线阅读,更多相关《RDA5850开发教程.docx(94页珍藏版)》请在冰豆网上搜索。
RDA5850开发教程
RDA5850/RDA5851开发手册
版本:
2.1
2013-7-15
1
目录2
更新历史4
声明5
代码结构6
任务列表6
应用开发模块6
驱动开发接口8
Flash驱动8
LCD驱动8
项目定义9
平台定义9
应用定义13
编译环境14
第一次运行14
编译方法14
资源编辑器15
项目设置15
出厂设置16
语音设置17
语言选择18
图片设置18
字符串设置19
LED设置20
菜单设置21
节日设置22
模拟器23
第一次运行24
选择项目25
模拟器界面26
模拟器菜单27
2
调试工具................................................................................................................28
工具栏说明28
Log窗口说明28
内存窗口说明29
下载界面如下29
调试菜单29
工具配置30
Trace配置31
音频校准31
音量校准31
Mp3解码器校准33
SBC参数设置34
回音消除参数设置34
3
更新历史
日期
版本
描述
作者
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
2013-7-15
2.1
增加蓝牙调试菜单,
增加sbc和回音消除设置方法的说明
4
声明
1.在未经RDA公司事先书面许可的情况下,严禁以任何形式复制、修改本手册中的任何内
容;在编制手册过程中已经力求内容的正确与完整,但并不保证本手册没有任何错误或遗漏。
本公司将不对本手册可能出现的错误或者疏漏负责;我们保留在不预先通知的情况下,对本
手册中描述的任何产品进行修改和改进的权利。
5
代码结构
系统分为两个部分,应用程序和平台代码。
平台代码位于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函数处理热键。
示例代码:
6
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:
;//⋯
break;
default:
result=MESSAGE_HandleHotkey(key);//处理热键
if(result==RESULT_REDRAW)
need_draw=TRUE;
elseif(result!
=0)
{
returnresult;
}
}
7
驱动开发接口
需要用户定制的驱动主要是flash和lcd,其他部分的驱动一般不需要改动。
驱动的选择在平台的定义文件target.def里面。
Flash驱动
Flash驱动位于platform\edrv\memd目录下,驱动的接口定义在文件memd_m.h中,主要包
括读、写、擦等函数接口。
//初始化函数,系统启动后会调用。
PUBLICMEMD_FLASH_LAYOUT_T*memd_FlashOpen(CONST
MEMD_FLASH_CONFIG_T*cfg);
//读函数,一般需不要使用,可以用memcpy实现
PUBLICMEMD_ERR_Tmemd_FlashRead(UINT8*flashAddress,
UINT32byteSize,
UINT32*pReadByteSize,
UINT8*buffer);
//写函数,下载程序和保存程序配置时调用
PUBLICMEMD_ERR_Tmemd_FlashWrite(UINT8*flashAddress,
UINT32byteSize,
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);
8
项目定义
平台定义
平台定义在目录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:
__52MHz__/__78MHz__/__104MHz__/__156MHz__ifeq"$(strip${FLSH_IF})""spi"
SYS_MEMD_FLSH_SPI_CLK?
=__78MHz__
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
9
#=====================================
##4##
########LCD驱动########
LCD_MODEL?
=mzl02
#ili9163cst7735r
##LCDinterface:
gouda/slcd
LCD_IF?
=gouda
##GOUDAcansupportserialLCDstartingfrom8808ifeq"${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},\
10
//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按键定义一致\
⋯.//第一列按键的值\
⋯.//第二列按键的值\
⋯.//第三列按键的值\
}
11
//按键动作定义
#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,\
}
12
//语音配置,对每种语音配置路径和参数
EAR_PIECE为耳机模式
LOUD_SPEAKER为外放模式
BLUETOOTH为耳机发射模式
BT_EP
为蓝牙接收,耳机输出模式
BT_SP
为蓝牙接收,外放输出模式
FM是收听收音机的模式
LINEIN
为插入linein时使用的模式
RECEIVER和BLUETOOTH模式暂时没有用到。
#defineTGT_AUD_CONFIG_EAR_PIECE_DRIVER
CodecGallite
#defineTGT_AUD_CONFIG_EAR_PIECE_PARAM
0
#defineTGT_AUD_CONFIG_EAR_PIECE_OUTPUT_PATH
AUD_SPK_RECEIVER//
语音输出路径,可选值为耳机(AUD_SPK_EAR_PIECE
)
或者外放(AUD_SPK_LOUD_SPEAKER
)
#define
TGT_AUD_CONFIG_EAR_PIECE_OUTPUT_TYPE
AUD_SPEAKER_STEREO//
输出类型,立体声或者左、右声道
#define
TGT_AUD_CONFIG_EAR_PIECE_INPUT_PATH
AUD_MIC_LOUD_SPEAKER
//输入路径
xmake脚本中的CT_TARGET
参数选择编译的平台。
应用定义
应用定义在目录apps\projects_cfg目录下,每个项目一个目录,包括一个头文件
project_config.h和资源文件。
头文件中定义了上层应用的feature,比如lcd尺寸、是否支持菜单等。
13
#defineAPP_SUPPORT_BLUETOOTH
1
//支持蓝牙
#defineAPP_SUPPORT_USB
0
//支持usbhost
#defineAPP_SUPPORT_FM
1
//支持fm
#defineAPP_SUPPORT_FM_RECORD
0
//fm录音
#defineAPP_SUPPORT_FM_OUT
0
//fm输出
#defineAPP_SUPPORT_LCD
1
//lcd
单色液晶屏
#defineAPP_SUPPORT_LED
1
//led
指示灯
#defineAPP_SUPPORT_LED8S
1
//8
段数码管显示
#defineAPP_SUPPORT_FLASHDISK
0
//内置磁盘空间
#defineAPP_SUPPORT_MENU
1
//菜单支持
#defineAPP_SUPPORT_REMOTECONTROL
1
//遥控器支持
#defineAPP_SUPPORT_LYRIC
1
//歌词显示
#defineAPP_SUPPORT_FADE_INOUT
1//淡进淡出
#defineAPP_SUPPORT_INDEPEND_VOLUMNE
1//
每个模块使用独立音量
//上面值为0的选项目前还不支持,
1的选项可以改为
0来关闭
//语言支持,定义字符串资源时使用
#defineAPP_SUPPORT_LANG_ENGLISH
1
//English
⋯⋯⋯
#defineAPP_SUPPORT_LANG_SM_CHINESE
1
//SMChinese
//屏幕尺寸
#defineLCD_WIDTH
128
#defineLCD_HEIGHT
64
#defineAPP_DEFAULT_RESULT
RESULT_MAIN//
进入系统后首先运行的
任务
应用项目的选择在平台定义的target.def文件里。
编译环境
第一次运行
解压ftp上DevelopTool目录下的MIPS_Compiler.rar和coolgdb.rar到toolpool目录。
编译方法
执行根目录下的msys.bat打开编译环境,注意会有杀毒软件警告,最好退出杀毒软件,以方便编译。
14
执行xmake命令进行编译,xmake文件是个脚本,可以用文本编辑软件修改,其中参数CT_TARGET指定需要编译的项目,其他参数不要修改。
xmake可以带路径参数来单独编译某个模块,比如xmakeplatform/edrv编译驱动模块。
xmakelink命令可以单独链接。
资源编辑器
资源保存在项目名\resource目录下,源文件名为resource.csv,可以用
文本编辑工具直接编辑,目标文件名为res.bin,用来下载到flash,系统链接时会自动把资
源目标文件加入到系统bin文件里。
资源编辑器打开的时候读取源文件,保存的时候会同时更新源文件和bin文件。
资源编辑器位于toolpool\bin目录下,文件名resedit.exe。
运行时先选择配置的项目。
项目设置
项目全局设置信息,包括feature,显示参数、蓝牙名字、密码等。
15
出厂设置
第一次运行或者用户选择恢复出厂设置时恢复的配置。
16
注:
其中LoopMode有三个选项:
RepeatOne:
循环播放一首歌曲,RepeatAll:
循环播放所
有歌曲,Auto:
自动切换,按键选择下一首歌曲时切换为循环所有歌曲,按键选择上一首歌
曲时切换为循环一首歌曲。
语音设置
语音设置配置各种提示音和内置音乐。
对于没有LCD的项目,只需要配置前三页:
项目设置、出厂设置和语言设置就可以了。
选中的mp3文件会被复制到对应项目的
resource\audio子目录下。
语音ID在gui_c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- RDA5850 开发 教程