CM4 API

REVISION HISTORY

Revision No.
Description
Date
1.0
  • Initial release
  • 08/21/2023

    1. CM4 API 调用框架


    图1 CM4 API 调用框架

    2. API 参考

    2.1. SSAO_GetFlag

    • 功能

      获取task事件句柄m_SsaoFlag指标。

    • 语法

      Ms_Flag_t* SSAO_GetFlag(void)
      
    • 形参

      参数名称 描述 输入/输出
    • 返回值

      • 非空指标:成功。
      • 其它:暂无。
    • 简单说明

      • 函数直接返回全局变量m_SsaoFlag的指标。

    2.2. SSAO_WaitFlag

    • 功能

      使pipeline等待特定事件发生。

    • 语法

      Ms_flag_value_t SSAO_WaitFlag(Ms_flag_value_t SsaoFlag)
      
    • 形参

      参数名称 描述 输入/输出
      SsaoFlag 需要等待的事件标志位 输入
    • 返回值

      • 函数返回等待到的事件标志。
    • 简单说明

      1. 函数会等待SsaoFlag指定的事件发生,只要其中一个事件发生函数就是返回事件的位值。
      2. 函数会将发生事件的标志位值清除。

    2.3. SSAO_GetConfig

    • 功能

      获取模块配置参数m_SsaoConfig指针。

    • 语法

      SsaoConfigParam_t* SSAO_GetConfig(void)
      
    • 形参

      参数名称 描述 输入/输出
    • 返回值

      • 非空指标:成功。
      • 其它:暂无。
    • 简单说明

      1. 各模块参数使用统一的全局配置参数m_SsaoConfig进行配置。
      2. 获取m_SsaoConfig指针后,可对模块参数进行配置。

    2.4. SSAO_Init

    • 功能

      初始化各模块。

    • 语法

      void SSAO_Init(void)
      
    • 形参

      参数名称 描述 输入/输出
    • 返回值

      • 无。
    • 简单说明

      此函数会初始化 SSAO Flag /MBX /BDAM semaphore /Timer /VIF /PIR /WDT。

    2.5. SSAO_Run

    • 功能

      运行已经初始化的模块。

    • 语法

      void SSAO_Run(void)
      
    • 形参

      参数名称 描述 输入/输出
    • 返回值

      • 无。
    • 简单说明

      1. 开始使用WDT机制。
      2. 关闭VIF mask使影像流通流。

    2.6. SSAO_Stop

    • 功能

      停止运行模块。

    • 语法

      void SSAO_Stop(void)
      
    • 形参

      参数名称 描述 输入/输出
    • 返回值

      • 无。
    • 简单说明

      • 无。

    2.7. SSAO_Destroy

    • 功能

      去除初始化相关的模块。

    • 语法

      void SSAO_Destroy(void)
      
    • 形参

      参数名称 描述 输入/输出
    • 返回值

      • 无。
    • 简单说明

      1. 结束BDAM Semaphore。
      2. 结束WDT。
      3. 函数摧毁全局事件句柄 m_SsaoFlag。

    2.8. SSAO_Pir_SwitchMode

    • 功能

      切换PIR信道工作模式。

    • 语法

      void SSAO_Pir_SwitchMode(u8 Ch, SsaoPirMode_e PirMode)
      
    • 形参

      参数名称 描述 输入/输出
      Ch PIR通道 输入
      PirMode PIR工作模式 输入
    • 返回值

      • 无。
    • 简单说明

      • 根据PirMode修改ch指定的PIR信道的工作模式,目前支持 SSAO_PIR_FORCE_READ_OUT与SSAO_PIR_WAKEU模式。

    2.9. SSAO_Pir_ReadOutDataBits

    • 功能

      获取PIR模块输出数据(40 bits)。

    • 语法

      u64 SSAO_Pir_ReadOutDataBits(void)
      
    • 形参

      参数名称 描述 输入/输出
    • 返回值

      • pir输出数据:成功。
    • 简单说明

      • 使用方法1: 等待PIR INT SSAO_FLAG_PIRX(X=0 1 2) 事件触发后,PIR切换成SSAO_PIR_FORCE_READ_OUT模式后就以此API取得PIR资料。
      • 使用方法2: 开机后PIR直接进入SSAO_PIR_FORCE_READ_OUT模式后固定每16ms以此API取得PIR资料,不断对PIR算法作训练。

    2.10. SSAO_Pir_ShowSensorStatus

    • 功能

      解析PIR数据并输出。

    • 语法

      void SSAO_Pir_ShowSensorStatus(u8 ch, u64 data)
      
    • 形参

      参数名称 描述 输入/输出
      Ch PIR通道 输入
      data PIR输出数据 输入
    • 返回值

      • 无。
    • 简单说明

      • 将SSAO_Pir_ReadOutDataBits API取回的PIR值以Log呈现。

    2.11. SSAO_Hpd_Init

    • 功能

      初始化Raw-HPD并取得影像的存放位置。

    • 语法

      ss_phys_addr_t SSAO_Hpd_Init(void)
      
    • 形参

      参数名称 描述 输入/输出
    • 返回值

      • 影像的存放位置。
    • 简单说明

      • Raw-HPD内存需求103KB,内含输入的影像空间。

    2.12. SSAO_Hpd_Process

    • 功能

      获取Raw-HPD识别结果。

    • 语法

      s32 SSAO_Hpd_Process(SLNN_Postprocess_Outputs_t *pstOutputs)
      
    • 形参

      参数名称 描述 输入/输出
      pstOutputs 辨识到的区块个数及每个区块的坐标值 输出
    • 返回值

      • 0:成功。
      • 其它:暂无。
    • 简单说明

      • 无。

    2.13. SSAO_Vif_SetWdmaAddr

    • 功能

      设置VIF的WDMA的位置。

    • 语法

      void SSAO_Vif_SetWdmaAddr(u32 PhysBufAddr)
      
    • 形参

      参数名称 描述 输入/输出
      PhysBufAddr VIF的WDMA的位置 输入
    • 返回值

      • 无。
    • 简单说明

      • 无。

    2.14. SSAO_Vif_SetInputMask

    • 功能

      设置VIF模块的输入遮蔽功能。

    • 语法

      void SSAO_Vif_SetInputMask(u8 Mask, u8 Force)
      
    • 形参

      参数名称 描述 输入/输出
      Mask 是否打开 VIF mask 功能 输入
      Force 是否强制立即执行 输入
    • 返回值

      • 无。
    • 简单说明

      • Force为0表示会等到Frame Start讯号,Force为1表示强制立即执行。

    2.15. SSAO_Vif_SetLineCntHit

    • 功能

      设置VIF模块的Line Hit条数。

    • 语法

      void SSAO_Vif_SetLineCntHit(u8 bEn, PmVifIsr_e isr_mode, u32 line_counter)
      
    • 形参

      参数名称 描述 输入/输出
      bEn 是否打开该功能 输入
      isr_mode Line Hit 0 或 1 输入
      line_counter 触发ISR的条数值 输入
    • 返回值

      • 无。
    • 简单说明

      • 此IC有两组Line Hit可使用。

    2.16. SSAO_Mbx_SendMsg

    • 功能

      使用mailbox发送信息到NonPM。

    • 语法

      int SSAO_Mbx_SendMsg(SS_Mbx_Msg_t *pMsg, S32 u32TimeoutMillSecs)
      
    • 形参

      参数名称 描述 输入/输出
      pMsg MBX讯息数据的指针位置 输入
      u32TimeoutMillSecs 发送信息超时时间 输入
    • 返回值

      • 0:成功。
      • 2:超时。
    • 简单说明

      • SSAO_MBX允许客制化增订MBX CMD。

    2.17. SSAO_Mbx_RecvMsg

    • 功能

      使用mailbox接收NonPM发送来的信息。

    • 语法

      int SSAO_Mbx_RecvMsg(SS_Mbx_Msg_t *pMsg)
      
    • 形参

      参数名称 描述 输入/输出
      pMsg 接收到的信息状态 输出
    • 返回值

      • 0:成功。
      • 其它:失败。
    • 简单说明

      • SSAO_MBX允许客制化增订MBX CMD。

    2.18. SSAO_Gpio_Request

    • 功能

      设置GPIO脚位相关设定。

    • 语法

      void SSAO_Gpio_Request(u8 GpioID)
      
    • 形参

      参数名称 描述 输入/输出
      GpioID GPIO ID 输入
    • 返回值

      • 无。
    • 简单说明

      • 无。

    2.19. SSAO_Gpio_SetOutput

    • 功能

      设置GPIO为输出模式。

    • 语法

      void SSAO_Gpio_SetOutput(u8 GpioID, u8 OutVal)
      
    • 形参

      参数名称 描述 输入/输出
      GpioID GPIO ID 输入
      OutVal 输出电平 输入
    • 返回值

      • 无。
    • 简单说明

      • 可参考ut_ssao_case_gpio.c的DEMO_GPIO_OUTPUT。

    2.20. SSAO_Gpio_SetInput

    • 功能

      设置GPIO为输入模式。

    • 语法

      void SSAO_Gpio_SetInput(u8 GpioID, u8 IsrEn, CamOsIrqHandler pfnHandler)
      
    • 形参

      参数名称 描述 输入/输出
      GpioID GPIO ID 输入
      IsrEn 是否使能IO中断 输入
      pfnHandler 对应的IRQ Handler 输入
    • 返回值

      • 无。
    • 简单说明

      • 可参考ut_ssao_case_gpio.c的DEMO_GPIO_INPUT_POLL与DEMO_GPIO_INPUT_ISR。

    2.21. SSAO_Gpio_GetVal

    • 功能

      取得GPIO为输入模式时的准位响应值。

    • 语法

      u8 SSAO_Gpio_GetVal(u8 GpioID)
      
    • 形参

      参数名称 描述 输入/输出
      GpioID GPIO ID 输入
    • 返回值

      • 0 : Low level。
      • 1 : High level。
    • 简单说明

      • 无。

    2.22. SSAO_Gpio_SetPull

    • 功能

      设定GPIO内部Pull值。

    • 语法

      void SSAO_Gpio_SetPull(u8 GpioID, u8 PullEn, u8 PullSel)
      
    • 形参

      参数名称 描述 输入/输出
      GpioID GPIO ID 输入
      PullEn 是否开启Pull机制(0:Pull disable / 1:Pull enable) 输入
      PullSel Pull的选择(0:Pull up / 1:Pull down) 输入
    • 返回值

      • 无。
    • 简单说明

      • 与该脚位对接的装置电路有关,影响脚位是否漏电。

    2.23. SSAO_Gpio_SetDrv

    • 功能

      设定GPIO的Driving强度。

    • 语法

      void SSAO_Gpio_SetDrv(u8 GpioID, u8 Drv)
      
    • 形参

      参数名称 描述 输入/输出
      GpioID GPIO ID 输入
      Drv Driving的强度(0:4mA / 1:8mA / 2:12mA / 3:16mA) 输入
    • 返回值

      • 无。
    • 简单说明

      • 影响该脚位的电位转换速度。

    2.24. SSAO_Psram_Active

    • 功能

      PSRAM进入Active状态。

    • 语法

      int SSAO_Psram_Active(void)
      
    • 形参

      参数名称 描述 输入/输出
    • 返回值

      • 0:成功。
      • -1:失败。
    • 简单说明

      • 无。

    2.25. SSAO_Psram_Sleep

    • 功能

      PSRAM进入Sleep状态。

    • 语法

      int SSAO_Psram_Sleep(void)
      
    • 形参

      参数名称 描述 输入/输出
    • 返回值

      • 0:成功。
      • -1:失败。
    • 简单说明

      • 无。

    2.26. SSAO_PMP_IdleMode_Timer

    • 功能

      进入空闲模式并将由Timer唤醒。

    • 语法

      void SSAO_PMP_IdleMode_Timer(Ssao_Idle_Param_t *IdleParam, u64 *WakeUpEvent)
      
    • 形参

      参数名称 描述 输入/输出
      IdleParam Idle相关设定 输入
      WakeUpEvent 说明被何事件唤醒 输出
    • 返回值

      • 无。
    • 简单说明

      • 由Timer唤醒Idle模式的设定程序较特殊因此独立成一个API。

    2.27. SSAO_PMP_IdleMode_General

    • 功能

      进入Idle模式并将由一般事件(除Timer之外,如RTC IO0/1,RTC Alarm,PM GPIO,Timer,WDT,PIR)唤醒。

    • 语法

      void SSAO_PMP_IdleMode_General(Ssao_Idle_Param_t *IdleParam, u64 *WakeUpEvent)
      
    • 形参

      参数名称 描述 输入/输出
      IdleParam Idle相关设定 输入
      WakeUpEvent 说明被何事件唤醒 输出
    • 返回值

      • 无。
    • 简单说明

      • Idle模式支持的唤醒事件可参考sc/sysdriver/pm_power/hal/mhal_pm_power.h。

    2.28. SSAO_PMP_SleepMode_Enter

    • 功能

      进入睡眠模式。

    • 语法

      void SSAO_PMP_SleepMode_Enter(DrvPMModeEvent wakeup_event1, DrvPMModeEvent wakeup_event2, DrvPMModeEvent wakeup_event3, u8 KeepPsramData)
      
    • 形参

      参数名称 描述 输入/输出
      wakeup_event1 唤醒事件1 输入
      wakeup_event2 唤醒事件2 输入
      wakeup_event3 唤醒事件3 输入
      KeepPsramData 维持PSRAM内的数据 输入
    • 返回值

      • 无。
    • 简单说明

      • PM进入睡眠模式时NonPM需处于Power Off状态。
      • PM离开睡眠模式时程序会重新执行。

    2.29. SSAO_Clk_ChangeMode

    • 功能

      设定系统的Clock模式。

    • 语法

      int SSAO_Clk_ChangeMode(int mode)
      
    • 形参

      参数名称 描述 输入/输出
      mode 系统Clock的模式 输入
    • 返回值

      • 0:无对应的模式。
      • 1:Clock模式设定完成。
    • 简单说明

      • PM_CLOCK_NONE_MODE: PSRAM 196.6MHz /MIU 196.6MHz /IMI 196.6MHz /MCU 196.6MHz。
      • PM_CLOCK_NORMAL_MODE: PSRAM 98.3MHz /MIU 49.15MHz /IMI 98.3MHz /MCU 98.3MHz。
      • PM_CLOCK_HIGH_PERFORMANCE_MODE: PSRAM 98.3MHz /MIU 98.3MHz /IMI 196.6MHz /MCU 196.6MHz。
      • PM_CLOCK_LOW_POWER_MODE: PSRAM 49.15MHz /MIU 49.15MHz /IMI 49.15MHz /MCU 49.15MHz。
      • PM_CLOCK_ACTIVE1: PSRAM 6MHz /MIU 3MHz /IMI 6MHz /MCU 6MHz。

    2.30. SSAO_Rtc_AlarmTimer

    • 功能

      设定RTC警报时间。

    • 语法

      int  SSAO_Rtc_AlarmTimer(u64 seconds)
      
    • 形参

      参数名称 描述 输入/输出
      seconds 警报触发的时间 输入
    • 返回值

      • 0:成功。
      • 其它:失败。
    • 简单说明

      • RTC警报时间是以秒为单位。

    2.31. SSAO_Wdt_Ping

    • 功能

      唤醒看门狗。

    • 语法

      int SSAO_Wdt_Ping(void)
      
    • 形参

      参数名称 描述 输入/输出
    • 返回值

      • 无。
    • 简单说明

      • WDT可搭配InterCoreMgr的心跳包机制使用。

    2.32. SSAO_NonPM_WaitReady

    • 功能

      等待NonPM已准备好。

    • 语法

      void SSAO_NonPM_WaitReady(void)
      
    • 形参

      参数名称 描述 输入/输出
    • 返回值

      • 无。
    • 简单说明

      • 无。

    2.33. SSAO_NonPM_PowerOn

    • 功能

      将NonPM的供电开启。

    • 语法

      void SSAO_NonPM_PowerOn(void)
      
    • 形参

      参数名称 描述 输入/输出
    • 返回值

      • 无。
    • 简单说明

      • 开启RTC IO4。

    2.34. SSAO_NonPM_PowerOff

    • 功能

      将NonPM的供电关闭。

    • 语法

      void SSAO_NonPM_PowerOff(void)
      
    • 形参

      参数名称 描述 输入/输出
    • 返回值

      • 无。
    • 简单说明

      • 关闭RTC IO4。

    2.35. SSAO_NonPM_Rst

    • 功能

      重置NonPM。

    • 语法

      void SSAO_NonPM_Rst(void)
      
    • 形参

      参数名称 描述 输入/输出
    • 返回值

      • 无。
    • 简单说明

      • 无。

    2.36. SSAO_NonPM_RstHold

    • 功能

      NonPM维持在重置状态。

    • 语法

      void SSAO_NonPM_RstHold(void)
      
    • 形参

      参数名称 描述 输入/输出
    • 返回值

      • 无。
    • 简单说明

      • 无。

    2.37. SSAO_NonPM_RstRelease

    • 功能

      NonPM由重置状态离开。

    • 语法

      void SSAO_NonPM_RstRelease(void)
      
    • 形参

      参数名称 描述 输入/输出
    • 返回值

      • 无。
    • 简单说明

      • 无。

    2.38. SSAO_Bdma_Copy

    • 功能

      用BDMA作数据搬移。

    • 语法

      int  SSAO_Bdma_Copy(SSAO_DMA_COPY *cfg)
      
    • 形参

      参数名称 描述 输入/输出
      cfg BDMA相关设定 输入
    • 返回值

      • 0:成功。
      • -1:失败。
    • 简单说明

      • PM操控BDMA时可作IMI与PSRAM间数据搬移。
      • NonPM操控BDMA时还可作DDR与IMI或PSRAM间数据搬移。

    2.39. SSAO_Mem_ImiAlloc

    • 功能

      在IMI配置一块内存。

    • 语法

      int SSAO_Mem_ImiAlloc(u32 nSize, void **pAddr)
      
    • 形参

      参数名称 描述 输入/输出
      nSize 配置内存的大小 输入
      pAddr 配置内存的位置 输出
    • 返回值

      • 0:成功。
      • -1:失败。
    • 简单说明

      • 无。

    2.40. SSAO_Mem_ImiRelease

    • 功能

      在IMI释放一块内存。

    • 语法

      int SSAO_Mem_ImiRelease(void *pAddr)
      
    • 形参

      参数名称 描述 输入/输出
      pAddr 释放内存的位置 输入
    • 返回值

      • 0:成功。
      • -1:失败。
    • 简单说明

      • 无。

    2.41. SSAO_Mem_Imi2Cache

    • 功能

      将IMI某块内存转成Cacheable。

    • 语法

      void SSAO_Mem_Imi2Cache(unsigned int Addr)
      
    • 形参

      参数名称 描述 输入/输出
      Addr 内存的位置 输入
    • 返回值

      • 无。
    • 简单说明

      • 无。

    2.42. SSAO_Mem_Imi2NonCache

    • 功能

      将IMI某块内存转成Non-Cacheable。

    • 语法

      void SSAO_Mem_Imi2NonCache(unsigned int Addr)
      
    • 形参

      参数名称 描述 输入/输出
      Addr 内存的位置 输入
    • 返回值

      • 无。
    • 简单说明

      • 无。

    2.43. SSAO_Mem_Imi2Bus

    • 功能

      将IMI某块内存转成Bus(for HW IP)认得的位置。

    • 语法

      void SSAO_Mem_Imi2Bus(unsigned int Addr)
      
    • 形参

      参数名称 描述 输入/输出
      Addr 内存的位置 输入
    • 返回值

      • 无。
    • 简单说明

      • 无。

    2.44. SSAO_Mem_PsramAlloc

    • 功能

      在PSRAM配置一块内存。

    • 语法

      int SSAO_Mem_PsramAlloc(u32 nSize, void **pAddr)
      
    • 形参

      参数名称 描述 输入/输出
      nSize 配置内存的大小 输入
      pAddr 配置内存的位置 输出
    • 返回值

      • 0:成功。
      • -1:失败。
    • 简单说明

      • 无。

    2.45. SSAO_Mem_PsramRelease

    • 功能

      在PSRAM释放一块内存。

    • 语法

      int SSAO_Mem_PsramRelease(void *pAddr)
      
    • 形参

      参数名称 描述 输入/输出
      pAddr 释放内存的位置 输入
    • 返回值

      • 0:成功。
      • -1:失败。
    • 简单说明

      • 无。

    2.46. SSAO_Mem_Psram2Cache

    • 功能

      将PSRAM某块内存转成过Cache。

    • 语法

      void SSAO_Mem_Psram2Cache(unsigned int Addr)
      
    • 形参

      参数名称 描述 输入/输出
      Addr 内存的位置 输入
    • 返回值

      • 无。
    • 简单说明

      • 无。

    2.47. SSAO_Mem_Psram2NonCache

    • 功能

      将PSRAM某块内存转成过NonCache。

    • 语法

      void SSAO_Mem_Psram2NonCache(unsigned int Addr)
      
    • 形参

      参数名称 描述 输入/输出
      Addr 内存的位置 输入
    • 返回值

      • 无。
    • 简单说明

      • 无。

    2.48. SSAO_Mem_Psram2Bus

    • 功能

      将PSRAM某块内存转成Bus(for HW IP)认得的位置。

    • 语法

      void SSAO_Mem_Psram2Bus(unsigned int Addr)
      
    • 形参

      参数名称 描述 输入/输出
      Addr 内存的位置 输入
    • 返回值

      • 无。
    • 简单说明

      • 无。

    2.49. SSAO_Mem_CacheFlushRange

    • 功能

      将某块过Cache内存作刷新的操作以确保物理内存内的值有更新到。

    • 语法

      void SSAO_Mem_CacheFlushRange(u32 addr, s32 size)
      
    • 形参

      参数名称 描述 输入/输出
      addr 内存的位置 输入
      size 内存的大小 输入
    • 返回值

      • 无。
    • 简单说明

      • 无。

    3. 数据类型

    3.1. Ms_Flag_t

    • 说明

      任务事件组。

    • 定义

      typedef struct
      {
          EventGroupHandle_t  handle;
          StaticEventGroup_t  buf;
      } Ms_Flag_t;
      
    • 成员

      成员名称 描述
      handle 事件组句柄
      buf 事件句柄对应的 buf

    3.2. Ms_flag_value_t

    • 说明

      事件组中的某一个位,表示事件组中一个事件。

    • 定义

      typedef EventBits_t Ms_flag_value_t;
      
      enum
      {
          SSAO_FLAG_PIR0              = BIT0,
          SSAO_FLAG_PIR1              = BIT1,
          SSAO_FLAG_PIR2              = BIT2,
          SSAO_FLAG_HST1TO0           = BIT3,
          SSAO_FLAG_ALARM             = BIT4,
          SSAO_FLAG_VIF_WDMA_DONE     = BIT5,
          SSAO_FLAG_VIF_FRAME_START   = BIT6,
          SSAO_FLAG_VIF_LINE_HIT_0    = BIT7,
          SSAO_FLAG_VIF_LINE_HIT_1    = BIT8,
          SSAO_FLAG_BDMA_DONE         = BIT9,
          SSAO_FLAG_TIMER_4           = BIT10,
          SSAO_FLAG_GPIO              = BIT11,
          SSAO_FLAG_WDT_PRETIMEOUT    = BIT12,
      };
      
    • 成员

      成员名称 描述
      SSAO_FLAG_PIR0 PIR0触发事件
      SSAO_FLAG_PIR1 PIR1触发事件
      SSAO_FLAG_PIR2 PIR2触发事件
      SSAO_FLAG_HST1TO0 CA53给CM4发数据
      SSAO_FLAG_ALARM RTC警报事件
      SSAO_FLAG_VIF_WDMA_DONE VIF WDMA DONE事件
      SSAO_FLAG_VIF_FRAME_START VIF FRAME START事件
      SSAO_FLAG_VIF_LINE_HIT_0 VIF LINE HIT 0事件
      SSAO_FLAG_VIF_LINE_HIT_1 VIF LINE HIT 1事件
      SSAO_FLAG_BDMA_DONE BDMA完成事件
      SSAO_FLAG_TIMER_4 TIMER4触发事件
      SSAO_FLAG_GPIO CM4 GPIO唤醒事件
      SSAO_FLAG_WDT_PRETIMEOUT WDT PRETIMEOUT事件

    3.3. Ssao_Pir_Param_t

    • 说明

      PIR模块配置参数。

    • 定义

      typedef struct Ssao_Pir_Param_s
      {
          u8                      En;
          u8                      Threadhold;
          u8                      Ch;
      } Ssao_Pir_Param_t;
      
    • 成员

      成员名称 描述
      En 模块是否使能
      Threadhold 触发的阀值
      Ch 通道数

    3.4. Ssao_Vif_Param_t

    • 说明

      vif 模块配置参数。

    • 定义

      typedef struct Ssao_Vif_Param_s
      {
          u8                      En;
          u16                     CropX;
          u16                     CropY;
          u16                     CropW;
          u16                     CropH;
          u8                      UseDda;       //Enable DDA scaling down
          u8                      WdmaMemMode;  //0:IMI, 1:DRAM, 2:PSRAM
          u8                      WdmaTrigMode; //0:one trig, 1:auto trig
          u8                      WdmaPackMode; //0:8bit, 1:16bit
          u16                     WdmaRingLine;
          ss_phys_addr_t          WdmaFbAddr; //frame buffer address
      } Ssao_Vif_Param_t;
      
    • 成员

      成员名称 描述
      En 是否使能
      CropX 裁剪区起始横坐标
      CropY 裁剪区起始纵坐标
      CropW 裁剪区图片宽
      CropH 裁剪区图片高
      UseDda 使能DDA缩图机制
      WdmaMemMode WDMA的内存模式 0:IMI, 1:DRAM, 2:PSRAM
      WdmaTrigMode WDMA的触发模式 0:one trig, 1:auto trig
      WdmaPackMode WDMA的数据报装模式 0:8bit, 1:16bit
      WdmaRingLine WDMA的环状循环条数
      WdmaFbAddr 存放影像的内存位置

    3.5. Ssao_Idle_Param_t

    • 说明

      空闲模块配置参数。

    • 定义

      typedef struct Ssao_Idle_Param_s
      {
          DrvPMModeEvent WakeupEvent1;
          DrvPMModeEvent WakeupEvent2;
          DrvPMModeEvent WakeupEvent3;
      
          u8 SRAM_MUX3_SHUTDOWN; //1: SHUTDOWN, 0: LIGHT_SLEEP //TCM
          u8 SRAM_MUX5_SHUTDOWN; //1: SHUTDOWN, 0: LIGHT_SLEEP //CACHE 32KB
          u8 UseClkActive1;
      
          //for Timer wakeup
          u32 WakeupByTimerId;
          u32 WakeupByTimerMs;
      
          //for Gpio wakeup
          u16 WakeupByGpio;     //GPIO Name (OR)
      
          //for Alarm wakeup
          u32 WakeupByRtcAlarm; //Unit: Sec
      
          u8 IdleUseRtc32K;     //1: Use RTC 32K, 0: Use FRO 24M
          u8 FroPowerDown;
          u8 RtcpllPowerDown;
      } Ssao_Idle_Param_t;
      
    • 成员

      成员名称 描述
      WakeupEvent1 唤醒事件1
      WakeupEvent2 唤醒事件2
      WakeupEvent3 唤醒事件3
      SRAM_MUX3_SHUTDOWN 关闭SRAM_GROUP_3
      SRAM_MUX5_SHUTDOWN 关闭SRAM_GROUP_5
      UseClkActive1 Clock切换成Active1模式
      WakeupByTimerId Timer唤醒时用的Timer ID
      WakeupByTimerMs Timer唤醒时处于Idle的时间长度
      WakeUpByGpio GPIO唤醒时用的GPIO ID
      WakeupByRtcAlarm Alarm唤醒时处于Idle的时间长度
      IdleUseRtc32K Idle时使用RTC 32K clock
      FroPowerDown FRO断电
      RtcpllPowerDown Rtcpll断电 

    3.6. DrvPMModeEvent

    • 说明

      唤醒空闲模式与睡眠模式的事件。

    • 定义

      typedef enum
      {
          DRV_PM_MODE_WAKEUP_NONE = 0,
          //==================Event of Wake up form Sleep and IDLE=================
          DRV_PM_MODE_WAKEUP_RTC_IO0,
          DRV_PM_MODE_WAKEUP_RTC_IO1,
          DRV_PM_MODE_WAKEUP_RTC_ALARM,
          //1V8 GPIOs
          DRV_PM_MODE_WAKEUP_PM_GPIO6,
          DRV_PM_MODE_WAKEUP_PM_GPIO5,
          DRV_PM_MODE_WAKEUP_PM_GPIO4,
          DRV_PM_MODE_WAKEUP_PM_UART2_TX,
          DRV_PM_MODE_WAKEUP_PM_UART2_RX,
          DRV_PM_MODE_WAKEUP_PM_I2C_CLK,
          DRV_PM_MODE_WAKEUP_PM_I2C_SDA,
          DRV_PM_MODE_WAKEUP_PM_SDIO_INT,
          DRV_PM_MODE_WAKEUP_PM_GPIO3,
          DRV_PM_MODE_WAKEUP_PM_GPIO2,
          DRV_PM_MODE_WAKEUP_PM_GPIO1,
          DRV_PM_MODE_WAKEUP_PM_GPIO0,
          DRV_PM_MODE_WAKEUP_PM_SDIO_D1,
          DRV_PM_MODE_WAKEUP_PM_SDIO_D0,
          DRV_PM_MODE_WAKEUP_PM_SDIO_CLK,
          DRV_PM_MODE_WAKEUP_PM_SDIO_CMD,
          DRV_PM_MODE_WAKEUP_PM_SDIO_D3,
          DRV_PM_MODE_WAKEUP_PM_SDIO_D2,
          DRV_PM_MODE_WAKEUP_PM_FUART_RTS,
          DRV_PM_MODE_WAKEUP_PM_FUART_CTS,
          DRV_PM_MODE_WAKEUP_PM_FUART_RX,
          DRV_PM_MODE_WAKEUP_PM_FUART_TX,
      
          //==================Event of Wake up form IDLE=================
          DRV_PM_MODE_WAKEUP_PM_WDT = 40,
          DRV_PM_MODE_WAKEUP_PM_TIMER_8IN1,
          DRV_PM_MODE_WAKEUP_PIR_CH0,
          DRV_PM_MODE_WAKEUP_PIR_CH1,
          DRV_PM_MODE_WAKEUP_PIR_CH2,
          DRV_PM_MODE_WAKEUP_PM_BDMA,
          DRV_PM_MODE_WAKEUP_PM_SSI,
          DRV_PM_MODE_WAKEUP_INT_FIQ2HOST0,
          //3318 GPIOs
          DRV_PM_MODE_WAKEUP_PM_GPIO12,
          DRV_PM_MODE_WAKEUP_PM_GPIO11,
          DRV_PM_MODE_WAKEUP_PM_UART_TX,
          DRV_PM_MODE_WAKEUP_PM_UART_RX,
          DRV_PM_MODE_WAKEUP_PM_PSPI0_INT,
          DRV_PM_MODE_WAKEUP_PM_PSPI0_DI,
          DRV_PM_MODE_WAKEUP_PM_PSPI0_DO,
          DRV_PM_MODE_WAKEUP_PM_PSPI0_CK,
          DRV_PM_MODE_WAKEUP_PM_PSPI0_CZ,
          DRV_PM_MODE_WAKEUP_PM_GPIO10,
          DRV_PM_MODE_WAKEUP_PM_GPIO9,
          DRV_PM_MODE_WAKEUP_PM_GPIO8,
          DRV_PM_MODE_WAKEUP_PM_GPIO7,
          DRV_PM_MODE_WAKEUP_PM_PWM1,
          DRV_PM_MODE_WAKEUP_PM_PWM0,
          DRV_PM_MODE_WAKEUP_MAX
      } DrvPMModeEvent;
      
    • 成员

      成员名称 描述
      DRV_PM_MODE_WAKEUP_NONE 未被事件唤醒
      DRV_PM_MODE_WAKEUP_RTC_IO0 RTC_IO0讯号唤醒空闲模式或睡眠模式
      DRV_PM_MODE_WAKEUP_RTC_IO1 RTC_IO1讯号唤醒空闲模式或睡眠模式
      DRV_PM_MODE_WAKEUP_RTC_ALARM RTC_ALARM讯号唤醒空闲模式或睡眠模式
      DRV_PM_MODE_WAKEUP_PM_GPIO6 PM_GPIO6讯号唤醒空闲模式或睡眠模式
      DRV_PM_MODE_WAKEUP_PM_GPIO5 PM_GPIO5讯号唤醒空闲模式或睡眠模式
      DRV_PM_MODE_WAKEUP_PM_GPIO4 PM_GPIO4讯号唤醒空闲模式或睡眠模式
      DRV_PM_MODE_WAKEUP_PM_UART2_TX PM_UART2_TX讯号唤醒空闲模式或睡眠模式
      DRV_PM_MODE_WAKEUP_PM_UART2_RX PM_UART2_RX讯号唤醒空闲模式或睡眠模式
      DRV_PM_MODE_WAKEUP_PM_I2C_CLK PM_I2C_CLK讯号唤醒空闲模式或睡眠模式
      DRV_PM_MODE_WAKEUP_PM_I2C_SDA PM_I2C_SDA讯号唤醒空闲模式或睡眠模式
      DRV_PM_MODE_WAKEUP_PM_SDIO_INT PM_SDIO_INT讯号唤醒空闲模式或睡眠模式
      DRV_PM_MODE_WAKEUP_PM_GPIO3 PM_GPIO3讯号唤醒空闲模式或睡眠模式
      DRV_PM_MODE_WAKEUP_PM_GPIO2 PM_GPIO2讯号唤醒空闲模式或睡眠模式
      DRV_PM_MODE_WAKEUP_PM_GPIO1 PM_GPIO1讯号唤醒空闲模式或睡眠模式
      DRV_PM_MODE_WAKEUP_PM_GPIO0 PM_GPIO0讯号唤醒空闲模式或睡眠模式
      DRV_PM_MODE_WAKEUP_PM_SDIO_D1 PM_SDIO_D1讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_SDIO_D0 PM_SDIO_D0讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_SDIO_CLK PM_SDIO_CLK讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_SDIO_CMD PM_SDIO_CMD讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_SDIO_D3 PM_SDIO_D3讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_SDIO_D2 PM_SDIO_D2讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_FUART_RTS PM_FUART_RTS讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_FUART_CTS PM_FUART_CTS讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_FUART_RX PM_FUART_RX讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_FUART_TX PM_FUART_TX讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_WDT PM_WDT讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_TIMER_8IN1 PM_TIMER_8IN1讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PIR_CH0 PIR_CH0讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PIR_CH1 PIR_CH1讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PIR_CH2 PIR_CH2讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_BDMA PM_BDMA讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_SSI PM_SSI讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_INT_FIQ2HOST0 INT_FIQ2HOST0讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_GPIO12 PM_GPIO12讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_GPIO11 PM_GPIO11讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_UART_TX PM_UART_TX讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_UART_RX PM_UART_RX讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_PSPI0_INT PM_PSPI0_INT讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_PSPI0_DI PM_PSPI0_DI讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_PSPI0_DO PM_PSPI0_DO讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_PSPI0_CK PM_PSPI0_CK讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_PSPI0_CZ PM_PSPI0_CZ讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_GPIO10 PM_GPIO10讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_GPIO9 PM_GPIO9讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_GPIO8 PM_GPIO8讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_GPIO7 PM_GPIO7讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_PWM1 PM_PWM1讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_PM_PWM0 PM_PWM0讯号唤醒空闲模式
      DRV_PM_MODE_WAKEUP_MAX 唤醒事件的最大值

    3.7. SsaoConfigParam_t

    • 说明

      SSAO模块配置参数。

    • 定义

      typedef struct
      {
      #if defined(CONFIG_PIR_WAKEUP_SUPPORT)
          Ssao_Pir_Param_t        Pir;
      #endif
          Ssao_Vif_Param_t        Vif;
          Ssao_Timer_Param_t      Timer;
      #if defined(CONFIG_WATCHDOG_SUPPORT)
          Ssao_Wdt_Param_t        Wdt;
      #endif
      }__attribute__((packed, aligned(4))) SsaoConfigParam_t;
      
    • 成员

      成员名称 描述
      PIR PIR模块配置参数
      VIF VIF模块配置参数
      Timer Timer模块配置参数
      WDT WDT模块配置参数

    3.8. SsaoPirMode_e

    • 说明

      PIR模块工作模式。

    • 定义

      typedef enum  {
          SSAO_PIR_FORCE_READ_OUT,
          SSAO_PIR_WAKEUP
      }SsaoPirMode_e;
      
    • 成员

      成员名称 描述
      SSAO_PIR_FORCE_READ_OUT 循环读取PIR数据模式
      SSAO_PIR_WAKEUP 中断模式


    图2 FORECE_READ_OUT模式


    图3 WAKEUP模式

    3.9. SLNN_Postprocess_BoxInfo_t

    • 说明

      SLNN输出Box识别结果。

    • 定义

      typedef struct
      {
          int32_t s32X1;
          int32_t s32Y1;
          int32_t s32X2;
          int32_t s32Y2;
          float   f32Score;
          int32_t s32Label;
      } SLNN_Postprocess_BoxInfo_t;
      
    • 成员

      成员名称 描述
      s32X1 人形所在左上角x坐标
      s32Y1 人形所在左上角y坐标
      s32X2 人形所在右下角x坐标
      s32Y2 人形所在右下角y坐标
      f32Score 识别准确度(0%~100%)
      s32Label 数据库中对应此次识别结果的标签

    3.10. SLNN_Postprocess_Outputs_t

    • 说明

      SLNN输出结果。

    • 定义

      typedef struct
      {
          SLNN_Postprocess_BoxInfo_t* pstOutputBoxes;
          int32_t s32OutputNum;
      } SLNN_Postprocess_Outputs_t;
      
    • 成员

      成员名称 描述
      pstOutputBoxes 输出box数组地址
      s32OutputNum 输出box数组长度

    3.11. SSAO_DMA_COPY

    • 说明

      BDMA搬移数据的设定。

    • 定义

      typedef struct
      {
          unsigned long long phyaddr_src; // MIU address of source
          unsigned long long phyaddr_dst; // MIU address of destination
          unsigned int length;            // total size (bytes)
          SsaoBdmaMode_e mode;
      }SSAO_DMA_COPY;
      
    • 成员

      成员名称 描述
      phyaddr_src 数据源的实体位置
      phyaddr_dst 数据目的的实体位置
      length 搬移的数据量
      mode 搬移模式

    3.12. SsaoBdmaMode_e

    • 说明

      BDMA搬移数据的设定。

    • 定义

      typedef enum
      {
          SSAO_BDMA_IMI2IMI = HAL_BDMA_IMI_TO_IMI,
          SSAO_BDMA_IMI2PSRAM = HAL_BDMA_IMI_TO_PSRAM,
          SSAO_BDMA_PSRAM2IMI = HAL_BDMA_PSRAM_TO_IMI,
          SSAO_BDMA_PSRAM2PSRAM = HAL_BDMA_PSRAM_TO_PSRAM,
      } SsaoBdmaMode_e;
      
    • 成员

      成员名称 描述
      SSAO_BDMA_IMI2IMI BDMA由IMI搬资料至IMI
      SSAO_BDMA_IMI2PSRAM BDMA由IMI搬资料至PSRAM
      SSAO_BDMA_PSRAM2IMI BDMA由PSRAM搬资料至IMI
      SSAO_BDMA_PSRAM2PSRAM BDMA由PSRAM搬资料至PSRAM

    3.13. MBX_EVT_E

    • 说明

      MBX接收的消息类型。

    • 定义

      typedef enum
      {
          E_MBX_EVT_NONE,
          E_MBX_EVT_JPG_ACK_SUCCESS,
          E_MBX_EVT_JPG_ACK_TIMEOUT,
          E_MBX_EVT_JPG_ACK_ERROR,
          E_MBX_EVT_KILL_ME,
          E_MBX_EVT_DEAD,
          E_MBX_EVT_ALIVE,
      
          E_MBX_EVT_IMG_QUERY,
          E_MBX_EVT_RAW_IMG_OK,
          E_MBX_EVT_RAW_IMG_FINISH,
      
          E_MBX_EVT_BIN_DATA,
          E_MBX_EVT_BIN_DATA_OK,
      
          E_MBX_EVT_ACK_GOSLEEP,
          E_MBX_EVT_ACK_GOIDLE,
          E_MBX_EVT_HEART_BEAT,
          E_MBX_EVT_MAX,
      } MBX_EVT_E;
      
    • 成员

      成员名称 描述
      E_MBX_EVT_NONE 未接收到NonPM信息
      E_MBX_EVT_JPG_ACK_SUCCESS 接收到NonPM JPG_ACK信息成功
      E_MBX_EVT_JPG_ACK_TIMEOUT 接收到NonPM JPG_ACK信息超时
      E_MBX_EVT_JPG_ACK_ERROR 接收到NonPM JPG_ACK信息错误
      E_MBX_EVT_KILL_ME 接收到kill NonPM的信息
      E_MBX_EVT_DEAD 接收到NonPM Dead的信息
      E_MBX_EVT_ALIVE 接收到NonPM ALive的信息
      E_MBX_EVT_IMG_QUERY 接收到NonPM询问取影像的信息
      E_MBX_EVT_RAW_IMG_OK 接收到NonPM收取影像完成的信息
      E_MBX_EVT_RAW_IMG_FINISH 接收到NonPM收取影像最后一张完成的信息
      E_MBX_EVT_BIN_DATA 接收到NonPM BIN_DATA 的信息
      E_MBX_EVT_BIN_DATA_OK 接收到NonPM BIN_DATA_OK的信息
      E_MBX_EVT_ACK_GOSLEEP 接收到NonPM允许PM进Sleep的信息
      E_MBX_EVT_ACK_GOIDLE 接收到NonPM允许PM进Idle的信息
      E_MBX_EVT_HEART_BEAT 接收到NonPM心跳包的信息
      E_MBX_EVT_MAX 信息最大值


    图4 PM影像组传到NonPM DDR


    图5 将数据从PM拷贝到NonPM DDR


    图6 将数据从NonPM DDR拷贝到PM

    4. InterCoreMgr

    InterCoreMgr提供PM与NonPM双方互送心跳包的机制,可藉由心跳包得知对方的状况,其主要机制如下各小节的示意图。

    4.1.双方运作常态下互送心跳包

    初始时PM与NonPM双方用InterCoreMgr_Scan及InterCoreMgr_ScanAck确认对方是处于运作状态,并藉此机制告知对方心跳包的时间间距(如下图NonPM心跳包的时间间距为T1,PM心跳包的时间间距为T2,T1不需要等同T2)。双方各送各的心跳包,且无需等待ACK回应。


    图7 双方运作常态下互送心跳包

    4.2.当对方正常进入低功耗状态

    当NonPM要进入STR或PowerOff时可送"Heart Beat Stop"告知PM,PM就知道不对NonPM的心跳包作检测。反之PM要进入Idle时可送"Heart Beat Stop"告知NonPM,NonPM就知道不对PM的心跳包作检测。


    图8 当对方正常进入低功耗状态时心跳包的操作

    4.3.得知对方Exception并对其作重置

    当PM检测到NonPM的心跳包有一段时间没收到(如:T1+ΔT)就可判断NonPM Exception并对其作重置。反之NonPM检测到PM的心跳包有一段时间没收到(如:T2+ΔT)就可判断PM Exception并对其作重置。


    图9 当对方Exception时的处理流程

    4.4.心跳包搭配WDT的使用

    一只看门狗看两家门(PM/NonPM),如下图所示NonPM每隔T_wdt_l踢狗(T_wdt_l大于T1),PM每隔T_wdt_r踢狗(T_wdt_r大于T2),当两家都没踢狗而达到WDT超时则系统重启。一般而言单边Exception(4.3节)的状况应该先发生。


    图10 心跳包搭配WDT的使用

    5. 现有范例 (ut_ssao_case_xxx)

    可于相对的options_iford_cm4_xxx.mak file中设定CONFIG_SC_CASE。

    5.1. CASE_NONE

    • 不串接任何流程范例。

    5.2. CASE_SSI_PREROLL_PIR

    • Pre-roll流程搭配PIR范例。

    5.3. CASE_SSI_HPD

    • Raw-HPD流程范例。

    5.4. CASE_WIFI_SIMPLE

    • BDMA(IMI/PSRAM/DDR间数据搬移)及空闲模式流程范例。

    5.5. CASE_PIR_IDLE

    • PIR唤醒空闲模式的范例。

    5.6. CASE_RTCALARM_IDLE

    • RTC警报唤醒空闲模式的范例。

    5.7. CASE_NONPM_IDLE

    • NonPM唤醒空闲模式的范例。

    5.8. CASE_GPIO

    • GPIO输出模式/输入模式(轮询)/输入模式(中断)的范例。

    5.9. CASE_HB

    • InterCoreMgr心跳包的范例。

    6. PM内存配置

    PM内含512KB SRAM可切割为CACHE /TCM /IMI,其配置组合如下图:


    图11 PM SRAM

    PM包装可分为不含PSRAM和包含PSRAM(4MB/8MB),其内存位置对应如下表。


    图12 PM Memory map

    内存实际使用范例如下列各小节。

    6.1. For SSC029A EVB (without PSRAM)

    • Reference: \kernel\rtk\proj\mak\options_iford_cm4_ssc029a_s01a_defconfig.mak
    • Reference: \kernel\rtk\proj\scatter scatter_arm_cm4_imi.lds


    图13 For SSC029A EVB (without PSRAM)

    6.2. For SSC029B EVB (with PSRAM)

    • Reference: \kernel\rtk\proj\mak\options_iford_cm4_ssc029b_s01a_defconfig.mak
    • Reference: \kernel\rtk\proj\scatter scatter_arm_cm4_psram.lds


    图14 For SSC029B EVB (with PSRAM)

    6.3. For SSC029B EVB (with PSRAM) use tng/configure.pl 029a

    • Reference: \kernel\rtk\proj\mak\options_iford_cm4_ssc029a_s01a_defconfig.mak
    • Reference: \kernel\rtk\proj\scatter scatter_arm_cm4_imi.lds


    图15 For SSC029A EVB (without PSRAM) use tng/configure.pl 029a