ESM驱动提供API来配置和处理来自ESM H/W模块的错误
ESM头文件在应用程序中应该被包含如下:
#include <ti/drivers/esm/esm.h>
驱动初始化
ESM驱动是通过使用ESM_init函数来初始化。在没有调用这个API之前,其他的ESM API不能被调用。
注意:如果使用的是TI RTOS,则在进入main之前ESM错误应该被清除并标志被设置为0。对于其他的RTOS,检查RTOS的实现或设置这个标志为1
使用驱动
对于使用ESM驱动下面是一个示例:
ESM_init(0); //ClearErrors is set to 0
MSS上处理中断
当ESM驱动运行在R4F上时,注册高优先级的FIQ来处理MSS ESM错误。当ESM 错误发生在DSS上时,MSS被通过Group2 错误信号来通知。ESM驱动注册低优先级的IRQ来处理这些错误。
DSS上处理中断
DSS ESM错误必须揭露他们来生成一个NMI。这个仅仅适用于xWR16xx/xWR18xx/xWR68xx DSS中。SOC_configureDSSESMMask API可以被使用。驱动程序/应用程序必须为其感兴趣的错误信号解除位掩码。例如,看门狗驱动程序在内部接触看门狗到期NMI错误位的伪装,以生成NMI。
DSS ESM错误生成一个NMI,可以首先被RTOS NMI异常的句柄捕获。因此应用程序必须产生NMI异常句柄在.cfg文件中使用ESM驱动的高优先级FIQ处理API
Exception.nmiHook = "&ESM_highpriority_FIQ";
注册通知器
应用程序能够对ESM错误需要额外的处理来注册回调函数。一个这样的例子就是在DSS上的看门狗延时。当看门狗延时导致DSS上发生NMI时,该事件inturn会在MSS上生成group1 ESM错误。应用程序可以使用ESM通知程序注册回调来处理这些错误。
硬件寄存器映射
此驱动程序使用的硬件寄存器映射可以在include/reg_esm.h中找到
应用程序可以调用的函数
ESM驱动提供了外部API方便用户调用
ESM_Handle ESM_init ( uint8_t bClearErrors ) 初始化ESM驱动
int32_t ESM_registerNotifier ( ESM_Handle handle,
ESM_NotifyParams * params,
int32_t * errCode
) 注册通知,如果检测到错误中断,ESM模块将回调
int32_t ESM_deregisterNotifier ( ESM_Handle handle,
int32_t notifyIndex,
int32_t * errCode
) 取消ESM通知的注册
参考文献:
- 《mmWave SDK Module Documentation》