2185654_zh-CN

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

2185654_zh-CN

2185654_zh-CN

如何正确检查 S32K3 SAR ADC 的 ADC 转换完成情况

你好,我正在使用 S32K3 系列微控制器上的 SAR ADC 和 ADC_Sar_Ip 库,我打算使用非自动雷达代码。我想从一个特定的 ADC 通道读取一个值,以下是我目前编写的代码片段:

uint16_t ADC_Get_Value(uint32 adc_Instance_u32,uint32 channel_Idx_u32) {
uint16_t data;

Adc_Sar_Ip_StartConversion(adc_Instance_u32, ADC_SAR_IP_CONV_CHAIN_NORMAL);
while (Adc_Sar_Ip_GetStatusFlags(adc_Instance_u32) != 35);
data = Adc_Sar_Ip_GetConvData(adc_Instance_u32, channel_Idx_u32);

return data;
}

我注意到恩智浦 SAR ADC IP 驱动程序提供了启动转换的 API(Adc_Sar_Ip_StartConversion),但我找不到专门用于检查转换结束的 API。

通过实验,我发现当转换完成时,Adc_Sar_Ip_GetStatusFlags 返回的状态标志会达到 32,因此我在 while 循环中使用了这个值。使用这种方法对我来说很有效,但我不确定这是否是检测转换完成的正确或推荐方法。

我的问题是

  1. S32K3 SAR ADC 驱动程序中是否有检查转换结束的官方 API?

  2. 为什么在值变成 32 之前轮询 adc_sar_ip_getStatusFlags 起作用?这种行为是有保证的,还是取决于当前的驱动程序版本?

  3. 如果没有 API,那么处理 ADC 转换完成的推荐方法是什么:轮询状态标志、使用中断或增加延迟?

Re: How to Properly Check ADC Conversion Completion on S32K3 SAR ADC

感谢您关注我们的产品并为我们的社区做出贡献。

你的方法似乎是正确的。

但是,BCTU 触发方案是 ADC 的默认和建议硬件触发方法。

说您可以参考以下社区帖子:

S32M27x/S32K3 - eMIOS/BTCU/ADC/DMA - [RTD600]-> https://community.nxp.com/t5/S32M-Knowledge-Base/S32M27x-S32K3-eMIOS-BTCU-ADC-DMA-RTD600/ta-p/215554...

在此示例中,每当 FIFO 中的有效条目数超过水印水平时,GPIO4 就会在 BCTU 水印通知中切换,因此数据可供读取。

另一种方法是使用 Bctu_Ip 驱动程序中的"List last conversion notification" ,如果不使用 BCTU,也可以使用转换结束通知。但这种模式并没有范例。

希望这些信息对您有所帮助。

标记 (1)
无评分
版本历史
最后更新:
‎11-21-2025 05:40 PM
更新人: