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.

[参考译文] ADS131M08:ADS131M08 DRDY 的奇怪行为

Guru**** 2555130 points
Other Parts Discussed in Thread: ADS131M08

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1049288/ads131m08-ads131m08-strange-behavior-of-drdy

器件型号:ADS131M08

嗨、大家好。

我们使用的是 ADS131M08 ADC。 XTAL1连接到外部石英谐振器、频率为8.192MHz
我们需要每秒读取2000个样本(通过数据就绪引脚在每次中断中读取数据)。
寄存器设置(SPI 8MHz):
I (1327) ads131_read_reg:reg 0x00 val 0x2801 // ID
I (1337) ads131_WRITE_reg:reg 0x03 val 0x3f12 //时钟:使用6个通道、过采样2048
I (1337) ads131_read_reg:reg 0x03 val 0x3f12
I (1347) ads131_WRITE_reg:reg 0x02 val 0x110 //模式:清除状态寄存器中的复位位位位位
I (1347) ads131_read_reg:reg 0x02 val 0x110

中断处理程序:

uint32_t adc_int_counter = 0;
int32_t tempvals [6];
int32_t tempvals2 [6];
static void gpio_isr_handler (void * arg)
{
  adc_int_counter++;
  extern uint16_t ads131_status;
  // function send&read ADS131 frame (3 * 10 byte): STATUS register + converted to signed 32 bit MEASURES for 6 channels
  ads131_read_measures (&tempvals[0]);
  if (adc_int_counter<10)
    ads131_read_measures(& tempvals2 [0]); // additional reading for clear ADC internal FIFO after start
}

nDRDY 信号:
黄色-数据就绪
红色- SPI CS
https://youtu.be/yrjQPvFeUc4

有时 nDRDY 信号会变得不正确(1us 峰值而不是曲折)(状态寄存器值0x13f):

如果每秒仅生成1000个样本(OSR 4096)、则 nDRDY 正确。

如果使用以下处理程序、则信号有效:

static void gpio_isr_handler (void * arg)
{
  adc_int_counter++;
  extern uint16_t ads131_status;
  ads131_read_measures (&tempvals[0]);
  if (ads131_status & 0x3f) !=0)
  {
    ads131_read_measures (& tempvals2 [0]);
    adcDataEqual = memcmp(tempvals, tempvals2, sizeof(tempvals)); // !!! STRANGE: WHY DATA IS EQUAL !!!
  }
}

校正 nDRDY 信号:

不正确的 nDRDY 信号:

为什么即使在中断中永久读取数据、状态寄存器的 DRDY0-DRDY5位也会再次出现? 为什么二次读取数据等效第一次读取?
为什么只有一个读取中断时 nDRDY 不正确?

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

    Artem、您好!

    我仍在回顾这里发生的一切、但  您能否配置示波器上的触发标准? 当我们只应在 nDRDY 的下降沿触发时、您在 NCS 的任一沿触发似乎是如此。

    我也不会声称自己是代码专家、但我想确认您的中断不是基于时间的。  产生中断的错误方法是等待2000Hz 以将 nCS 切换为低电平、并由于数据表中的时钟抖动和时钟规格而查找数据。 传统上、我们期望 nDRDY 下降、然后 触发中断以查找数据。 我在视频上看到几个帧、其中屏幕上没有 nDRDY 切换、但 NCS 仍  在以任何方式切换。 这证实了良好数据始终在 nCS 左侧具有 nDRDY、但不良 nDRDY 信号可能位于任何位置(但通常在 nCS 的前沿附近)。

    此外、您是否正在使用我们的 EVM? 您是否有用于比较行为的 GUI?   

    最棒的

    Cole

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

    感谢您的回答。

    我使用逻辑分析仪查看行为、发现 有中断处理跳过。  这不是 ADC 问题、而是微控制器或代码问题。

    如果不从 中断操作符调用 vTaskNotifyGiveFromISR(),则跳过不发生。