LOFTER-最美图片社交APP

汇聚2000万达人的兴趣社区
下载即送20张免费照片冲印

注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

能力:价值:权力

联系QQ:38883837!有能力就有价值;有价值就有权力!

 
 
 

日志

 
 
关于我

有能力就有價值。有价值就有权力。 聯繫QQ:38883837

网易考拉推荐

ROCK260x 软件培训  

2007-08-22 08:54:59|  分类: 默认分类 |  标签: |举报 |字号 订阅

下载LOFTER客户端

ROCK260x  软件培训

黄激流        ——Mini MP4 方案

福州瑞芯微电子有限公司        2006-7-18

培训内容

l       ROCK 260x 简介

l       系统软件结构概述

l       主要功能模块

l       内存分配

l       MP3解码流程举例

l       开发工具使用

l       主要功能函数的使用说明

 

名词(术语)

l       Firmware: 固件文件。最后用于烧录的文件,包含运行代码及相关的资源文件(图片,字库)

l       Resource File: 资源文件。指本方案中固件运行所需要的一些支持性文件。包含下列几个文件:

Ø       Image.res: 图片资源

Ø       Menu.res: 菜单资源    

l       IM : Instruction Memory

l       DM: Data Memory

RK2602 RK2602 RK2606RK2606等芯片中IM Size = 56K words

                                                               DM Size = 48K words

 

ROCK 260x 简介

Features

l       128/100 pins LQFP package

l       Typical power voltage 3.3V(IO), 1.8V(Core)

l       Use one 24MHz crystal oscillator

l       32GPIO (8bits P0,P1,P3,16bits P2)

l       10-bit low resolution ADC with 4-channel Analog Input

l       Build in Stereo 24-bit Delta-Sigma DAC with on-chip headphone amplifier

l       Build in Stereo 16-bit Sigma-Delta ADC (Line-in /FM Input/ Microphone with analog mixer)

l       40 levels digital volume control

l       Support external CODEC through I2DSP interface

l       Support I2C interface

l       Support USB 2.0 high speed and full speed

l       Integrated 3 Channel DMA

l       Embedded DSP Core:

l            4K words Boot Sync ROM

l            (48 + 56)K words Sync SRAM

l            2K words Register Space for Peripherals

l             Upgradable firmware through USB/Flash interface

l       Memory interface:

l       External up to 2(cs) x 64M-2G bytes Nand type Flash accessed by DMA

l       Support both 8-bit (X8 device) and 16-bit (X16 device) IO bus

l       Support SDRAM

l       Support SD/MMC

l       Support External NOR-Flash boot up

l       Video Driver: Support TFT LCD/ OLED Interface

l       Pulse Width Modulators for EL backlights

l       Support watchdog timer

l       DSP-based Software:

l       MPEG1/2/2.5 Audio Layer 1, 2, 3 decoding, Layer3 encoding

l       WMA 9 decoding

l       G.729 based voice recording and playback

l       equalizer

l       MPEG-4 @QVGA decoding

 

系统软件结构概述

系统软件结构

l       本版本的软件结构同大多数的嵌入式软件一样,主程序是一个无限循环的代码

l       采用查询方式执行绝大多数的任务

l       部分对时间要求严格的任务将在中断中执行

l       借用了部分任务消息的概念,但不同于操作系统中的消息

系统软件结构

——Source Code 内容介绍

l       包含的目录(1

Ø       Sys : 系统主调度与处理程序

Ø       Key : 按键扫描,各功能键的处理在各自的模块中处理

Ø       Display : LCD的驱动、显示控制等

Ø       Include : 全局变量的定义、结构体定义、消息宏定义、系统控制宏等

Ø       USB : USB 通信与FAT相关

Ø       Build : 编译工程文件

Ø       LIB : 系统相关库文件

Ø       Resource : 与资源定义相关的宏定义

Ø       Lrc : 歌词文件 *.lrc的处理

Ø       Driver : Codec 的驱动代码

Ø       MainMenu : 主界面处理代码

Ø       MenuSetting : 设置菜单处理代码

Ø       Mp3Decode : MP3解码功能实现代码

Ø       AviDecode : AVI视频解码功能实现代码

Ø       Browser : 资源管理器功能实现代码

Ø       Encode : 录音功能的实现代码

Ø       FM : FM 收音机功能的实现代码

Ø       Game : 游戏功能的实现代码

Ø       Jpeg : 图片浏览功能的实现代码

Ø       WAVDecode : MIC录音文件的播放实现代码

Ø       WMADecode : WMA音乐文件的播放实现代码

 

主要功能模块

10大功能模块

l       音乐播放

l        视频播放

l        FM 收音机

l        图片浏览

l       文本阅读

l        录音

l        资源管理器

l        游戏

l        设置

l        USB

 

主要功能模块——音乐播放

Ø       支持的文件格式

    MP3:支持所有MP3 MPEG1/2/2.5 Audio

                Layer 1, 2, 3 decoding, Layer3 encoding

    WAV:支持 Rockchip  MIC 录音文件格式

    WMA:支持高码率WMA(支持码率高达320K bps),

                     暂不支持中、低码率WMA。会做升级支持

Ø       DSP的运行频率

       MP3  Max: 36 MHz

                     eg. In 3D mode && 44.1 Kbps),

                    Min: 17  MHz

                      (eg. In normal  mode && 12 Kbps)

           WAV24 MHz ~ 34 MHz

           WMA40 MHz  ~ 51 MHz

主要功能模块——视频播放

Ø       支持的文件格式

AVI      真正支持AVI格式

                       Video format : XviD

                           Audio format : MP3

视频文件需要采用Rockchip公司的转换软件进行

SCALE 变换后才能播放。在转换时请注意目标

文件的大小要与目标机器一致。如220*176的视

频文件不能在169*128的机器上播放!!

Ø          DSP的运行频率

              MP3  Max: 60 MHz

                                   eg. Memory is SD card

                    Min: 52  MHz

                                    (eg. Memory is  Nand Flash)

主要功能模块——JPEG 图片浏览

Ø       支持的文件格式

JPEG

Max size :  MAX_HEIGHT  = 2618 pixes

                  MAX_WIDTH = 3520 pixes

BMP QCIF

Not be supported now!

Ø          DSP的运行频率

MP3  Max: 60 MHz

                  eg. Memory is SD card

           Min: 52  MHz

                   (eg. Memory is  Nand Flash)

主要功能模块——USB

Ø          DSP的运行频率

Moveable Disk   Max: 72 MHz

主要功能模块——模块功能分配

 

功能一

功能二

音乐播放

 

视频播放

 

FM 收音机

 

游戏

 

录音

 

固件升级

 

图片浏览

 

设置

 

USB

 

文本阅读

 

资源管理器

 

歌词显示

 

主要功能模块——多任务运行

从上面的模块功能分配来看, 理论上功能一可以与任意的功能二同进运行.但是考虑到系统的运行做了以下组合:

音乐播放     &&    TXT 阅读

收音机         &&    TXT 阅读         X

资源管理器 &&    音乐播放

音乐播放  && JPEG浏览                       X

 

内存分配

l       ROCK 260x Memory是分为IM DM

   两部分

l       IM = 56k words   ;   DM  = 48 k words

l       资源有限,模块数多?怎么解决资源?

l       IM DM的分配控制通过链接脚本进

   行控制

l       采用 overlay 来解决资源有限,模块数多

   的矛盾

     

l       This example takes 3 files and creates an overlay. File1.obj and File2.obj are both linked starting at address 0x1000. They are loaded sequentially into external memory starting at address 0x4000.

l       File2 is loaded immediately after file1. The main program, main.obj is linked at address 0x2000. The data for main.obj is linked at address 0x100 in the data section of memory.

l       脚本控制标识

__attribute__((section(".avi_v_text, \"ax\"")))

Ø        attribute  : place “__attribute__” keyword

Ø        section : Use “section” key word to define section name and attribute

Ø        .avi_v_text : section name:

Ø        ax  :  allocatable, code section

 

__attribute__((section(".avi_v_bss, \"aw\"")))

 

Ø       attribute  : place “__attribute__” keyword

Ø       section : Use “section” key word to define section name and attribute

Ø       .avi_v_bss : section name: .avi_v_bss

Ø       aw  :  allocatable, writeable section

l       脚本文件的介绍(i)

ENTRY(__start)

MEMORY

{

    /*IRAM Memory Range 0x0000--0xE000*/

    IVECTS          :      ORIGIN = 0x0000, LENGTH = 0x0088          /* 17 interrupt vectors of 8 words */

    IRAM             :      ORIGIN = 0x0088, LENGTH = 0x8000      /*0x6e78*/

    IRAM_OVR        :   ORIGIN = 0x6f00, LENGTH = 0x7100

    IRAM_OVR1       :   ORIGIN = 0xe000, LENGTH = 0x1800

    IRAM_OVR2       :   ORIGIN = 0xBA00, LENGTH = 0x2600

    IBOOTROM        :   ORIGIN = 0xf800, LENGTH = 0x0800

   

    /*Data Memory Range 0x0000--0xC000*/

    DRAMDATA     :      ORIGIN = 0x0000, LENGTH = 0x0400

    DRAMBSS         :   ORIGIN = 0x0400, LENGTH = 0x1000

    DRAMDATA_OVER     :      ORIGIN = 0x1400, LENGTH = 0xa000    /* Overlap with stack?? */

    DRAMDATA_OVER1   :      ORIGIN = 0xc000, LENGTH = 0x4000

}

l       脚本文件的介绍(ii)

中断向量:

.vectors   : {

                *(.vectors);

         } > IVECTS

Overlay:

OVERLAY 0xbe00 :{     /*0xbe00*/         

        .exttext_6 {

            *(.txt_text);

            *(.setmenu_text);

        }

        .exttext_9{

            *(.game_text);

        }

    }>IRAM_OVR2

l       脚本文件的介绍(iii)

堆栈设置

/* Stack should not cross 0x7fff to 0x8000 boundary */

    __stack_end = 0xb400;       /* Enable linker to identify if enough      */

    __stack_start = 0xbfff;       /* Stack grows down from here */   

                                               /* 0xbfff - 0xb400 = 3k */

模块调度API函数

l       int ModuleOverlay(unsigned int CodeModuleNum);

                            模块编号的宏定义在Resource.h中定义

 

l       int GetResourceAddress( unsigned long       *ImageLogicAddress,

                                                unsigned long       *MenuLogicAddress,

                                                unsigned long       *FontLogicAddress,

                                                unsigned long       *GBKLogicAddress,

                                                unsigned long       *SysInformationAddress);

              ImageLogicAddress: 图片资源在FLASH中的首地址;

              MenuLogicAddress:  菜单资源在FLASH中的首地址;

              FontLogicAddress:字库资源在FLASH中的首地址;

              GBKLogicAddressLOCAL 码表在FLASH中的首地址;

              SysInformationAddress:系统运行参数保存在FLASH中的首地址

 

MP3解码流程举例

程序主流程

 

 


MP3解码过程示例

l       系统初始化

Y    CONTINUE

开机键是否按下    N    POWER OFF

读取上次关机保存参数

                               Y   进入U盘模式

USB 插入检测,插入否?   N   显示开机画面,初始化CODEC,音量设置,SD卡初始化,获取FLASH容量

l       模块1调度

相关全局变量:  Sche1MsgArray[0];

相关的功能模块: MP3WMAWAVAVI

                             ENCODEFMUSBFW Update

l       模块2调度

相关全局变量:  Sche2MsgArray[0];

相关的功能模块: TXTJPEGMenuSettingGame Lrc

l       模块1调度

相关全局变量:  Fun1MsgArray[];

相关宏: MSG_FUNCTION1_FILE_FIND  à

                call   FindMusicFile();

Fun1MsgArray[]参数说明:

Fun1MsgArray[0]: 功能类型

Fun1MsgArray[1]: 查找文件类型(音乐文件、视频文件)

Fun1MsgArray[2]: 查找方向(前进、后退)

Fun1MsgArray[3]: 查找范围(目录、全部)

Fun1MsgArray[4]: 顺序(随机、顺序)

  

定时处理

Ø       低功耗状态下,超过3分钟无操作关机;

Ø        定时关机判断;

Ø        HOLD 处理;

Ø        DisplayRecoveryTime处理 (用于对话框的自动关闭等功能)

外设检查

Ø       SD 插入检测;

Ø         耳机插入检测;à  功放的开关控制(包括外响功放与耳机功放)

Ø         USB 插入检测

 

如果 Func1MsgArray[0] == MSG_FUNCTION1_MUSIC_MP3

从上面的Mp3DecodeProc()函数的处理过程中,并没有出现解码的过程出现,解码是怎么实现的?

 

音频解码在中断中完成,保证声音输出不中断!!

 

开发工具使用

本开发工具是针对Rockchip公司的RK260X现有芯片型号所开发的,因些如果今后有新的芯片型号出现,可能要进行更新后才能支持新的芯片型号。

为保护软件的开发者及Rockchip公司的合作伙伴的利益,对该软件进行了版权管理,因此在安装该软件后,需要向Rockchip公司提供贵公司的名称(长度不能超过20个字符),然后我们将会根据贵公司提供的名称生成一个License文件,然后通过电子邮件的方式发给贵公司。需要将该License文件拷贝到工具的安装目录后,该工具的软体才能正常使用。该软件仅供贵公司做为开发工作之用,请不要传播该工具。贵公司今后给客户的固件升级软件在我们收到贵公司提供的名称后,我们会提供相应的文件。

开发工具的安装()

开发工具的使用(1)

Ø       安装成功后安装程序会在桌面上创建一个快捷方式:FWTools

Ø        双击该快捷方式,出现以下窗口:

l       FWTools

l       RockMenu

l       ImageConvert

l       Edit Consumer List

开发工具的使用——固件烧录流程

 

 

主要功能函数的使用说明

l       void FlashReadLogic(unsigned long x,               

       unsigned int *Buffer,

       unsigned int Length);

函数描述:

        NAND FLASH中读取指定长度(以BYTE为单位)的数据

参数说明:

        unsigned long x: 存贮器的逻辑起始地址,BYTE为单位;

        unsigned int *Buffer : 读取的数据的指针;

        unsigned int Length : 所需读取的数据长度

使用:

        用于需要从NAND FLASH中读取文字显示、图片显示等

l       void LCD_FillRect(int x0, int y0, int x1, int y1)

函数描述:

        用所设置的前景色填充LCD屏的指定矩形区域

参数说明:

        int x0 : 所需填充的矩形区域的左上角x 坐标

        int y0 : 所需填充的矩形区域的左上角y 坐标

        int x1 : 所需填充的矩形区域的右下角x 坐标

        int y1 : 所需填充的矩形区域的右下角y 坐标

 

使        :

        填充显示区域,也常用于开发阶段调试代码用

l       void LCD_SetBkColor(unsigned int color)

函数描述:

        设置LCD显示的背景色

参数说明:

        unsigned int color : 16 bit RGB565)表示的颜色

使        :

l       void LCD_SetColor(unsigned int color)

函数描述:

        设置LCD显示的前景色

参数说明:

        unsigned int color : 16 bit RGB565)表示的颜色

使        :

l       void LCD_NFDispStringAt(int x, int y, unsigned int *pStr)

函数描述:

        从指定点的位置开始显示字符串

参数说明:

        int  x : 显示起点的 x 坐标

        int  y : 显示起点的 y 坐标

        unsigned int *pStr :  需要显示的字符串

使        :

l       void LCD_DispStringInRect(LCD_RECT *pDr,

                                                       LCD_RECT *pSr,

                                                       unsigned int *pStr,

                                                       unsigned int AlignMode)

函数描述:

        在指定的矩形区域里显示指定的字符串

参数说明:

        LCD_RECT *pDr : 实际的矩形区域

        LCD_RECT *pSr :  虚拟的矩阵形区域

        unsigned int *pStr :  字符串指针

        unsigned int AlignMode :  对齐模式(LCD_TEXTALIGN_RIGHT

                            LCD_TEXTALIGN_CENTER   Default )                                                        

使        :

l       unsigned int Gbk2Unicode(unsigned int code)

函数描述:

        将指定的码表值转换为UNICODE以便显示字符

参数说明:

        unsigned int code : Local code

使        :

       在多国语言的显示中使用

l       void LoadSysInformation(void)

函数描述:

        FLASH中读取上次关机时保存的运行参数

参数说明:

使        :

       一般在开机时调用

l       void SaveSysInformation(void)

函数描述:

        保存本次运行的相关参数

参数说明:

使        :

       在需要保存参数时调用

l       HANDLE  FileCreate(uint8 *DirFileName)

函数描述:

        创建一个空的文件

参数说明:

        DirFileName文件名

使        :

       NOT_OPEN_FILE不能新建文件(可能该文件名已经存在或打开文     件数超过最大限制或磁盘空间满)

       0~MAX_OPEN_FILES-1为新建文件的句柄

l       uint8 FileDelete(uint8 *DirFileName)

函数描述:

        删除一个文件

参数说明:

        DirFileName要删除的文件名

使        :

       NOT_FIND_FILE没找到文件,FILE_LOCK文件被打开不能删除,RETURN_OK删除成功

l       HANDLE   FileOpen(uint8 *DirFileName, uint8 Type)

函数描述:

        以指定方式打开一个文件

参数说明:

        DirFileName要打开的文件名,Type打开方式(R,W)

使        :

       NOT_OPEN_FILE不能打开文件(打开文件的个数超过最大限)

       0~MAX_OPEN_FILES-1为文件句柄

l       uint8  FileClose(HANDLE Handle)

函数描述:

        关闭指定文件

参数说明:

        Handle为要关闭文件的句柄

使        :

l       uint16   FileRead(uint8 *Buf, uint16 Size, HANDLE Handle)

函数描述:

       从指定打开的文件中读取Size字节到缓冲区

参数说明:

        Buf数据缓冲区,Size读取字节数(最多65535字节), Handle指定文件句柄

使        :

        返回值为所读取到的数据的长度

l       uint16  FileWrite(uint8 *Buf, uint16 Size, HANDLE Handle)

函数描述:

        写数据到指定文件

参数说明:

        Buf : 数据缓冲区

        Size : 要写入的字节数(最多65535字节),

        Handle : 指定文件句柄

使        :

       =Size写入成功;

       <Size磁盘空间满,如果为0有可能文件不是以写方式打开

l       bool FileEof(HANDLE Handle)

函数描述:

        测试指定文件结束

参数说明:

       Handle : 指定文件句柄

使        :

       TRUE——到文件结束,FALSE——没到文件结束

l       uint8 FileSeek(int32 offset, uint8 Whence, HANDLE Handle)

函数描述:

       在指定文件中搜索

参数说明:

       offset——偏移量

            Whence——搜索方式(SEEK_SET从文件头

                                    SEEK_END文件尾

                                    SEEK_CUR当前位置)

            Handle——指定文件句柄

使        :

  评论这张
 
阅读(1482)| 评论(8)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2015