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.

[参考译文] TMS570LS3137:ADC 转换、每256个样本缺失一次样本

Guru**** 2484615 points
Other Parts Discussed in Thread: HALCOGEN

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/730642/tms570ls3137-adc-conversion-missing-samples-every-256-samples

器件型号:TMS570LS3137
主题中讨论的其他器件:HALCOGEN

我使用的是 TMS570 Hercules 开发套件。

我正在与 ADC (单通道)作斗争、数据采集频率由 RT (例如1-50kHz)和 FATFS 库决定、用于数据采集(SD 卡插槽)。 一切看起来都很好,但是我开始用发电机的正弦测试了。。。 和... 等待我的样片在哪里? ;/

问题是、每256个样本(它是恒定值、与采集频率无关)就会丢失一些样本。 我没有任何其他中断。 我检查了中断中代码的时间、最大值为7、0us。 (rtiGetCurrentTick = 70、具有 closk 10M)。

以下是我的示例数据:

和我的代码:

if (notification == rtiNOTIFICATION_COMPARE0)
{
/* ADC 转换*/
adcStartConversion (adcREG1、adcGROUP1);
while (!adcIsConversionComplete (adcREG1、adcGROUP1));

adcGetData (adcREG1、 adcGROUP1、ADC_DATA_PTR);//将转换存储到 ADC 指针
值=(uint16_t)((* ADC_DATA_PTR).value);

//将 uint16_t 数据转换为2x 字节
dataBufferPtr[0]=(Value >> 8)& 0xFF;
dataBufferPtr = 1


、dataBufferWrite*、dataBufferWrite&f = 1;dataBuffer* dataBufferBytr
=&b;data1;dataBufferWrite&f = dataBuffer* dataBufferWrite&f =&b;dataBuffer* dataBufferBytr = 1;dataBufferWrite&f =&b =&b =&b;dataBufferbw = dataBufferbw =&b



/*检查转换数量是否达到所需数量*/
if (bufferFIlledCount== buffersToBeSaved)
{/*
关闭文件*/
res =f_close (&FSRC);
}

哪里可能是问题? 如果它可以帮助我还可以添加我的 HalCoGen 项目的屏幕截图。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我刚刚找到了一个解决方案。
    问题是我在从 ADC 获取数据时使用的同一中断中使用 f_write()(来自 FATFS 库)。 我应该将 f_write 置于该中断之外、因此在本例中、我将使用某种环形缓冲器。
    第二个摘要:rtiGetCurrentTick 并不总是显示代码的实际执行时间。 我确信我的内部中断代码时间低于7us、但在进入 f_write()后、写入磁盘的位置、时间测量不正确(其他中断? SPI?)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的更新!

    此致、
    米罗