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.

[参考译文] TMS570LC4357:ADC10奇偶校验位内存映射未清除

Guru**** 2465890 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1108259/tms570lc4357-adc10-parity-bits-memory-mapping-not-clear

器件型号:TMS570LC4357

各位专家、您好!

安全手册中列出的诊断 ADC10建议测试 ADC 的奇偶校验逻辑。 我找到了函数 sl_SelfTest_adc (),我们将其用作实现方案的参考。

根据参考手册、当测试模式处于活动状态时、奇偶校验位被映射到内存。 对于地址0xFF3E0000处的数据字、奇偶校验位应位于0xFF3E0000 + 0x1000处。
缺少的是如何查找存储器中每个字的奇偶校验位的说明。

假设我想翻转地址0xFF3E0000处字的奇偶校验位如何知道要在0xFF3E0000 + 0x1000处翻转哪个位?

浏览 SafeTI Lib 中的测试函数、建议翻转以下地址的奇偶校验位:

#define adc1RAMParLoc (volatile uint8 *)(0xFF3E0007U + 0x1000U)

并在读取该字

#define adc1RAMLoc  (volatile UINT32 *) 0xFF3E0004U)

(Q1)如何知道 Adress adc1RAMParLoc 映射到0xFF3E0004U 处字的奇偶校验位?

(Q2)当技术参考中指出 ADC RAM 仅支持32位访问时、为什么需要8位访问?

我觉得有趣的是、在0xFF3E0006U + 0x1000U 和0xFF3E0004U + 0x1000U 处翻转位也是有效的。

谢谢、此致、
最大

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="430202" URL"~/support/microcontrollers/arm-based microcontrollers-group/arm-based microcontrollers/f/arm-based microcontrollers-forume/1108259/tms570lc4357-ADC10-parquial-bitse-memory-mapping not clear"]我如何知道在0xFF3E0000+quot[?]

    它是最低有效位。  

    0xFF3E0028处的值的奇偶校验是0xFF3E1028处的值的最低有效位(0xFF3E0028+0x1000)。

    [引用 userid="430202" URL"~/support/microcontrollers/arm-based microcontrollers-group/arm-based microcontrollers/f/arm-based microcontrollers-forume/1108259/tms570lc4357-ADC10-parquial-bits 内存映射-不清除"]、即翻转0xFF3E0006U+0x1000U+0x0004U+0x1000U+0x1000U+0x1000U]。

    0xFF3E0006U + 0x1000U 处的值不应翻转。 它始终为0x0。 它是4字节对齐的。  

    [引用 userid="430202" URL"~/support/microcontrollers/arm-based microcontrollers-group/arm-based microcontrollers/f/arm-based microcontrollers-forume/1108259/tms570lc4357-ADC10-parquial-bits-memory-mapping no-clear"](Q1)如何知道地址0x3Loc 将奇偶校验位映射到0x3Loc 字的地址?

    您可以修改0xFF3E0004处的值(翻转1位)、并检查0xFF3E1004处的 lsb 是否更改。

    [引用 userid="430202" URL"~μ C/support/microcontrollers/arm-based microcontrollers-group/arm-based microcontrollers/f/arm-based microcontrollers-forume/1108259/tms570lc4357-ADC10-parquial-bits-memory-mapping no-clear"](Q2)当引用仅支持32位 ADC/RAM 时、为什么需要8位访问?]

    数据表显示 ,在测试模式下,只允许对 ADC 结果的 RAM 进行32位读取和写入。 因此、我建议进行32位访问、而不是8位访问。  

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

    您好 QJ、

    翻转 LSB 仅对我有效、对奇偶校验 RAM 具有8位访问权限、如果我尝试使用32位访问权限、则不会发生任何情况。

    奇偶校验 RAM 是否仅支持8位访问?

    此外、参考手册建议32位字(16位数据为1位)有2个奇偶校验位(第22.2.7.3章)、但当使用调试器查看奇偶校验 RAM 时、32位字似乎只有1个奇偶校验位。 这是否是参考手册中的错误?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="430202" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forume/1108259/tms570lc4357-ADC10-parquia-bits-memory-maping-not clear/4107830#4107830"]奇偶校验位是否仅支持8RAM[引用]奇偶校验位访问?

    实际上、我们可以从我的测试中执行8位访问或32位访问。 TRM 不准确。 32位字或17位有1个奇偶校验位(高15位保留、不会影响奇偶校验)。

    我需要仔细检查它。

    我的测试代码:

    #define adcRAM1 (*(volatile UINT32 *) 0xFF3E0000U)
    #define adcRAM1_B0 (*(volatile uint8 *)(0xFF3E0000U + 0x3U)

    #define adcPARRAM1 (*(volatile UINT32 *)(0xFF3E0000U + 0x1000U))
    #define adcPARRAM1_B0 (*(volatile uint8 *)(0xFF3E0000U + 0x1000U + 0x3U)

    void adc_parati_test ()

         易失性 uint32 adcramread = 0U;
         uint32 adcparccr_Bk = adcREG1->PARCR;

    /*用户代码开始(61)*/
    /*用户代码结束*/

    adcInit();

    adcREG1->OPMODECR &= 0x7FFEFFFF;
    adcREG1->OPMODECR |= 0x80010000;//12位(位31)、启用 ADC RAM 测试模式(位16)

    /*设置 PARCR 中的 TEST 位并启用奇偶校验*/
    adcREG1->PARCR = 0x10AU;

    adcRAM1 =~(adcRAM1);//翻转所有位
    adcRAM1 =~Ω(adcRAM1);//翻转所有位
    adcRAM1_B0 =~(adcRAM1_B0);//翻转最小字节的位
    adcRAM1_B0 =~(adcRAM1_B0);//反转最小字节的位

    /*反转 ADC1 RAM 第一个位置内的奇偶校验位*/
    adcPARRAM1 =~(adcPARRAM1);
    adcPARRAM1_B0 =~(adcPARRAM1_B0);//反转 lsb
    adcPARRAM1_B0 =~(adcPARRAM1_B0);

    /*清除测试位*/
    adcREG1->PARCR = 0x00AU;

    /*此读取操作将触发奇偶校验错误*/
    adcramread = adcRAM1;

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

    您好 QJ、

    因此、TRM 中存在错误、我们可以继续使用8位访问来安全地翻转分区 RAM 中的 LSB。

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

    尊敬的 Max:

    在我的测试中,我认为“在此测试模式下,只允许对 ADC 结果的 RAM 进行32位读取和写入”这一说法是不正确的。 您可以在8位模式下访问存储器吗?

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

    您好 QJ、

    是的、8位访问和翻转 LSB 似乎有效。

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

    谢谢 Max。 我将与本文档的所有者再次进行检查、然后提交一个小错误。