CM4 API
REVISION HISTORY¶
Revision No. | Description |
Date |
---|---|---|
1.0 | 08/21/2023 |
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 需要等待的事件标志位 输入 -
返回值
- 函数返回等待到的事件标志。
-
简单说明
- 函数会等待SsaoFlag指定的事件发生,只要其中一个事件发生函数就是返回事件的位值。
- 函数会将发生事件的标志位值清除。
2.3. SSAO_GetConfig¶
-
功能
获取模块配置参数m_SsaoConfig指针。
-
语法
SsaoConfigParam_t* SSAO_GetConfig(void)
-
形参
参数名称 描述 输入/输出 无 无 无 -
返回值
- 非空指标:成功。
- 其它:暂无。
-
简单说明
- 各模块参数使用统一的全局配置参数m_SsaoConfig进行配置。
- 获取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)
-
形参
参数名称 描述 输入/输出 无 无 无 -
返回值
- 无。
-
简单说明
- 开始使用WDT机制。
- 关闭VIF mask使影像流通流。
2.6. SSAO_Stop¶
-
功能
停止运行模块。
-
语法
void SSAO_Stop(void)
-
形参
参数名称 描述 输入/输出 无 无 无 -
返回值
- 无。
-
简单说明
- 无。
2.7. SSAO_Destroy¶
-
功能
去除初始化相关的模块。
-
语法
void SSAO_Destroy(void)
-
形参
参数名称 描述 输入/输出 无 无 无 -
返回值
- 无。
-
简单说明
- 结束BDAM Semaphore。
- 结束WDT。
- 函数摧毁全局事件句柄 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 中断模式
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. InterCoreMgr¶
InterCoreMgr提供PM与NonPM双方互送心跳包的机制,可藉由心跳包得知对方的状况,其主要机制如下各小节的示意图。
4.1.双方运作常态下互送心跳包¶
初始时PM与NonPM双方用InterCoreMgr_Scan及InterCoreMgr_ScanAck确认对方是处于运作状态,并藉此机制告知对方心跳包的时间间距(如下图NonPM心跳包的时间间距为T1,PM心跳包的时间间距为T2,T1不需要等同T2)。双方各送各的心跳包,且无需等待ACK回应。
4.2.当对方正常进入低功耗状态¶
当NonPM要进入STR或PowerOff时可送"Heart Beat Stop"告知PM,PM就知道不对NonPM的心跳包作检测。反之PM要进入Idle时可送"Heart Beat Stop"告知NonPM,NonPM就知道不对PM的心跳包作检测。
4.3.得知对方Exception并对其作重置¶
当PM检测到NonPM的心跳包有一段时间没收到(如:T1+ΔT)就可判断NonPM Exception并对其作重置。反之NonPM检测到PM的心跳包有一段时间没收到(如:T2+ΔT)就可判断PM 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节)的状况应该先发生。
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,其配置组合如下图:
PM包装可分为不含PSRAM和包含PSRAM(4MB/8MB),其内存位置对应如下表。
内存实际使用范例如下列各小节。
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
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
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