1 / 50

RK27 平台基础

RK27 平台基础. 开发必须的相关资料: ● SDK 软件开发包 ● VC++ 编译器 ● ARM ADS 编译调试器 ● 电路图, datasheet ◆ RK2700 Demo 板 ◆ JTAG 仿真器及驱动. 内容提要. 芯片介绍. 驱动程序介绍. 仿真、调试、编译、烧录. 系统和应用软件介绍. Q&A. 内容提要. 芯片介绍. System Operation „ Dual Core Architecture (ARM7EJC+DSP)

lanza
Download Presentation

RK27 平台基础

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. RK27平台基础

  2. 开发必须的相关资料: ● SDK软件开发包 ● VC++ 编译器 ● ARM ADS 编译调试器 ● 电路图,datasheet ◆ RK2700 Demo板 ◆ JTAG仿真器及驱动

  3. 内容提要 芯片介绍 驱动程序介绍 仿真、调试、编译、烧录 系统和应用软件介绍 Q&A

  4. 内容提要 芯片介绍

  5. System Operation „ Dual Core Architecture (ARM7EJC+DSP) „ Support system boot sequentially from ARM7EJC to DSP „ Selectable JTAG debug method ‹ ARM7EJC debug only ‹ DSP debug only ‹ ARM7EJC+DSP dual core debug „ Selectable booting method ‹ Boot from NOR Flash ‹ Boot from Embedded ROM „ Internal memory space ‹ DSP IMEM 32Kwords ‹ DSP DMEM 32Kwords ‹ ARM7EJC Embedded Sync SRAM 4Kbytes ‹ ARM7EJC Embedded Boot ROM 8Kbytes 系统特性

  6. LCDC Unit is a controller interface to LCD panel, including a 2048X32bit SRAM. Key features Compatible MCU and RGB interface。 Compatible 8bits series and 24bits parallel RGB interface. Support delta RGB interface panel. Support YUV or RGB image source data input relatively in line. Support 8 grade alpha operations. Support even/odd field mode. Support 4:2:2 or 4:2:0 YUV source data input. Support 16bits or 24bits RGB source data input. Support scale base on YUV source. Support MCU buffer write and bypass mode. LCD 控制器

  7. „ AHB DMA (HDMA) ‹ Integrated in AHB BUS0 ‹ Two DMA channels support ‹ 8 hardware request handshaking support ‹ Built-in 32x16 data FIFO ‹ Support hardware and software trigger DMA transfer mode DMA控制器1

  8. AHB-to-AHB Bridge (A2A) ‹ Integrated between AHB BUS0 and AHB BUS1 ‹ Provide AHB-to-AHB bus protocol translation ‹ Support AHB-to-AHB DMA or Single AHB DMA ‹ Two DMA Channels support ‹ On-the-fly mode between two level bus support ‹ 4 hardware request handshaking support ‹ Support hardware and software trigger DMA transfer mode DMA控制器2

  9. „ DW DMA ‹ Integrated in AHB BUS1 ‹ Four DMA Channels support ‹ 8 hardware request handshaking support ‹ Support hardware and software trigger DMA transfer mode ‹ Build-in 4 data FIFO : 64bytes/64bytes/64bytes/64bytes ‹ Scatter/Gather transfer support ‹ LLP transfer support ‹ Two master for on-the-fly support DMA 控制器3

  10. AHB Master 优先级

  11. Interrupt 优先级(ARM)

  12. Interrupt 优先级(DSP)

  13. DMA Hardware 请求

  14. 见databook System memap

  15. 内容提要 驱动程序介绍

  16. BSP 板支持包(BSP)是指位于RK27_SDK\System\driver目录下的所有代码,包含了芯片内部所有控制器和芯片已有外设的驱动。 BSP不依赖于OS和其他系统、应用程序,用户在有需要时,可基于BSP直接进行开发。 为适应上层调用需要,所有驱动做了必要的封装,调用驱动时包含头文件hw_include.h 即可引用所有驱动资源。 需要修改驱动时,请参考芯片手册。 下面举例说明几个常见的驱动:

  17. 频率切换设置 (1) 接口函数:void Pll_SetARMFreq(nMHz, HCLK_div, PCLK_div) 参数说明: nMHz --- ARM core频率 HCLK_div --- AHB分频值 ( HCLK_DIV1 --- 基于ARM core频率不分频, HCLK_DIV2 --- 基于ARM core频率二分频 ) PCLK_div --- APB分频值 ( PCLK_DIV1 --- 基于AHB频率不分频, PCLK_DIV2 --- 基于AHB频率二分频, PCLK_DIV4 --- 基于AHB频率四分频 ) 使用说明: 系统初始化或需要频率切换时按照参数说明调用此接口

  18. I2C使用 1、接口函数 I2C_Init(UINT8 SlaveAddress, UINT16 nKHz) 初始化I2C I2C_Write(RegAddr, *pData, size,eI2C_mode_t mode) 写I2C I2C_Read(RegAddr, *pData, size,eI2C_mode_t mode) 读I2C I2C_Deinit(void) 反初始化I2C 2、注意事项 向I2C从设备进行读写操作前需要调用I2C_Init设置设备地址和I2C传输频率; I2C_Init和I2C_Deinit要成对使用; 同时只可对同一设备进行读写

  19. GPIO使用 GPIO_PowerOnInit( void ); 开机初始化GPIO GPIO_Config(GPIOPinNum, GpioConfig); 配置一个GPIO GPIO_SetPinLevel(GPIOPinNum,level); 设GPIO电平 GPIO_GetPinLevel(GPIOPinNum); 读GPIO电平 GPIO_SetPinDirection(GPIOPinNum,direction); 设GPIO方向 GPIO_EnableIntr(GPIOPinNum); 打开GPIO中断 GPIO_DisableIntr(GPIOPinNum); 关闭GPIO中断 注意: GPIO分PA、PB、PC、PD四组32个,可分组配置,也可单独配置某一个口。 大多数GPIO都有复用,因此在使用GPIO时应注意联合IOMUX驱动一起使用

  20. IOMUX_PowerOnInit(void) IO复用的上电初始化, IOMUX_SetI2CType(i2ctype) 设置I2C复用的IO口线类型 IOMUX_SetUart0Port(type) 设置UART0复用的IO口线类型 IOMUX_SetUart1Port(type) 设置UART1复用的IO口线类型 IOMUX_SetPwmPort(chn, type) 设置PWM复用的IO口线类型 IOMUX_SetI2SType(codectype) 设置I2S复用的IO口线类型 IOMUX_SetSDPort(type) 设置SD复用的IO口线类型 IO的第一功能和第二功能同时只能使用一个。 IO复用的上电初始化时,将预先设置各复用IO口线功能 ,中途要更改各IO的功能,应根据需要进行配置 IOMUX的使用

  21. 中断的使用 Intr_PowerOnInit(void); --- 开机初始化控制器 Intr_RegISR(irq, routine); --- 注册中断,将isr与irq关联 Intr_Enable(irq); --- 使能特定中断 Intr_Disable(irq); --- 禁止特定中断 Intr_SetPrio(irq, priority); --- 设置中断优先级 Intr_GetPrio(irq); --- 得到中断优先级 int Intr_GetState(void); --- 获取状态 Intr_ClearFlag(irq); --- 清标志 Intr_SetType(irq, type); --- 设置中断类型 Intr_GetType(irq); --- 得到中断类型 注意: 中断驱动只针对芯片的中断控制器,不针对ARM的IRQ 中断开机初始化时,关闭了所有中断,打开了ARM的IRQ 中断服务程序不含参数

  22. 串口调试的使用 • int serial_PowerOnInit (void) • 串口调试的上电初始化 • (2)void serial_printf (const char *fmt, ...) • *fm, .. --- 格式化打印的可变字符串参数 • 串口输出调试字符串和变量值,使用方式和C库函数printf相同 • (3)int serial_scanf (char *fmt, ...) • *fm, .. --- 格式化打印的可变字符串参数 • 从PC端控制台读取输入的字符串,使用方式和C库函数scanf相同

  23. Codec_PowerOnInitial 上电初始化Codec Codec_SetMode(Codecmode); 设置Codec工作模式 Codec_SetSampleRate 设置Codec的采样率 Codec_SetVolumet 设置Codec的音量 Codec_DACMute 设置Codec 在DAC 工作时启动软静音 Codec_DACUnMute(void) 设置Codec在DAC 工作时关闭软静音 Codec_DeIitial(void) 反初始化Codec codec工作模式可设为下列几种: Codec_DACout --- 音频数据流输出 Codec_FMin --- FM LineIn输出 Codec_FMADC --- FM录音 Codec_LineADC --- 线录(Line in recording) Codec_MICAdc --- Mic录音 Codec_Standby --- codec休眠省电模式 Codec的使用

  24. ScreenPowerOnInit(pScreen) ——上电初始化LCD ScreenRGBUpdate(*pScreen, *LcdArea) ——MCU类型LCD屏RGB方式数据更新 ScreenYUVUpdate(*pScreenY,*pScreenUV) ——MCU类型LCD屏YUV方式数据更新 ScreenYUVScaleUpdate ——MCU类型LCD屏YUV方式放大缩小数据更新 ScreenRGBAlphaUpdate ——MCU类型LCD屏RGB方式放大缩小数据更新 LCD及其控制器

  25. 内容提要 仿真、调试、编译、烧录方

  26. RK27 IDE是指包含了源代码、算法库、编译环境、调试环境、仿真环境、烧写工具、资源生成工具等等的软件集成开发包。也即是RK27_SDK 集成开发环境(IDE)

  27. 发布的软件版本包含如下目录: Application —— 应用层代码,如音频、视频播放器、电子书、收音机 System —— 系统代码,包括OS,GUI,驱动,媒体库等等 Build —— 编译相关 Doc —— 平台技术文档 Ide ——存放 编译工程目录,包括仿真和板子等。其中,ide\rk27_board 为板子工程,使用 ADS 进行编译和调试, ide\rk27_dll 为仿真工程,使用 VC++6.0 进行编译和调试。 其他目录为测试目录 Lib —— 解码或其他算法库和相关的头文件。 Output —— 编译输出的中间文件和目标文件。 Resource —— 图片、文本、字库等资源相关, 包括生成工具,输入配置文件,输入数据三部分。输入配置文件必须固定为 resource\resource.cfg 文件。输入格式可以参考该文件例子。具体说明参考后续文档 Tools ——工具 Customer ——预留给二次开发商使用的目录 SDK的目录结构

  28. 编译器安装 VC++ 进行仿真编译,需先安装VC++6.0以上编译器 默认安装完VC++后,无需进行其他设置,双击打开RK27_SDK\Ide\Rk27Dll目录下工程文件rk27dll.dsw文件即进入VC++环境,使用build目录进行编译 如果需要在仿真环境下添加编译开关,进入Project菜单-> settings选项,C/C++选项卡,在其中的Preprocessor definitions中添加 如果需要添加默认编译路径,在其下的project Options中添加即可。

  29. 默认安装完ADS,则可打开RK27_SDK\Ide\Rk27_board目录下ARM工程文件rk27_baord.mcp进行编译默认安装完ADS,则可打开RK27_SDK\Ide\Rk27_board目录下ARM工程文件rk27_baord.mcp进行编译 ARM编译均可使用默认配置,但当使用不同的JTAG调试器时,调试软件AXD需选择不同的JTAG驱动程序。AXD的SDRAM初始化脚本使用build目录下的BoardInit_RK27_8x16.txt文件 编译器安装 ADS

  30. 新的板子或新的Nand Flash在烧写固件之前,应进行boot的烧写,boot升级方法请参考RK27_SDK\Tools目录下《RK27烧写指南.doc》文档 当boot程序有升级时,也应及时进行boot的升级,否则有可能由于固件和boot不兼容而产生错误和冲突 BOOT烧写

  31. 原始图片资源位于Resource\input\bmp目录下,可根据需要进行增删修改原始图片资源位于Resource\input\bmp目录下,可根据需要进行增删修改 Resource根目录下的*.cfg文件用来配置图片和文本资源的输入、输出目录等 原始图片应当是BMP图片,文件名应当是英文或数字名,不可含中文或空格 图片目录可以是中文名。 编译完资源后,将会在Resource\include目录下自动生成Bmp0ID.h的文件,该文件是所有原始图片ID的集合,在代码中引用该ID即可访问对应的图片。 图片资源生成后的目标文件是Output\RESOURCE\BID目录下的BMP0.BIN (注:为防止编译产生资源ID引用错误,应在编译代码之前先编译资源) 图片资源

  32. 原始文本资源位于Resource\input\stringid目录下excel文件unicodeSid.xls,使用office excel打开进行编辑。其中一列代表一国语言。 编辑完原始文本后应另存为txt格式,且选择unicode另存为文本unicode.txt。 进行资源编译后,所有文本ID位于Resource\include目录下stringID.h文件,在代码中引用相应的ID即可访问其对应的文本资源。当语言发生改变时,使用相同的ID。 文本资源生成后,其目标文件是位于Output\RESOURCE\SID目录下的STRINGID.BIN文件 (其他小工具均位于\Resource\bin目录下,请参看其说明) 文本资源

  33. 仿真调试界面

  34. 内容提要 系统和应用软件

  35. RKOS是Rockchip公司自主研发的一个实时抢占性多任务操作系统,主要支持信号量和消息(邮箱)两种通信方式。RKOS是Rockchip公司自主研发的一个实时抢占性多任务操作系统,主要支持信号量和消息(邮箱)两种通信方式。 操作系统的基本调度方法是优先级调度法 操作系统

  36. RKOS的任务是一个具有独立堆栈的无限循环函数,每个任务都可以被内核或中断强占,一个任务可以不依赖其他任务单独运行。RKOS中任务的概念和通用操作系统一致.RKOS的任务是一个具有独立堆栈的无限循环函数,每个任务都可以被内核或中断强占,一个任务可以不依赖其他任务单独运行。RKOS中任务的概念和通用操作系统一致. RKOS中具有五个基本任务:PriHighTask,PriMHighTask,PriNormalTask,PriLowTask和TimerTask,参与任务切换的还包括中断程序和IDLE任务, 一个优先级只对应一个任务,这些任务均由内核启动时静态创建。所有任务一直驻留在内存之中,优先级不发生动态变化。 一般地,用户不新创建任务 任务

  37. 任务举例

  38. 当任务被创建后,处于就绪队列。OS TICK(5ms一次)到来之机,将就绪队列中优先级最高的任务和当前运行的任务比较,若比当前任务优先级更高,则执行任务切换,否则继续运行当前任务。 当前任务恒定只有一个,在当前任务运行的过程中,若需要等待一个条件(比如等待接受一个消息,等待申请一个信号量等),则会进入挂起状态,就绪队列中的最高任务会转入运行。 挂起的任务所等待的条件到来时(如收到了消息,申请到了信号量等),此任务会转入就绪队列。优先级满足时会即刻转入运行。 任务的状态转换

  39. 任务的基本状态

  40. RKOS的线程是包含在某个任务之内的一个可独立处理消息的程序,一个任务可以包含有多个线程。线程没有独立的堆栈,RKOS线程具有如下特性RKOS的线程是包含在某个任务之内的一个可独立处理消息的程序,一个任务可以包含有多个线程。线程没有独立的堆栈,RKOS线程具有如下特性 ◆ 同一个任务内的所有线程共用该任务的堆栈。 ◆ 同一个任务内的所有线程按照注册次序顺序执行(串行),没有调度关系。 ◆ 不同任务内的线程并行执行。 ◆ 一个任务内的某个线程若一直等待一个条件,则此任务内的其他线程都得不到执行,但其他任务内的线程可以得到执行。 线程有少数几个是系统初始化时自建的,如GUI线程和刷屏线程,始终驻留在系统之中,用户的需要用到时,不需要再建立,只需要将代码嵌入在其中即可,如GUI系统。 使用RockAppCreateThread动态注册一个线程(关联到一个应用程序)。注册时给出线程名和所属任务的优先级,若注册成功,返回一个线程句柄。注销时只需要提供线程句柄。 线程

  41. 线程函数本质上是一个处理消息的函数体,具有固定的类型和参数,如下图是一个刷屏的线程,处理三个消息线程函数本质上是一个处理消息的函数体,具有固定的类型和参数,如下图是一个刷屏的线程,处理三个消息 线程函数写法

  42. 线程的运行是在该线程的任务中进行,当任务收到消息时,会将消息分发给注册在本任务的线程,分发函数如下,即从线程列表中逐一取出线程回调函数,依次调用并将消息传递给线程,若该线程响应了此条消息,则不继续往下一线程派发,否则一直派发到最后一个线程。 线程的运行

  43. 线程被任务调用

  44. 消息用于线程(或任务)之间的数据传递,可传送任意长度的数据。其接口是:消息用于线程(或任务)之间的数据传递,可传送任意长度的数据。其接口是: RockOSSendMsg    (* msgBox , Msgid , msg )           ——发送消息 RockOSReceiveMsg(* msgBox ,  Msgid, msg )          ——接收消息 消息传递的三个参数分别是邮箱、消息ID和消息体指针。 消息的发送可以在任务、线程、中断、定时器、内核等各处进行,但消息的接受一般只在任务中进行,因为消息在接受过程中可能会挂起任务,若在中断、线程中接受消息,则可能导致中断和线程长时间不能退出而崩溃。 操作系统消息

  45. 一个任务对应一个邮箱,同一任务的多个线程共用一个邮箱,消息ID Msgid是区分不同消息的ID号,消息指针指向消息体,消息体可以是任意数据类型,任意长度。 消息的收发伴随有任务调度,分几种情况: ◆ 当前任务A往一个更高优先级的任务B发送消息时,若目标任务B正处于挂起状态等待本消息,则切换至B任务处理此消息。同时Ready掉A任务 ◆ 当前任务A往一个更低优先级的任务B发送消息时,不作任务切换,只递交消息指针,OS TICK调度到B任务时,才能响应此消息。 ◆     中断ISR往一个任务发送消息时,发送期间不作任务切换,中断退出时,作一次任务调度。 ◆     同一任务的不同线程A和B之间传递消息时,实际上就是一个任务给自身发送消息,不做任务切换和调度。 ◆ 当前任务A使用RockOSReceiveMsg接收一个消息时,若该消息尚未被发送,邮箱中没有任何消息时,任务将被挂起,处于等待状态。 操作系统消息派发规则

  46. 信号量(也称旗语)主要用于任务之间或多个任务的线程之间的某些同步。其接口如下:信号量(也称旗语)主要用于任务之间或多个任务的线程之间的某些同步。其接口如下: RockSemObtain(psem)      ——等待、申请信号量 RockSemRelease (psem)     ——释放信号量 当两个任务之间的线程共同访问一个资源时,需要用信号量同步,在进入共享之前,任务先使用RockSemObtain查询信号量psem是否被占用(在其他TASK被RockSemObtain),若被占用,则挂起本任务,直到信号量psem被别处释放,本任务得以继续,同时本任务占用信号量psem,直到使用RockSemRelease释放。同一任务的多个线程之间不存在信号量同步的问题,即同一任务的多个线程之间的信号量是没有任何冲突的。 信号量

  47. 信号量简图

  48. GUI,注册表,文件系统,应用软件等见《RK27软件开发指南》GUI,注册表,文件系统,应用软件等见《RK27软件开发指南》

  49. Thank You !

More Related