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.

[参考译文] CCS/TM4C129ENCPDT:EPI 读操作始终检索时钟内的数据以获取地址

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/958447/ccs-tm4c129encpdt-epi-read-always-retrieves-the-data-within-the-clock-for-address

器件型号:TM4C129ENCPDT

工具/软件:Code Composer Studio

我们的设计是使用 EPI 总线在 FPGA 中读取或写入128字节 SRAM。 MCU 配置为通用模式、具有16位数据大小和12位地址大小。 总线操作为1个 EPI 时钟用于写周期、2个 EPI 时钟用于读周期。

将数据写入 FPGA 中的 SRAM 是正确的。 我们在读取方面存在问题。 我们希望在第二个时钟内获得数据、但它使用旧数据在第一个时钟内返回数据。

在我们的测试中、我们写入 SRAM{10、11、12、13}、但读出{13、10、11、12}、这意味着[addr1]=旧数据、[addr2]=data1。 我们监控了这些信号、并验证是否遵循以下时序模式。

EPI 测试代码。

空 initEPIPins (空)

  //MCU EPI 数据总线(仅将 EPI_D0至 EPI_D7连接到 FPGA):

  MAP_GPIOPinConfigure (GPIO_PK0_EPI0S0);

  MAP_GPIOPinTypeEPI (GPIO_PORTK_base、GPIO_PIN_0);  //D0

  MAP_GPIOPinConfigure (GPIO_PK1_EPI0S1);

  MAP_GPIOPinTypeEPI (GPIO_PORTK_base、GPIO_PIN_1);  //D1

  MAP_GPIOPinConfigure (GPIO_PK2_EPI0S2);

  MAP_GPIOPinTypeEPI (GPIO_PORTK_base、GPIO_PIN_2);  //D2

  MAP_GPIOPinConfigure (GPIO_PK3_EPI0S3);

  MAP_GPIOPinTypeEPI (GPIO_PORTK_base、GPIO_PIN_3);  //D3

  MAP_GPIOPinConfigure (GPIO_PC7_EPI0S4);

  MAP_GPIOPinTypeEPI (GPIO_PORTC_BASE、GPIO_PIN_7);  //D4

  MAP_GPIOPinConfigure (GPIO_PC6_EPI0S5);

  MAP_GPIOPinTypeEPI (GPIO_PORTC_BASE、GPIO_PIN_6);  //D5

  MAP_GPIOPinConfigure (GPIO_PC5_EPI0S6);

  MAP_GPIOPinTypeEPI (GPIO_PORTC_BASE、GPIO_PIN_5);  //D6

  MAP_GPIOPinConfigure (GPIO_PC4_EPI0S7);

  MAP_GPIOPinTypeEPI (GPIO_PORTC_BASE、GPIO_PIN_4);  //D7

  MAP_GPIOPinConfigure (GPIO_PA6_EPI0S8);

  MAP_GPIOPinTypeEPI (GPIO_Porta_base、GPIO_PIN_6);  //D8

  MAP_GPIOPinConfigure (GPIO_PA7_EPI0S9);

  MAP_GPIOPinTypeEPI (GPIO_Porta_base、GPIO_PIN_7);  //D9

  MAP_GPIOPinConfigure (GPIO_PG1_EPI0S10);

  MAP_GPIOPinTypeEPI (GPIO_PORTG_BASE、GPIO_PIN_1);  //D10

  MAP_GPIOPinConfigure (GPIO_PG0_EPI0S11);

  MAP_GPIOPinTypeEPI (GPIO_PORTG_BASE、GPIO_PIN_0);  //D11

  MAP_GPIOPinConfigure (GPIO_PM3_EPI0S12);

  MAP_GPIOPinTypeEPI (GPIO_PORTM_BASE、GPIO_PIN_3);  //D12

  MAP_GPIOPinConfigure (GPIO_PM2_EPI0S13);

  MAP_GPIOPinTypeEPI (GPIO_PORTM_BASE、GPIO_PIN_2);  //D13

  MAP_GPIOPinConfigure (GPIO_PM1_EPI0S14);

  MAP_GPIOPinTypeEPI (GPIO_PORTM_BASE、GPIO_PIN_1);  //D14

  MAP_GPIOPinConfigure (GPIO_PM0_EPI0S15);

  MAP_GPIOPinTypeEPI (GPIO_PORTM_BASE、GPIO_PIN_0);  //D15

 

  // MCU EPI 地址总线(只有 EPI_A0至 EPI_A6连接到 FPGA)

  MAP_GPIOPinConfigure (GPIO_PL0_EPI0S16);

  MAP_GPIOPinTypeEPI (GPIO_PORTL_base、GPIO_PIN_0);  //A0

  MAP_GPIOPinConfigure (GPIO_PL1_EPI0S17);

  MAP_GPIOPinTypeEPI (GPIO_PORTL_base、GPIO_PIN_1);  //A1

  MAP_GPIOPinConfigure (GPIO_PL2_EPI0S18);

  MAP_GPIOPinTypeEPI (GPIO_PORTL_base、GPIO_PIN_2);  //A2

  MAP_GPIOPinConfigure (GPIO_PL3_EPI0S19);

  MAP_GPIOPinTypeEPI (GPIO_PORTL_base、GPIO_PIN_3);  //A3

  MAP_GPIOPinConfigure (GPIO_PQ0_EPI0S20);

  MAP_GPIOPinTypeEPI (GPIO_PORTQ_BASE、GPIO_PIN_0);  //A4

  MAP_GPIOPinConfigure (GPIO_PQ1_EPI0S21);

  MAP_GPIOPinTypeEPI (GPIO_PORTQ_BASE、GPIO_PIN_1);  //A5

  MAP_GPIOPinConfigure (GPIO_PQ2_EPI0S22);

  MAP_GPIOPinTypeEPI (GPIO_PORTQ_BASE、GPIO_PIN_2);  //A6

  MAP_GPIOPinConfigure (GPIO_PQ3_EPI0S23);

  MAP_GPIOPinTypeEPI (GPIO_PORTQ_BASE、GPIO_PIN_3);  /A7

  MAP_GPIOPinConfigure (GPIO_PK7_EPI0S24);

  MAP_GPIOPinTypeEPI (GPIO_PORTK_base、GPIO_PIN_7);  //A8

  MAP_GPIOPinConfigure (GPIO_PK6_EPI0S25);

  MAP_GPIOPinTypeEPI (GPIO_PORTK_base、GPIO_PIN_6);  /A9

  MAP_GPIOPinConfigure (GPIO_PL4_EPI0S26);

  MAP_GPIOPinTypeEPI (GPIO_PORTL_base、GPIO_PIN_4);  //A10

  MAP_GPIOPinConfigure (GPIO_PB2_EPI0S27);

  MAP_GPIOPinTypeEPI (GPIO_PORTB_BASE、GPIO_PIN_2);  /A11

 

  // MCU EPI 控制信号(输出)

  MAP_GPIOPinConfigure (GPIO_PB3_EPI0S28);

  MAP_GPIOPinTypeEPI (GPIO_PORTB_BASE、GPIO_PIN_3);  //WR

  MAP_GPIOPinConfigure (GPIO_PP2_EPI0S29);

  MAP_GPIOPinTypeEPI (GPIO_PORTP_BASE、GPIO_PIN_2);  //RD

  MAP_GPIOPinConfigure (GPIO_PP3_EPI0S30);

  MAP_GPIOPinTypeEPI (GPIO_PORTP_BASE、GPIO_PIN_3);  //frame

  MAP_GPIOPinConfigure (GPIO_PK5_EPI0S31);

  MAP_GPIOPinTypeEPI (GPIO_PORTK_base、GPIO_PIN_5);  //CLK

 

void Initialize()

  //启用 EPI0

  MAP_SysCtlPeripheralEnable (SYSCTL_Periph_EPI0);

  //等待它准备就绪

  while (!map_SysCtlPeripheralReady (SYSCTL_Periph_EPI0)){}

 

  initEPIPins();

 

  //配置 EPI 时钟:1M Hz

  MAP_EPIDividerSet (EPI0_BASE、118);//系统时钟120M、EPI:1M  

  MAP_EPImodeSet (EPI0_BASE、EPI_MODE_General);

  MAP_EPIConfigGPModeSet (EPI0_BASE、EPI_GPMODE_CLKPIN | EPI_GPMODE_CLKGATE | EPI_GPMODE_ASIZE_12 | EPI_GPMODE_DSIZE_16、0、0);                  

  MAP_EPIAddressMapSet (EPI0_BASE、 EPI_ADDR_PER_SIZE _256B | EPI_ADDR_PER_BASE_C);

 

#define EPI_BUF_SIZE 4

静态 int16_t g_TxBuf[EP_BUF_SIZE];

静态 int16_t g_RxBuf[EP_BUF_SIZE];  

uint32_t loop = 0;

void main (void)

  initialize();

  对于(int i = 0;i < EPI_BUF_SIZE;I ++)

  {

      G_TxBuf[i]= i + 10;

      G_RxBuf[i]= 0;

  }

while (1)

  LOOP ++;

  如果(LOOP == 100)

  {

      对于(int i = 0;i < EPI_BUF_SIZE;I ++)

          EPIfpga[i]= g_TxBuf[i];

  }

 

  if (loop =10000)

  {

      对于(int i = 0;i < EPI_BUF_SIZE;I ++)

      {

          G_RxBuf[i]= EPIfpga[i];

      }

  }

谢谢!

 

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

    您好!

     您是否上传了任何图像? 如果是、您能否重试、因为我看不到图像。

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

    读取访问

    EPI 通用模式是否适用于访问 SRAM。 我们应该使用 HB 8还是 HB16模式?

    uint16_t * EPIfpga = (uint16_t *) 0xC0000000;  

    读取:返回 EPIfpga[addr];写入 EFPfpga[addr]=值;

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

    e2e.ti.com/.../Read-Access.docx

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

    Shuran、您好!

     如果 FPGA 中的 SRAM 遵循时序图中所示的 SRAM 时序、您能否尝试主机总线模式? 如果您看到正确的结果、请报告。  

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

    感谢 Charles 的快速回复! 我将请求 EE 支持 SRAM 的 HB 模式、并告知您结果。