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.

[参考译文] AM4379:GP EVM ADC1问题

Guru**** 2587365 points
Other Parts Discussed in Thread: TMDSEVM437X, AM4378

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/630060/am4379-gp-evm-adc1-problem

器件型号:AM4378
主题中讨论的其他器件:TMDSEVM437X

大家好、

我正在以下环境中测试 ADC1的操作。

硬件:TMDSEVM437X 修订版

软件: C:\ti\pdk_am437X_1_0_5 和 C:\ti\pdk_am437X_1_0_8

(问题)  

如果输入电压为1.6V 或更低、ADC1无法精确测量。

我检查了寄存器、但我不知道原因。

顺便说一下、ADC0被正确转换。

输入电压1.8V ->(转换值) 4096 = 1.8V

输入电压 1.6V ->(转换值) 3640 = 1.6V

输入电压 1.2V ->(转换值) 3413 = 1.5V

输入电压 1.0V ->(转换值) 2958 = 1.3V

输入电压0.4V-> (转换值) 2048 = 0.9V

输入电源是稳压直流电源。

ADC1的设置如下。

/* ADC1 (MagCard)唤醒*/
regVal = HW_RD_REG32 (SOC_CM_PER_REG + PRCM_CM_PER_MAG_CARD_CLKCTRL);
regVal |= PRCM_PER_MAG_CARD_CLKCTRL_MODULEMODE_ENABLE;
HW_WR_REG32 ((SOC_CM_PER_REG + PRCM_CM_PER_MAG_CARD_CLKCTRL)、regVal);
while ((HW_RD_REG32 (SOC_CM_PER_REG + PRCM_PER_MAG_CARD_CLKCTRL)和\
PRCM_CM_PER_MAG_CARD_CLKCTRL_MODULEMODE_MASK)!=\
PRCM_CM_PER_MAG_CARD_CLKCTRL_MODULEMODE_ENABLE);

/*配置时钟分频器值。 (16位寄存器)*/
HW_WR_REG16 ((ADC1_BASE_ADDR + ADC1_CLKDIV)、((ADC1_MODULE_CLOCE/ADC1_AFE_CLOCK)- 1));

/* ADC1控制值*/
HW_WR_REG32 ((ADC1_BASE_ADDR + ADC1_CTRL)、(0x63));

/* ADC1配置和延迟设置*/
/* Step1 */
HW_WR_REG32 ((ADC1_BASE_ADDR + ADC1_STEPCONFIG1)、(0x40001));
HW_WR_REG32 ((ADC1_BASE_ADDR + ADC1_STEPDELAY1)、(0));

/* Step2 */
HW_WR_REG32 ((ADC1_BASE_ADDR + ADC1_STEPCONFIG2)、(0x40001));
HW_WR_REG32 ((ADC1_BASE_ADDR + ADC1_STEPDELAY2)、(0));

/* Step3 */
HW_WR_REG32 ((ADC1_BASE_ADDR + ADC1_STEPCONFIG3)、(0x40001));
HW_WR_REG32 ((ADC1_BASE_ADDR + ADC1_STEPDELAY3)、(0));

/* Step4 */
HW_WR_REG32 ((ADC1_BASE_ADDR + ADC1_STEPCONFIG4)、(0x40001));
HW_WR_REG32 ((ADC1_BASE_ADDR + ADC1_STEPDELAY4)、(0));

此致、

Sasaki

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    要测量电压、您是否参考了 ti\starterware\examples\adc\volte_measure 示例? 如果 ADC0准确、您是否遵循相同的代码来配置 ADC1?

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

    您好、Eric - San、

    感谢你的答复。

    [引用 user="lding ]您好、

    要测量电压、您是否参考了 ti\starterware\examples\adc\volte_measure 示例?

    此致、Eric

    [/报价]

    是的。

    [引用 user="lding ]您好、

    如果 ADC0准确、您是否遵循相同的代码来配置 ADC1?

    此致、Eric

    [/报价]

    由于 ADC1的 API 不在 Starterware 中、我创建了一个新代码。

    寄存器设置几乎相同。

    我想知道如何以与 ADC0相同的方式使用 ADC1

    此致、

    Sasaki

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    有任何信息吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否有有关 ADC1为何无法正确转换低电压的信息?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我在 ADC0的电压测量中查看了 ADC1 vs ADCAppInit()的代码。 ADC 唤醒相当于 PRCMModuleEnable()。 配置时钟分频器值。 (16位寄存器)等效于 TSCADCClkDivConfig。 则其余代码会有所不同。

    由于 Sitara 没有 ADC1代码、我认为第一次尝试是将现有代码中的 ADC0实例修改为 ADC1、以查看其是否正常工作。 您是否尝试过这种方法? 如果比较 ADC0和 ADC1寄存器、则如果只更改实例、它们将是相同的。

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

    大家好、Lding - San、

    感谢你的答复。

    [引用 user="lding"]


    我在 ADC0的电压测量中查看了 ADC1 vs ADCAppInit()的代码。 ADC 唤醒相当于 PRCMModuleEnable()。 配置时钟分频器值。 (16位寄存器)等效于 TSCADCClkDivConfig。 则其余代码会有所不同。

    由于 Sitara 没有 ADC1代码、我认为第一次尝试是将现有代码中的 ADC0实例修改为 ADC1、以查看其是否正常工作。 您是否尝试过这种方法? 如果比较 ADC0和 ADC1寄存器、则如果只更改实例、它们将是相同的。

    [/报价]

    仅更改实例并不能将寄存器设置正确反映到器件中。

    我创建了原始代码并设置 ADC 1的寄存器

    以便它具有与 ADC 0相同的设置。

    附上我的调查结果文件。
    ADC0和 ADC1寄存器设置相同、但 ADC1的转换结果不正确。

    此致、

    Sasakie2e.ti.com/.../adc.xlsx

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

    在代码中、您使用0x40001启用了 STEP_CONFIG 以进行连续模式和通道选择、为什么寄存器转储不同(0x04080060)? 您的代码是否启用了 STEP? 为什么 Stepen 为0?

    您是否有用于 ADC0和 ADC1的 CCS 项目用于测试? 是否可以在此处附加? 谢谢!

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

    您好、Eric - San、

    感谢你的答复。

    [引用 user="lding ]您好、

    在代码中、您使用0x40001启用了 STEP_CONFIG 以进行连续模式和通道选择、为什么寄存器转储不同(0x04080060)? 您的代码是否启用了 STEP? 为什么 Stepen 为0?  

    您是否有用于 ADC0和 ADC1的 CCS 项目用于测试? 是否可以在此处附加? 谢谢!

    [/报价]

    由于我使用各种寄存器设置进行测试、因此图和程序是不同的。 我将附加我上次测试的项目。

    ADC0项目是 Starterware 默认项目

    e2e.ti.com/.../adc0.zipe2e.ti.com/.../adc1.zip

    此致、

    Sasaki

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想整理内容、关闭此线程并打开另一个线程。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    器件型号:AM4378

    大家好、

    我无法理解 ADC1的操作。

    当我运行附带文件的程序时、ADC1的转换精度会降低。

    但是、在运行该程序后、我在 CCS 中执行了以下操作、

    提高了 ADC1的精度。

    1. 使用 CCS 暂停(Alt + F8)  
    2. 在寄存器窗口中将"ADC1_CLKDIV"从0x07更改为0x17。
    3.  在寄存器窗口中将"ADC1_CLKDIV"从0x17返回到0x07。
    4. 使用 CCS 恢复(F8)

    您知道这种情况的发生原因吗?
    如何在不执行上述操作的情况下准确使用 ADC 1?

    #define CM_PER_BASE_ADDR (0x44df8800)
    #define PRCM_CM_PER_ADC1_CLKCTRL (CM_PER_BASE_ADDR + 0x230)

    #define ADC1_BASE_ADDR (0x4834C000)
    #define ADC1_CLKDIV (ADC1_BASE_ADDR + 0x4C)
    #define ADC1_CTRL (ADC1_BASE_ADDR + 0x40)
    #define ADC1_STEPEN (ADC1_BASE_ADDR + 0x54)
    #define ADC1_STEPCONFIG1 (ADC1_BASE_ADDR + 0x64)
    #define ADC1_STEPDELAY1 (ADC1_BASE_ADDR + 0x68)
    #define ADC1_STEPCONFIG2 (ADC1_BASE_ADDR + 0x6C)
    #define ADC1_STEPDELAY2 (ADC1_BASE_ADDR + 0x70)
    #define ADC1_STEPCONFIG3 (ADC1_BASE_ADDR + 0x74)
    #define ADC1_STEPDELAY3 (ADC1_BASE_ADDR + 0x78)
    #define ADC1_STEPCONFIG4 (ADC1_BASE_ADDR + 0x7C)
    #define ADC1_STEPDELAY4 (ADC1_BASE_ADDR + 0x80)
    #define ADC1_STEPCONFIG16 (ADC1_BASE_ADDR + 0xDC)
    #define ADC1_FIFO0DATA (ADC1_BASE_ADDR + 0x100)

    #define ADC1_AFE_CLOCK 3000000U /* afeInClk */
    #define ADC1_MODULE_CLOCK 24000000U/* modClk */

    /*表示电压分辨率的宏。 *
    #define VOLTGE_RESolution (439U)(定义电压分辨率)

    /**
    * main.c
    *
    int main (空)

    unsigned int 数据;
    unsigned int reg_d;

    *(volatile unsigned int *) PRCM_CM_PER_ADC1_CLKCTRL = 2;//模块被显式启用
    while (reg_d!= 2)

    REG_d =(*(volatile unsigned int *) PRCM_CM_PER_ADC1_CLKCTRL 和2);

    /*配置时钟分频器值。 (16位寄存器)*/
    *(volatile unsigned short *) ADC1_CLKDIV = 0x7;//((ADC1_MODULE_CLOCE/ADC1_AFE_CLOCK)- 1);
    *(volatile unsigned int *) ADC1_CTRL = 1;// ADC 启用
    *(volatile unsigned int *) ADC1_Stepen = 0;
    *(volatile unsigned int *) ADC1_STEPCONFIG1 = 0x1;
    *(volatile unsigned int *) ADC1_STEPDELAY1 = 0;

    while (1)

    *(volatile unsigned int *) ADC1_Stepen = 2;// setepconfig 1 start
    数据=*(volatile unsigned int *) ADC1_FIFO0DATA;
    数据=(DATA & 0x000FFF);
    数据=(数据* volte_resolution)/1000U;

    e2e.ti.com/.../3240.ADC1.zip

    e2e.ti.com/.../adc1_5F00_result.xlsx

    此致、

    Sasaki

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    线程已合并。 请不要打开同一主题上的多个主题帖。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我查看了 ADC0代码和 ADC1代码、然后查看了新的 ADC1代码、在平均模式、GP 模式或4线模式下、使用1步长或4步长、使用 FIFO0和 FIFO1时、单次触发或连续模式存在差异。 我想您测试了很多组合。

    在最后一个 ADC1代码中、这是一次性 GP 模式、在第一个通道上采样到 FIFO0。 此代码仅更改 CLKDIV (0x7->0x17--->0x7)是否正确才会产生差异?

    时钟分频器是模块时钟/安全时钟-1的比值。 AFE 时钟为3MHz。 根据 TRM 图6-21、ADC0时钟仅来自24MHz 的 CLK_M_OSC。 然而、ADC1时钟是从 CLK_M_OSC (24MHz)或 PER_CLKOUTM2 (192MHz)中选择的。

    默认情况下、这是 per_CLKOUTM2 (表6-182)。 PRCM_CM_CLKSEL_ADC1_CLK 寄存器字段说明)。 这是寄存器0x44df424C。 我想、如果您将其从"1"编程为"0"。 则 ADC1应该正常工作。

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

    感谢您的特殊支持。
    我将检查它、并在问题改善时报告它。

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

    您好、Eric - San、

    ADC1转换正确!!

    非常感谢!

    此致、

    Sasaki