RDA5850开发教程.docx

上传人:b****6 文档编号:3380070 上传时间:2022-11-22 格式:DOCX 页数:37 大小:1.58MB
下载 相关 举报
RDA5850开发教程.docx_第1页
第1页 / 共37页
RDA5850开发教程.docx_第2页
第2页 / 共37页
RDA5850开发教程.docx_第3页
第3页 / 共37页
RDA5850开发教程.docx_第4页
第4页 / 共37页
RDA5850开发教程.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

RDA5850开发教程.docx

《RDA5850开发教程.docx》由会员分享,可在线阅读,更多相关《RDA5850开发教程.docx(37页珍藏版)》请在冰豆网上搜索。

RDA5850开发教程.docx

RDA5850开发教程

RDA5850/RDA5851开发手册

版本:

2.1

2013-7-15

更新历史

日期

版本

描述

作者

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和回音消除设置方法的说明

 

声明

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:

;//…

break;

default:

result=MESSAGE_HandleHotkey(key);//处理热键

if(result==RESULT_REDRAW)

need_draw=TRUE;

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,

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);

项目定义

平台定义

平台定义在目录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

#=====================================

##4##

########LCD驱动########

LCD_MODEL?

=mzl02

#ili9163cst7735r

##LCDinterface:

gouda/slcd

LCD_IF?

=gouda

##GOUDAcansupportserialLCDstartingfrom8808

ifeq"${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个频点,大约频率见下表:

声音频率

0

没有声音

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。

菜单项定义:

项目

说明

stringid

用来显示菜单项的字符串id

Action

选择菜单后执行的动作

RuntimeCheck

运行时调用callback查询是否要显示该菜单项

Invisible

不显示该菜单项

RawText

通过callback取得菜单项显示的文本

Action有四个选择:

Action

说明

Result

Param

SubMenu

打开子菜单

子菜单id

Result

返回结果

RESULT_xxx等值

Key

模拟按键

按键动作,AP_KEY_DOWN、AP_KEY_PRESS等

键值,AP_KEY_PLAY、AP_KEY_VOLADD等。

Message

发送消息

消息值

节日设置

节日分语言设置,选择语言后,对应的节日显示在列表里。

节日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1