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.

[参考译文] TM4C129XNCZAD:EPI 主机总线模式地址访问出现问题

Guru**** 2419530 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/684638/tm4c129xnczad-epi-host-bus-mode-address-access-have-problem

器件型号:TM4C129XNCZAD

你好、冠军

我的客户在主机总线16 ADMUX 模式下使用 M4 EPI 来访问 SRAM、他们使用了如下设置、并按如下方式进行 EPI 初始化:

他们发现、当他们访问地址时、地址看起来需要让 shif 1位来获得正确的输出、如下所示的测试结果。

我还在 TM4C129X DK 电路板中进行测试、并获得与客户在电路板中看到的结果相同的结果。

但我们在数据表中没有发现最小位地址不是 A0、因此请就问题发表意见、谢谢。

当我在 DK 电路板上进行测试时、我连接了整个项目。

void Epi_Initialize (void)(无效)

        //启用所有 GPIO 外设。

     ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);

     ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);

     ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC);

     ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);

     ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);

     ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);

     ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOG);

     ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOH);

     ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOJ);

     ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOK);

     ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOL);

     ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOM);

      ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPION);

     ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOP);

     ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOQ);

     ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOR);

      ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIO);

     ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOT);

        

ROM_GPIOPinConfigure (GPIO_PH0_EPI0S0);

        ROM_GPIOPinConfigure (GPIO_PH1_EPI0S1);

        ROM_GPIOPinConfigure (GPIO_PH2_EPI0S2);

        ROM_GPIOPinConfigure (GPIO_PH3_EPI0S3);

        GPIOPinTypeEPI (GPIO_Porth_BASE、GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);

        

        ROM_GPIOPinConfigure (GPIO_PC7_EPI0S4);

        ROM_GPIOPinConfigure (GPIO_PC6_EPI0S5);

        ROM_GPIOPinConfigure (GPIO_PC5_EPI0S6);

        ROM_GPIOPinConfigure (GPIO_PC4_EPI0S7);

        GPIOPinTypeEPI (GPIO_PORTC_BASE、GPIO_PIN_7|GPIO_PIN_6|GPIO_PIN_5|GPIO_PIN_4);

        

        ROM_GPIOPinConfigure (GPIO_PA6_EPI0S8);

        ROM_GPIOPinConfigure (GPIO_PA7_EPI0S9);

        GPIOPinTypeEPI (GPIO_Porta_base、GPIO_PIN_6|GPIO_PIN_7);

        

        ROM_GPIOPinConfigure (GPIO_PG1_EPI0S10);

        ROM_GPIOPinConfigure (GPIO_PG0_EPI0S11);

        GPIOPinTypeEPI (GPIO_PORTG_base、GPIO_PIN_1|GPIO_PIN_0);

        

        ROM_GPIOPinConfigure (GPIO_PM3_EPI0S12);

        ROM_GPIOPinConfigure (GPIO_PM2_EPI0S13);

        ROM_GPIOPinConfigure (GPIO_PM1_EPI0S14);

        ROM_GPIOPinConfigure (GPIO_PM0_EPI0S15);

        GPIOPinTypeEPI (GPIO_PORTM_BASE、GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1_GPIO_PIN_0);     

        

        ROM_GPIOPinConfigure (GPIO_PQ0_EPI0S20);

        ROM_GPIOPinConfigure (GPIO_PQ1_EPI0S21);

        ROM_GPIOPinConfigure (GPIO_PQ2_EPI0S22);

        GPIOPinTypeEPI (GPIO_PORTQ_BASE、GPIO_PIN_0|GPIO_PIN_1_|GPIO_PIN_2);

 

        ROM_GPIOPinConfigure (GPIO_PK7_EPI0S24);

        ROM_GPIOPinConfigure (GPIO_PK6_EPI0S25);

        GPIOPinTypeEPI (GPIO_PORTK_base、GPIO_PIN_7|GPIO_PIN_6);

        

        ROM_GPIOPinConfigure (GPIO_PL4_EPI0S26);

        GPIOPinTypeEPI (GPIO_PORTL_BASE、GPIO_PIN_4);

        

        ROM_GPIOPinConfigure (GPIO_PB2_EPI0S27);

        ROM_GPIOPinConfigure (GPIO_PB3_EPI0S28);

        GPIOPinTypeEPI (GPIO_PORTB_BASE、GPIO_PIN_2|GPIO_PIN_3);

        

        ROM_GPIOPinConfigure (GPIO_PN2_EPI0S29);

        ROM_GPIOPinConfigure (GPIO_PN3_EPI0S30);

        GPIOPinTypeEPI (GPIO_PORTN_BASE、GPIO_PIN_2|GPIO_PIN_3);

        

        ROM_SysCtlPeripheralEnable (SYSCTL_Periph_EPI0);

        ROM_EPImodeSet (EPI0_BASE、EPI_MODE_HB16);

        ROM_EPIConfigHB16Set (EPI0_BASE、EPI_HB16_CSCFG_ALE_DUAL_CS、0xff);

        ROM_EPIDividerCSSet (EPI0_BASE,0,2);                                                                                  //除以4,30Mhz,SDRAM

        ROM_EPIDividerCSSet (EPI0_BASE、1、2);

        //ROM_EPIDividerCSSet (EPI0_BASE,1,118);                                                                 //除以120,1MHz,IO

        ROM_EPIConfigHB16CSSet (EPI0_BASE、0、EPI_HB16_MODE_ADMUX | EPI_HB16_ALE_HIGH | EPI_HB16_BSEL | 0x0000FF00);

        ROM_EPIConfigHB16CSSet (EPI0_BASE、1、EPI_HB16_MODE_ADMUX | EPI_HB16_ALE_HIGH | EPI_HB16_BSEL | 0x07000000);

        ROM_EPIConfigHB16TimingSet (EPI0_BASE、0、EPI_HB16_PSRAM_256 | EPI_HB16_CAP_WIDTH_2);

        ROM_EPIConfigHB16TimingSet (EPI0_BASE、1、EPI_HB16_PSRAM_256 | EPI_HB16_CAP_WIDTH_2);

        ROM_EPIAddressMapSet (EPI0_BASE、

                                                                                                       (EP_ADDR_CODE_SIZE_256B|

                                                                                                       EPI_ADDR_CODE_BASE_NONE |

                                                                                                       EPI_ADDR_PER_SIZE 16MB |

                                                                                                               EPI_ADDR_PER_BASE_C|

                                                                                                               EPI_ADDR_RAM_SIZE 256B|

                                                                                                               EPI_ADDR_RAM_BASE_NONE

                                                                                                               )

                                                                                                      );

e2e.ti.com/.../project0.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    代码使用16位宽模式。 地址行提供地址 A25:A1。 不需要 A0、因为通过选择16位宽数据总线的高字节或低字节来完成字节读取。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好 Bob
    非常感谢您的回复、因为这个问题需要我一段时间来检查。
    您还能建议您在129X 数据表中提及此信息的位置吗? 我需要向客户展示。

    Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Eric:
    老实说、我认为这并不是明确声明的。 对我来说、这是直观的(但我承认这可能并非每个人都是真实的)。 您在上面发布的表11-7中的行显示了16位数据总线、25个地址行和64MB 地址空间。 您还可以如何解释除来自 A25:A1之外的地址行? A24:A0将仅为32MB。 A25:A0是26个地址行。 25个地址行和64MB 地址空间的有效答案是 A25:A1。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好 Bob

    按如下所示更正配置设置:

    它也与您的注释相同:对于24位地址行和32MB 地址空间、它应为 A24:A1。 我将向客户提供反馈并获得他们的回复。

    谢谢!

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

    你(们)好 Bob

    在向客户提供反馈后、存在以下有关数据表内容的问题:

    数据表中的示例仍然使用 A0、客户想知道如何解释这一点吗?

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

    你(们)好 Bob

    下面是关于 EPI 连接到64K * 16 SRAM 的客户 SCH:

    客户表示可以字节从0x C0000000 ~ 0xC001FFFF 读取和写入数据、因此他认为 A0具有节拍效应。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉,我没有看到问题。 哪些不能为客户效?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好 Bob

    在开机自检开始时、客户希望使用地址访问来控制 EPI22、EPI21、EPI20、但我们发现地址需要左移1位。  

    然后作为您的注释、我们认为地址行是 A1~A24、而不是 A0~A23、在这种模式下不使用 A0。

    但是客户进行测试、发现他可以从 0x C0000000 ~ 0xC001FFFF 读取写入数据、看起来 A0已被使用并正常工作。 同时、在数据表中、示例中也有 A0。

    我是否清楚解释?

    感谢您的建议!

    -Eric

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    从16位宽接口读取一个字节时、通常所有16位都出现在总线上、但是 CPU 只将适当的字节(高或低)加载到寄存器中。 在16位宽总线上写入单字节数据时、字节选择信号(BSEL0/BSEL1不是 A0)决定将哪一半的16位总线写入 RAM。