RDA5850RDA5851开发手册Word文档格式.docx
《RDA5850RDA5851开发手册Word文档格式.docx》由会员分享,可在线阅读,更多相关《RDA5850RDA5851开发手册Word文档格式.docx(36页珍藏版)》请在冰豆网上搜索。
![RDA5850RDA5851开发手册Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-10/28/0518eac9-7e6e-42ed-a927-189aba0cb770/0518eac9-7e6e-42ed-a927-189aba0cb7701.gif)
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,\
//