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.

[参考译文] EK-TM4C1294XL:数字 COMP 数据通道

Guru**** 2484615 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/729432/ek-tm4c1294xl-digital-comp-data-pathway

器件型号:EK-TM4C1294XL

似乎 每个 ADC 模块中的8个数字比较  器都必须按照序列发生器顺序分配、以便将阶跃与 ANIx 转换输入源数据对齐、这与图15-2和数据表文本相反。 Tivaware 版本2.1.0.12573和2.1.1.71无法 使用任何模块8比较器中与 AINx 模拟源相关的比较器来正确配置数字比较器。

然而、当一个现有 FIFO 步进 AINx 被或连接到一个相对比较器时、这些步进的 FIFO 仍然溢出。 即使 ADCComparatorConfigure()和 ADCRegionSet() 已经被配置,  也无法在另外一个序列发生器中调用 ADCSequenceStepConfigure()的情况下将 AINx 转换数据分配给8个数字比较器中的任何一个。  如果不执行 后者、则使用 ADC_OMP_n 的 ORD 步骤 会将 转换数据压入 FIFO 、从而导致上面报告的溢出情况。   

 数字比较器模拟源为什么 需要与     模拟信号匹配的现有步长中的相对 AINx 进行或运算?  图15-2表示 序列发生器 FIFO 是一个选项、而不是数字比较器数据的路径。 这使得 ADCSequenceStepConfigure()成为 一个包含数字比较 器的选项,而不是将它们配置为 AINx 源的显式方法,作为唯一的方法。  

ADCSequenceStepConfigure()状态为逻辑或数字比较器选择之一(从\b ADC_CTL_CMP0到\b ADC_CTL_CMP7)。  同样、这会导致永久性 FIFO 溢出、并且 根据图15-2和 运行模式(15.3.7.2)中的语句( 建议 AD 转换器数据完全绕过 FIFO)、这是不正确的。  为什么 ADCSequenceStepConfigure()是(绑定 ) AD 转换器 AINx 模拟信号 通道 到 8 个数字比较器中的任何一个的唯一方法?  

15.3.7数字比较器单元:
ADC 通常用于对外部信号进行采样并监控其值以确保其值
保持在给定的范围内。 自动执行此监控过程并减少处理器数量
所需的开销、每个模块提供8个数字比较器。

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

    您好 BP101:

    我不确定您所执行的操作会导致 FIFO 溢出。 我已经连接了一个简单的项目、该项目在通道0 (PE3)上使用 ADC0中的两个比较器。 我从不读取 FIFO、它始终保持为空。

    /cfs-file/__key/communityserver-discussions-components-files/908/ADC0_5F00_Comparator.zip

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

    尊敬的 Bob:

    您的配置示例未能找到 此主题中所提到的一点。  甚至无需像 您提供的示例中那样配置序列发生器步骤。 序列发生器用于(将) AINx 通道绑定到 FIFOn、因此数字比较器应该可以或数字比较器与现有的序列发生器步长相连、而不会导致 ANIx FIFO 数据出现下溢/上溢情况。 数字比较器(绑定)到具有  以某种方式处理的实际模拟数据的 AFUX 这一简单事实会导致 ADCOSTAT/ADCUSTAT 标志 条件、并且  在 ADCSSFSTAT TPTR 下一个读取指示器中未检索到 FIFO 数据。  对 ADCSSFSTAT TPTR 进行检查是 将 ANIx 通道数据检索到 C++数组步骤的正确方法。

    我要再次强调      的是、我们在已配置的序列发生器中使用 AIN 通道 FIFO 数据、但不希望将数字比较器与同一序列发生器的 AINx 或任何具有 FIFO 的其他序列发生器进行比较。

    根据数据表电路分析,Tivaware 数字比较器功能 (高于 POST) (如 WISE ADCSequenceDataGet () )不  能在 芯片级正确置位或配置 ADC0/1。  为一  个配置的 Tivaware 序列发生器 FIFO 正在运行、不受为特定通道配置的步骤的限制、例如多个 AINx 步骤。  ADC 数字比较 器不应强制绑定到先前配置的序列发生器 FIFO。  同样、Tivaware 会在 另一个序列发生器中强制执行 OR'D FIFO 配置、以便访问数字比较器。

    我们想到了 klodge 这个词、  在 Tivaware 序列发生器配置的这个区域中发现了很多这个词 、这些序列发生器配置具有多个序列发生器步长、并绑定到多个 AINx。 过去报告的数字比较器问题 此论坛似乎 Amit 不了解问题的严重性。 我们只使用 AINx 通道或配置到数字比较器的另一个序列发生器。  

    对 模拟信号采用双配置、同时需要对同一 ANIx 通道使用数字比较器、这会导致 Rs 阻抗问题。 数字比较器不使用与 ANix 通道信号相同的触发器。 作为另一个点 、 1秒触发源间隔在某种程度上与 ADCSSFSTAT TPTR/HPTR 一致 、后者通过 各个 步进数组 级别的中断处理程序 POP 进行限制。 较快的序列发生器触发间隔(PWM0/GPTM) 会导致随机 TPTR/HPTR 滚动 超过查询 索引的任何断言、以便 在中断处理程序中错过 ANix 通道数据。 Stellaris M3团队 对 单 个序列发生器步骤进行了重新编程 、以便  在运行时对多个 AINx 模拟数据采样、这似乎 是为了解决 Rs 阻抗从 预配置 的序列发生器步骤变为执行相同的 AINx 采样的问题。   

    FIFOn ADCSSFSTATn HPTR/TPTR 不受序列发生器步进配置的限制、并且随机滚动、如 轮盘。 为 多 个 AINx 模拟信号配置的 ADCSequencerDatatGet ()的另一个布置示例  未 读取正确的 AINx 通道, 而是为   所有 具有或不具有模拟 信号的 AINx 通道返回相同的 VREFP-VREFN 数据。  

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

    尊敬的 Bob:

    下面的 HWREG 使 其更加相对、如图所示。 15-2 FIFO 与数字比较器是分离的。    绑定 数字比较器时、似乎没有重叠的 AINx 模拟通道。  然而 ,它 已经过 了使用 其它序列发生       器作为 AD 转换器的 ADCSSOPn 流量 CoP 的必要操作,它通过 ADCSequenceStepConfigure()将数据发送到 FIFO 或数字比较器,而不是在单个序列发生器步骤中同时发送到这两个数据。

    下面的操作 将 SS1的 COMP0/1绑定到转换器的数字端、而不是过去 SS2配置步骤的模拟端。 很难知道 ADCSequenceStepConfigure() 是 通过 ADC_CTL_CMP0或 AINx 在单 个配置步骤中将数字比较器绑定到 SS1中的现有序列发生器步骤。 当 AINx 在 SS1的步骤0/1中被或将其标记为 ADC_CTL_CMP0/1时、中断处理程序中的 ADCU/OSTAT 标记一个永久条件。 显然、  当我们要   通过 ADCSequneceStepConfigure()在转换器的数字端双向分支相同的采样时、它不是直接的。

    原来的替代方法是将第二个序列发生器 SS2配置为相同或 相同的 AINx、 该错误在 POR 期间通过 1秒的 TriggerProcessor 间隔触发 PWM0。  理想 情况    下、目标是将数字比较器(0/1)绑定到转换器数字端的第一个配置的序列发生器(SS1)步长0/1数据路径。  在与 序列发生器绑定的情况下、数字比较器似乎无需触发。  

    ADC 采样序列 n 操作寄存器(ADCSSOPn) ADC0基地址:0x4003.8000 ADC1基地址:0x4003.9000偏移量0x070类型 RW、复位0x0000.0000

    寄存器33:ADC 采样序列工作寄存器1 (ADCSSOP1)、偏移量0x070寄存器34:ADC 采样序列工作寄存器2 (ADCSSOP2)、偏移量0x090

    该寄存器决定采样序列 n 上给定转换的采样是保存到采样序列 n FIFO 中还是发送到数字比较器单元。 ADCSSOP1寄存器控制采样序列发生器1、ADCSSOP2寄存器控制采样序列发生器2。

    /*通过
    REG33分别将 ADC1 SS1第0/1步操作绑定到数字比较器0/1 *
    HWREG (ADC1_BASE + ADC_O_SSOP1)|= ADC_SSOP1_S0DCOP;
    HWREG (ADC1_BASE + ADC_O_SSOP1)|= ADC_SSOP1_S1DCOP; 
    HWREG (ADC1_BASE + ADC_O_SSDC1)|= ADC_SSDC1_S0DCSEL_M 和0x0;//SS1 AIN0、
    HWREG (ADC1_BASE + ADC_O_SSDC1)|= ADC_SSDC1_S1DCSEL_M 和0x10;//SS1 AIN17 



     

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

    没错。 每个转换可被定向到一个比较器或者针对该序列的 FIFO。 要加载 FIFO 并进行数字转换、您必须让 ADC 对电压进行两次转换、尽管可以在单个序列中完成。 下面的代码使用序列1来转换通道0三次。 前两个结果进入不同的比较器、第三个结果进入 FIFO。 请注意、这是使用 TivaWare 调用完成的。

    void init_adc ()
    {
    GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_2);
    SysCtlDelay (80u);
    
    //使用 ADC0序列1为每个定时器周期对通道0进行三次采样
    ADCClockConfigSet (ADC0_BASE、ADC_CLOCK_SRC_PIOSC | ADC_CLOCK_RATE_FULL、1);
    
    SysCtlDelay (10);//设置时钟配置的时间
    
    IntDisable (INT_ADC0SS0);
    ADCIntDisable (ADC0_BASE、1U);
    ADCSequenceDisable (ADC0_BASE、1U);
    //禁用序列后,现在可以安全地加载新的配置参数
    
    ADCSequenceConfigure (ADC0_BASE、SEQ1、ADC_TRIGGER_TIMER、0U);
    ADCSequenceStepConfigure (ADC0_BASE、SEQ1、0U、ADC_CTL_CH0 | ADC_CTL_CMP0);
    ADCSequenceStepConfigure (ADC0_BASE、SEQ1、1U、ADC_CTL_CH0 | ADC_CTL_CMP1);
    ADCSequenceStepConfigure (ADC0_BASE、SEQ1、2U、ADC_CTL_CH0 | ADC_CTL_END);
    
    ADCComparatorConfigure (ADC0_BASE、0、ADC_COMP_INT_HIGH_halways);
    ADCComparatorConfigure (ADC0_BASE、1、ADC_COMP_INT_LOW_halways);
    ADCComparatorRegionSet (ADC0_BASE、0、TRIGGERLEVEL - 128、TRIGGERLEVEL);
    ADCComparatorRegionSet (ADC0_BASE、1、TRIGGERLEVEL - 128、TRIGGERLEVEL);
    ADCComparatorReset (ADC0_BASE、0、TRUE、TRUE);
    ADCComparatorReset (ADC0_BASE、1、TRUE、TRUE);
    ADCComparatorIntEnable (ADC0_BASE、SEQ1);
    
    
    ADCSequenceEnable (ADC0_BASE、SEQ1);//设置配置后,重新启用序列发生器
    ADCIntClear (ADC0_BASE、SEQ1);
    ADCIntEnable (ADC0_BASE、SEQ1);
    IntEnable (INT_ADC0SS1);
    
    }
    

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

    尊敬的 Bob:

    我在上述帖子中添加了一些信息、可能会阐明不需要第二个模拟样片的原因。 如果数据已经在数字转换器输出总线上、则跳转到数字转换器比较器和 FIFO 中、如图15.2所示。 我们应该能够将第二个 SSOP2绑定到数字端配置的第一个序列发生器。

    问题是 ADCSequenceStepConfigure()分配的 ADCSSOP 与序列发生器 FIFOn 相同。 这种方法似乎会导致 AD 转换器的模拟侧的配置与仅数字侧的 OR-ing 重叠。

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

    图 15-5显示数字比较器块不是序列发生器配置的一部分。 表示 ADCSequenceStepConfigure()正在做出很大努力,但在正确配置数字比较器方面却很难做到的原因。

    它也不会将 ADCSSFSTATn HPTR/TPTR 限制为缓冲数据中序列发生器的特定步骤。 似乎缺少 FIFO 步骤的控制配置、因此在高速 FIFO 数据传输期间、它完全无法控制试图通过 ADCSSFSTAT TPTR 施加限制的应用程序。 如果 FIFO 索引忽略这些步骤、那么将序列发生器步骤配置到特定 AINx 通道的意义是什么。 无论是否配置了该步骤、ADCSSFSTAT TPTR 都将通过整个 FIFO 索引运行。

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

    尊敬的 Bob:
      
    Tivaware step configure 设置与上述尝试执行的 HWREG 指令相同的 ADCSSOP 寄存器。 然而、在单个序列发生器步骤0/1中定义的 OR'ing 典型比较器似乎不按设计工作。 上面的 HWREG 调用似乎证明了 Tiva 逻辑应该在 ADC_O_SSOP1的数字侧的任一步中门控同步转换数据为 OR。 某种程度的步进配置错误会通过另一个序列发生器在另一个 ADC 模块中的(ADC_O_SSCTL1)寄存器产生差动输入、从而使事情变得前所未有的混乱。 这实际上会在 FIFO 中断处理期间破坏数据流的预期路径。  
     

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

    [引用 user="Bob Crosby">前两个结果转到不同的比较器、第三个结果转到 FIFO。 请注意、这都是使用 TivaWare 调用完成的。

    然而 、如果  在中断处理期间被读取、第0步会导致 FIFO 中永久过流/欠流。 因此、即使  在示例中添加了步骤2、Tivaware 也无法将数字比较器或数字比较器连接到单个序列发生器中的模拟 FIFO、而不会在步骤0中发生溢出。

    奇怪 的是、在  用于检测两个定义区域的数字低/高穿越的任何步骤中、任何溢出都会发生。 尽管   它不会导致步进0/1 (模拟)出现过流、步进2/3 已完成(数字) 或者您在步进0/1中所做的那样。 在这个问题上、这似乎是一个可接受的 WA、但奇怪的事情仍然发生在其他序列发生器 AINx 通道 中、而 Tivaware 调用无法轻松解释。  

     上面的 FIg15-2 (黄色框)显示 了 FIFO 和序列发生器之前的数字比较器。  黄色框表示  了添加数字比较器时需要 FIFO 的所有错误描述。 更不用说它需要一个触发源,甚至可以通过 ADCSequenceStepConfigure()进行配置。