器件型号: MSPM0G3519
尊敬的 TI 团队:
目前我有一个问题、当我开始 ADC 转换时、我在轮询模式下检查标志 MEMRESIFG0。 发出此标志时、我知道数据已就绪。 但是、当 I 访问 MEMRES0 中的值时、返回值为 0、且 RIS 中发出 UVIFG 标志。 您是否有任何提示说明如何解决此问题?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
器件型号: MSPM0G3519
尊敬的 TI 团队:
目前我有一个问题、当我开始 ADC 转换时、我在轮询模式下检查标志 MEMRESIFG0。 发出此标志时、我知道数据已就绪。 但是、当 I 访问 MEMRES0 中的值时、返回值为 0、且 RIS 中发出 UVIFG 标志。 您是否有任何提示说明如何解决此问题?
尊敬的 Khanh:
我已经对这种情况进行了一些测试、它与 ADC 结果回读通话记录有关。
我假设您使用以下内容来读取 ADC 存储器:
adc12->ULLMEM.MEMRES[idx];
使用 ull apeture 读取是异步的、以便 CPU 读取行为会导致 I test 时出现下溢标志。
调用以下 API 可以解决该问题:
__STATIC_INLINE uint16_t DL_ADC12_getMemResult(
const ADC12_Regs *adc12, DL_ADC12_MEM_IDX idx)
{
volatile const uint32_t *pReg = &adc12->ULLMEM.MEMRES[idx];
return (uint16_t)(*(pReg + DL_ADC12_SVT_OFFSET));
}
SVT 孔径具有与 CPU 的同步时钟、可提供更快的同步寄存器访问行为、所有 SDK 相关 API 都使用 SVT 孔径读回 MEMRES 值。
B.R.
Sal
尊敬的 Khanh:
ADC 寄存器有两个访问路径。
ULL 连接使用 ULPCLK 作为时钟源、SVT 连接使用 MCLK 作为时钟源。
CPU 基于 MCLK、因此 在 CPU 访问 SVT 设备时会同步、 可以避免同步逻辑导致的潜在问题。
从您的 API 中、我看到您使用指向 MEMRES 地址的指针、然后您将其返回。 我是对的吗?
您可以在 SDK driverlib 中找到 API、我们在库中提供 SVT apeture 地址偏移量。
B.R.
Sal