1 / 36

RK27 驱动软件

RK27 驱动软件. 内容提要. 芯片资源与架构. 驱动模块简介. 驱动接口说明. Q&A. 内容提要. 芯片资源与架构. RK27XX 系列资源列表 (1). RK27XX 系列资源列表 (2). RK27XX 芯片架构. System Operation „ Dual Core Architecture (ARM7EJC+DSP) „ Support system boot sequentially from ARM7EJC to DSP „ Selectable JTAG debug method ‹ ARM7EJC debug only

nalani
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. 内容提要 芯片资源与架构 驱动模块简介 驱动接口说明 Q&A

  3. 内容提要 芯片资源与架构

  4. RK27XX 系列资源列表(1)

  5. RK27XX 系列资源列表(2)

  6. RK27XX 芯片架构

  7. 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 系统特性

  8. 内容提要 驱动模块简介

  9. 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 Controller

  10. 系统中有3个独立的DMA模块 „ A2A DMA --- 用于总线间数据传输 ‹ HDMA --- 用于音频数据传输 ‹ DW DMA --- 用于视频和LCD数据传输 DMA

  11. ‹ 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 A2A DMA

  12. „ 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 HDMA

  13. ‹ 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 DW DMA

  14. DMA 硬件请求

  15. Interrupt 优先级(ARM)

  16. Interrupt 优先级(DSP)

  17. 内容提要 驱动接口说明

  18. RK27 Driver Rk27 Driver代码在RK27_SDK\System\driver目录下,包含了芯片内部所有控制器和芯片已有外设的驱动。 为适应上层调用需要,所有驱动做了必要的封装,调用驱动时包含头文件hw_include.h 即可引用所有驱动资源。 驱动包中已有的可选驱动可通过hw_define.h的宏定义切换 需要修改和增加驱动时,请参考芯片手册。

  19. Driver调用原则 RK27 Driver使用时遵循以下原则: (1) 应用层调用驱动接口,统一在需要调用驱动接口的c文件中包含hw_include.h。 (2) 如果需要使用的驱动模块有XXX_PowerOnInit()接口,应在系统初始化时先调用此接口进行此驱动模块的上电初始化,而后在使用处再调用此驱动模块的其它接口。 (3) RK27 chip上电默认cache处于关闭状态,为了提高访问sdram等外设的效率,建议在系统初始化时调用Cache_PowerOnInit()打开cache。 (4) RK27 chip的IO口较少,很多管脚复用。使用有复用管脚的设备时注意先调用IOMUX接口将管脚切换到需要的驱动模块管脚功能。 (5) RK27 chip上电AHB总线频率为48MHz,复位后AHB总线频率为12MHz。一般需要在系统初始化时调用Pll_SetARMFreq()重新设置成需要的ARM、AHB、APB总线频率。 (6) DMA传输的目标地址是sdram,并且此目标地址有可能被ARM或DSP访问,那么在完成DMA一次传输后,必须使用Cache_FlushDataLine函数清除cache,否则目标地址的内容更新有可能不被ARM或DSP获知(cache没有更新)

  20. 接口函数: 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频率四分频 ) 使用说明: 系统初始化或需要频率切换时按照参数说明调用此接口 频率切换设置

  21. Cache使用 • 接口函数: • void Cache_PowerOnInit(void) 系统初始化时调用打开cache • void Cache_FlushDataLine(UINT32 address, UINT32 numofbyte) • 清除Cache的Data line • address --- 需要清除被cache的数据地址 • numofbyte --- 需要清除被cache的数据长度 • 注意事项: • DMA访问sdram数据或者ARM和DSP同步数据时需要清cache

  22. I2C使用 接口函数 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 注意事项 向I2C从设备进行读写操作前需要调用I2C_Init设置设备地址和I2C传输频率,其中不论读写, I2C_Init参数中的设备地址都是写地址,读操作的内部会转化为读地址。 I2C_Init和I2C_Deinit要成对使用; I2C读写时可被其它任务或中断打断,但是不可在打断过程中操作另一个I2C设备。特别注意不可在中断服务中调用I2C_Write/I2C_Read。

  23. 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中断 注意: (1) GPIO分A、B、C、D、E、F六组共48个,可分组配置,也可单独配置某一个口。大多数GPIO都有复用,因此在使用GPIO时应注意联合IOMUX驱动一起使用。2706/2708/2710引出的管脚数量不同,具体参看RK27XX datasheet。 (2) IO内部上下拉: 􀂄 PWM0 : no pull internal, must pull external 􀂄 PC0-6, PWM1, PWM2: pull down 􀂄 Other IO: pull up PA、PB、PC、PD的内部上下拉情况可配置,PE、PF不可配置

  24. 接口函数: 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的使用

  25. 中断的使用 接口函数: Intr_PowerOnInit(void); --- 开机初始化控制器 Intr_RegISR(irq, routine); --- 注册中断,将isr与irq关联 Intr_Enable(irq); --- 使能特定中断 Intr_Disable(irq); --- 禁止特定中断 注意: 中断驱动只针对芯片的中断控制器,不针对ARM的IRQ 中断开机初始化时,关闭了所有中断,打开了ARM的IRQ 注册中断将开启所注册的中断 中断服务程序不含参数

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

  27. Backlight的使用 • (1) void BL_Init(BL_LIGHT_en_t light) • 背光初始化 • 为了背光在lcd之前初始化时不会出现白屏现象,初始化时背光亮度为0 • void BL_SetBright(BL_LIGHT_en_t light) • 设置背光亮度 • 亮度等级: • BL_DARK --- 全暗 • BL_LUNAR --- 较暗 • BL_NORMAL --- 正常亮度 • BL_HIGH --- 较亮 • BL_FULL --- 全亮 • (3) void BL_DeInit(void) • 背光反初始化

  28. 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的使用

  29. 接口函数: Screen_PowerOnInit上电初始化函数 Screen_Init LCDC和LCD重新初始化 Screen_MCUUpDate MCU屏刷屏函数 Screen_RGBUpDate RGB屏刷屏函数 Screen_Change背景数据切换函数 Screen_ChangeAlpha前景数据切换函数 Screen_CreatRGB 创建背景数据函数 Screen_CreatAlpha创建前景数据函数 Screen_Display LCD显示函数 LCD

  30. 接口函数: Tvout_Init 电视输出初始化函数 Tvout_DeInit 退出电视显示函数 Tvout_PostAdjust 图象位置调整函数 Tvout_ScalAdjust 水平位置缩放函数 TVOUT

  31. A2A DMA(1) • 主要用于SD/MMC controller, Memory copy • 注意Cache flush 接口函数: void A2A_PowerOnInit(void) A2A DMA的上电初始化,使用A2A DMA之前确保调用此函数 int A2A_Transmit(UINT32 SrcAddr,UINT32 DestinAddr,UINT32 Count,UINT32 Mode,A2ACallBack CallBack) A2A DMA启动传输 参数说明: SrcAddr --- A2A DMA传送的源地址 DestinAddr --- A2A DMA传送的目的地址 Count --- A2A DMA传送的长度(以Mode传输单位计数) Mode --- 传输模式(A2A_MemByteCopy, A2A_MemIntCopy) CallBack --- A2A DMA回调函数 注意:目的地址固定时,不能以byte单位传输 源地址和目的地址数据宽度必须相同 一次启动传输最大长度为64Kbyte-1

  32. A2A DMA(2) 接口函数: int A2A_GetStatus(A2A_Channel_t channel) 用查询方式使用A2A DMA 时通过此接口判断传输状态 参数说明: channel --- A2A DMA的通道号 使用说明: 返回A2ABusy时表明此通道正在DMA传输 返回A2ASuccess时表明此通道传输完成处于空闲状态 void A2A_DeInit(void) A2A DMA反初始化, 关闭A2A DMA时调用

  33. 传输长度和burst形式对应 64 byte 对齐进行DMA传输 最大传输长度64K * 传输宽度-1 DMA传输完成后停止I2S 注意Cache flush 接口函数: void HDMA_PowerOnInit(void) HDMA上电初始化 int DmaTransmit(UINT32 SrcAddr,UINT32 DestinAddr,UINT32 Count,UINT32 Mode,DMACallBack CallBack) HDMA启动传输 参数说明: SrcAddr --- HDMA传送的源地址 DestinAddr ---HDMA传送的目的地址 Count --- HDMA传送的长度(以Mode传输单位计数) Mode --- 传输模式 (DmaMemIntCopy, DmaMemByteCopy, DmaI2sPlayCopy, DmaI2sRecordCopy) CallBack ---HDMA回调函数 HDMA(1)

  34. 接口函数: int HDMA_GetStatus(HDMA_Channel_t channel) ---- 用查询方式使用HDMA 时通过此接口判断传输状态 参数说明: channel --- HDMA的通道号 使用说明: 返回DmaBusy时表明此通道正在DMA传输 返回DmaSuccess时表明此通道传输完成处于空闲状态 void HDMA_DeInit(void) ---- HDMA反初始化,关闭HDMA时调用 HDMA(2)

  35. DW DMA DW DMA有4个channel: 两个分配给LCD使用,两个分配给视频解码使用 因而用户不直接调用DW DMA的接口

  36. Thank You !

More Related