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.

[参考译文] TM4C1294KCPDT:EPI 通用并行 GPIO

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1292387/tm4c1294kcpdt-epi-general-parallel-gpio

器件型号:TM4C1294KCPDT

我们将 TM4C1294KCPDT 微控制器与 XC7S25-2CSGA225C FPGA 的 EPI 总线32位(EPIOS0 - EPIOS31)配合使用。 当数据可传输到微控制器时、FPGA 会将配置为中断输入(fpgaReadReady)的引脚置位。 在中断期间、我们需要将 EPI 总线数据读取到微控制器中。 然后、微控制器将配置为输出的引脚 PM5置为有效、以确认数据接收(ucReadACK)。 当 EPI 总线引脚配置为 GPIO 输入时工作正常、但到目前为止、我们尝试使用 TivaWare EPI 库进行此设置的操作已失败。 能否提供任何示例来将 EPI 总线配置为在被查询时仅读取32个 EPI 引脚状态?  请查看随附的代码、并告诉我您是否发现任何违规使用。

下面列出了用于配置和读取 EPI 总线的相关章节。 请注意、在尝试调试时不使用中断。

静态空 configEPIPeripheral( void )
{
//配置 FPGA 读取确认输出
MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOM);
while (! MAP_SysCtlPeripheralReady (SYSCTL_Periph_GPIOM);
MAP_GPIOPinTypeGPIOOutput ( SYSCTL_Periph_GPIOM, OUTPUT_EPI0_READ_ACK_PM5 );
MAP_GPIOPinWrite (SYSCTL_Periph_GPIIOM,OUTPUT_EPI0_READ_ACK_PM5,OUTPUT_EPI0_READ_ACK_PM5);

//配置 FPGA 读取就绪输入
MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOP);
while (! MAP_SysCtlPeripheralReady (SYSCTL_Periph_GPIOP);
MAP_GPIOPinTypeGPIOInput (GPIO_PORTP_BASE、INPUT_EPI0_READ_RDY_INT_PP0);

enablePeripheral( SYSCTL_Periph_EPI0 );

//配置 EPI 管脚
MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
while (! MAP_SysCtlPeripheralReady (SYSCTL_Periph_GPIOA)
MAP_GPIOPinTypeEPI (GPIO_Porta_base、EPI0_SIGNAL_9_PA7 | EPI0_SIGNAL_8_PA6);
MAP_GPIOPinConfigure ( EPI0_SIGNAL_9_PA7 | EPI0_SIGNAL_8_PA6 );

MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
while (! MAP_SysCtlPeripheralReady (SYSCTL_Periph_GPIOB);
MAP_GPIOPinTypeEPI (GPIO_PORTB_BASE、EPI0_SIGNAL_28_PB3 | EPI0_SIGNAL_27_PB2);
MAP_GPIOPinConfigure (EPI0_SIGNAL_28_PB3 | EPI0_SIGNAL_27_PB2);

MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC);
while (! MAP_SysCtlPeripheralReady (SYSCTL_Periph_GPIOC);
MAP_GPIOPinTypeEPI (GPIO_PORTC_BASE、EPI0_SIGNAL_4_PC7 | EPI0_SIGNAL_5_PC6 | EPI0_SIGNAL_6_PC5 | EPI0_SIGNAL_7_PC4);
MAP_GPIOPinConfigure (EPI0_SIGNAL_4_PC7 | EPI0_SIGNAL_5_PC6 | EPI0_SIGNAL_6_PC5 | EPI0_SIGNAL_7_PC4);

MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOG);
while (! MAP_SysCtlPeripheralReady (SYSCTL_Periph_GPIOG);
MAP_GPIOPinTypeEPI (SYSCTL_PERIPH_GPIOG、EPI0_SIGNAL_10_PG1 | EPI0_SIGNAL_11_PG0);
MAP_GPIOPinConfigure ( EPI0_SIGNAL_10_PG1| EPI0_SIGNAL_11_PG0 );

MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOK);
while (! MAP_SysCtlPeripheralReady (SYSCTL_Periph_GPIOK);
MAP_GPIOPinTypeEPI (SYSCTL_PERIPH_GPIOH, EPI0_SIGNAL_24_PK7 | EPI0_SIGNAL_25_PK6 | EPI0_SIGNAL_31_PK5);
MAP_GPIOPinConfigure (EPI0_SIGNAL_24_PK7 | EPI0_SIGNAL_25_PK6 | EPI0_SIGNAL_31_PK5);

MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOL);
while (! MAP_SysCtlPeripheralReady (SYSCTL_Periph_GPIOL);
MAP_GPIOPinTypeEPI (SYSCTL_PERIPH_GPIOL, EPI0_SIGNAL_26_PL4 | EPI0_SIGNAL_19_PL3 | EPI0_SIGNAL_18_PL2 | EPI0_SIGNAL_17_PL1 | EPI0_SIGNAL_16_PL0);
MAP_GPIOPinConfigure (EPI0_SIGNAL_26_PL4 | EPI0_SIGNAL_19_PL3 | EPI0_SIGNAL_18_PL2 | EPI0_SIGNAL_17_PL1 | EPI0_SIGNAL_16_PL0);

MAP_GPIOPinTypeEPI (SYSCTL_PERIPH_GPIOM, EPI0_SIGNAL_12_PM3 | EPI0_SIGNAL_13_PM2 | EPI0_SIGNAL_14_PM1 | EPI0_SIGNAL_15_PM0);
MAP_GPIOPinConfigure (EPI0_SIGNAL_12_PM3 | EPI0_SIGNAL_13_PM2 | EPI0_SIGNAL_14_PM1 | EPI0_SIGNAL_15_PM0);

MAP_GPIOPinTypeEPI (SYSCTL_Periph_GPIOQ,EPI0_SIGNAL_30_PP3 | EPI0_SIGNAL_29_PP2);
MAP_GPIOPinConfigure ( EPI0_SIGNAL_30_PP3 | EPI0_SIGNAL_29_PP2 );

//配置 EPI 操作
MAP_EPIModeSet (EPI0_BASE、EPI_MODE_General);
MAP_EPIDividerSet (EPI0_BASE,1);
MAP_EPIConfigGPModeSet (EPI0_BASE、EPI_GPMODE_ASIZE_NONE | EPI_GPMODE_DSIZE_32、0、0);
MAP_EPIAddressMapSet ( EPI0_BASE、EPI_ADDR_PER_BASE_A );

静态空 readEPI(空)
{
uint32_t inx、
epiData;

for (inx=0;inx<100;inx++)
{
while (! MAP_GPIOPinRead (GPIO_PORTP_BASE,INPUT_EPI0_READ_RDY_INT_PP0);

MAP_GPIOPinWrite (GPIO_PORTM_BASE、OUTPUT_EPI0_READ_ACK_PM5、~OUTPUT_EPI0_READ_ACK_PM5);

epiData = 0;
epiData = HWREG( 0xA0000000 );

MAP_GPIOPinWrite (GPIO_PORTM_BASE、OUTPUT_EPI0_READ_ACK_PM5、OUTPUT_EPI0_READ_ACK_PM5);

if ( epiData != epp_data_pattern[ inx % 2 ])
logError( INVALID_EPI_PATH_ERROR );

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    但是、到目前为止、我们使用 TivaWare EPI 库进行设置的尝试失败了。 您能提供配置 EPI 总线的任何示例吗

    您好!

      C:\ti\TivaWare_C_Series-2.2.0.295\examples\peripherals\epi\SDRAM.c 中有一个示例。 虽然示例中的 EPI 模块与 SDRAM 进行直接连接、但 EPI 管脚的配置应该是相同的。 请注意、与通用模式相比、SDRAM 中并不需要某些 EPI 总线管脚。 在本例中、对每个管脚的 PCTL 寄存器进行手动设置、而不是通过  GPIOPinConfigure 来进行设置。   

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    //
    // The EPI0 peripheral must be enabled for use.
    //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_EPI0);
    //
    // For this example EPI0 is used with multiple pins on PortA, B, C, G, H,
    // K, L, M and N. The actual port and pins used may be different on your
    // part, consult the data sheet for more information.
    // TODO: Update based upon the EPI pin assignment on your target part.
    //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOK);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOL);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOM);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPION);
    //
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    是的、我了解您提到的 SDRAM 示例。  我曾研究过这方面的工作,以及其他数个外展职位。  正如我在原始问题中提到的、当 FPGA 指示数据已就绪时、只需要读取 EPI0 - EPI31上的输入。  这与32位 SPI 总线类似、其中 FPGA 是主器件、数据就绪标志充当时钟信号、其中数据在上升沿由微控制器读取、在下降沿由 FPGA 提供。  是否可以建议一种在不读取每个端口引脚的情况下读取 EPI 总线数据的方法?

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

    Patrick、您好!

     我真的没有发现您的代码有任何问题。 您能告诉我您读取了哪些数据吗? 它是读取零还是读取一些垃圾数据?

     您能否显示 GPIO 寄存器设置、尤其是寄存器浏览器中的 GPIO_PCTL 和 GPIO_DEN 以及 GPIO_AFSEL 寄存器设置?

    EPI 使用很多引脚。 我们首先根据以下配置选择 EPI0S8和 EPI0S9、因为这两个 EPI 信号会映射到 PA6和 PA7。 我想查看他们的设置。 我预计 PORTA 的 GPIOPCTL 寄存器中将出现0xFF000000。 得到了什么? 当然、这些管脚的 GPIODEN 和 GPIOAFSEL 也应该被设置。  

    //配置 EPI 管脚
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
    while (! MAP_SysCtlPeripheralReady (SYSCTL_Periph_GPIOA)
    MAP_GPIOPinTypeEPI (GPIO_Porta_base、EPI0_SIGNAL_9_PA7 | EPI0_SIGNAL_8_PA6);
    MAP_GPIOPinConfigure ( EPI0_SIGNAL_9_PA7 | EPI0_SIGNAL_8_PA6 );

    事实上、所有 EPI 信号都是复用表中的第15个选择信号。 对于所有相关的 EPI 管脚、都应该看到 PMCx 位域等于0xF。  

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

    几次更新后、我能够在 GPIO_PDCTL 和 GPIO_DEN 中获得正确的值。  请注意我必须 为每个单独的引脚调用 GPIOPinConfigure()以使 GPIO_PDCTL 为每个引脚设置0xF。  使用 连接形式(GPIO_PA6_EPI0S8 | GPIO_PA7_EPI0S9)只会将最高阶引脚设置为0xF。

    不过、即使每个 EPI 管脚的配置正确、当我预期接收到 0xAA55AA55的测试模式时、返回值仍然为0。  我不明白什么触发了 EPI 数据传输到存储器位置 0xA0000000进行读取。  我唯一使用的专用 EPI 线是用于数据传输的 EPI0 - EPI31。  我的应用使用一个配置为 FPGA 输入、充当时钟输入、并使用一个配置为 FPGA 输出的 GPIO 确认已成功读取数据。  如何使用 GPIO 时钟输入触发将数据从 EPI 总线传输到某个读取位置?

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

    Patrick、您好!  

     是否可以尝试从 EPIREADFIFO0寄存器读取数据、而不是从0xA0000000读取数据?  

     

    实现通用并行 GPIO。 可以写入或读取1至32个引脚、速度精确到
    由 EPIBAUD 寄存器波特率控制(配合 WFIFO 及/或 NBRFIFO 使用时)
    或由软件或 μ μDMA 的访问速率决定。 此类应用的示例包括:


    –通过将20个引脚配置为输入来以固定时间周期读取20个传感器、
    将 EPIBAUD 寄存器的 COUNT0位域设置为分频比、然后进行非阻塞式读操作。


    –实施一个非常广泛的可成组且具有固定频率的 PWM/PCM、用于驱动执行器、LED、
    等等

      

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

    我仍然有内置 EPI 读取的问题。  以下是使用内置 EPI 读操作时相关寄存器的值。

    端口 A
    DEN = 0x000000FF
    PCTL = 0xFF112200
    PORT B
    DEN = 0x0000003C
    PCTL = 0x00FFFF00
    PORT C
    DEN = 0x000000FF
    PCTL = 0xFFFF1111
    PORT G
    DEN = 0x00000003
    PCTL = 0x000000FF
    PORT H
    DEN = 0x0000000F
    PCTL = 0x0000FFFF
    PORT K
    DEN = 0x000000FF
    PCTL = 0xFFF00000
    PORT L
    DEN = 0x0000003F
    PCTL = 0x000FFFFF
    PORT M
    DEN = 0x000000FF
    PCTL = 0x0000FFFF
    PORT P
    DEN = 0x0000000F
    PCTL = 0x0011FF00
    PORT Q
    DEN = 0x0000001F
    PCTL = 0x0000FFFF

    EPI 寄存器
    EPI_CFG = 0x00000010
    EPI_BAUD = 0x0000000A
    EPI_BAUD2 = 0x00000000
    EPI_GPCFG = 0x00000003
    EPI_ADDRMAP = 0x00000010
    EPIX_RSIZE0 = 0x00000003
    EPI_READFIFO1 = 0x40272C00
    EPI_READFIFO7 = 0x40272C00
    EPI_FIFOLVL = 0x00000033
    EPI_RIS = 0x00000004

    在 bit_Bang 模式下运行时、一切均正常。但是、当尝试在 GP 模式下使用内置 EPI 时、该读数始终返回0xAA。  0xAA 是所发送内容的第一个字节、但我不确定这是否出于巧合。

    请查看随附的代码、确保不会遗漏有关 EPI 用法的任何小细节?

    静态空 initEPI( void )
    {
    enablePeripheral( SYSCTL_Periph_EPI0 );

    enablePeripheral( SYSCTL_Periph_GPIOA );
    MAP_GPIOPinTypeEPI (GPIO_PORTA_BASE、GPIO_PIN_7 | GPIO_PIN_6);
    MAP_GPIOPinConfigure (GPIO_PA6_EPI0S8);
    MAP_GPIOPinConfigure (GPIO_PA7_EPI0S9);

    enablePeripheral( SYSCTL_Periph_GPIOB );
    MAP_GPIOPinTypeEPI (GPIO_PORTB_BASE、GPIO_PIN_3 | GPIO_PIN_2);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_27_PB2);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_28_PB3);

    enablePeripheral( SYSCTL_Periph_gpoc );
    MAP_GPIOPinTypeEPI (GPIO_PORTC_BASE、GPIO_PIN_7 | GPIO_PIN_6 | GPIO_PIN_5 | GPIO_PIN_4);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_7_PC4);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_6_PC5);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_5_PC6);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_4_PC7);

    enablePeripheral( SYSCTL_Periph_GPIOG );
    MAP_GPIOPinTypeEPI (GPIO_PORTG_BASE、GPIO_PIN_1 | GPIO_PIN_0);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_11_PG0);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_10_PG1);

    enablePeripheral( SYSCTL_Periph_GPIOH );
    MAP_GPIOPinTypeEPI (GPIO_PORth_BASE、GPIO_PIN_3 | GPIO_PIN_2 | GPIO_PIN_1 | GPIO_PIN_0);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_0_PH0);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_1_PH1);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_2_PH2);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_3_PH3);

    enablePeripheral( SYSCTL_Periph_GPIOK );
    MAP_GPIOPinTypeEPI (GPIO_PORTK_BASE、GPIO_PIN_7 | GPIO_PIN_6 | GPIO_PIN_5);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_31_PK5);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_25_PK6);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_24_PK7);

    enablePeripheral( SYSCTL_Periph_GPIOL );
    MAP_GPIOPinTypeEPI (GPIO_PORTL_BASE、GPIO_PIN_4 | GPIO_PIN_3 | GPIO_PIN_2 | GPIO_PIN_1 | GPIO_PIN_0);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_16_PL0);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_17_PL1);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_18_PL2);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_19_PL3);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_26_PL4);

    enablePeripheral( SYSCTL_Periph_GPIOM );
    MAP_GPIOPinTypeEPI (GPIO_PORTM_BASE、GPIO_PIN_3 | GPIO_PIN_2 | GPIO_PIN_1 | GPIO_PIN_0);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_15_PM0);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_14_PM1);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_13_PM2);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_12_PM3);

    enablePeripheral( SYSCTL_Periph_GPIOP );
    MAP_GPIOPinTypeEPI (GPIO_PORTP_BASE、GPIO_PIN_3 | GPIO_PIN_2);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_29_PP2);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_30_PP3);

    enablePeripheral( SYSCTL_Periph_GPIOQ );
    MAP_GPIOPinTypeEPI (GPIO_PORTQ_BASE、GPIO_PIN_3 | GPIO_PIN_2 | GPIO_PIN_1 | GPIO_PIN_0);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_20_PQ0);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_21_PQ1);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_22_PQ2);
    MAP_GPIOPinConfigure (EPI0_SIGNAL_23_PQ3);

    MAP_EPIModeSet (EPI0_BASE、EPI_MODE_General);
    MAP_EPIDividerSet (EPI0_BASE,10);
    MAP_EPIConfigGPModeSet (EPI0_BASE、EPI_GPMODE_ASIZE_NONE | EPI_GPMODE_DSIZE_32、0、0);
    MAP_EPIAddressMapSet ( EPI0_BASE、EPI_ADDR_PER_BASE_A );

    静态空 testEPI(空)
    {
    uin32_t inx、
    epiData;

    for (inx=0;inx<100;inx++)
    {
    MAP_GPIOPinWrite (GPIO_PORTM_BASE、OUTPUT_EPI0_READ_ACK_PM5、OUTPUT_EPI0_READ_ACK_PM5);
    while (! MAP_GPIOPinRead (GPIO_PORTP_BASE,INPUT_EPI0_READ_RDY_INT_PP0);
    MAP_GPIOPinWrite (GPIO_PORTM_BASE、OUTPUT_EPI0_READ_ACK_PM5、~OUTPUT_EPI0_READ_ACK_PM5);
    #ifdef bit_Bang
    epiData = MAP_GPIOPinRead (GPIO_Porta_base、PORT_A_EPI_PINS)<< 2;
    epiData |= MAP_GPIOPinRead (GPIO_PORTB_BASE、PORT_B_EPI_PINS)<< 25;
    epiData |=_ rbit ( MAP_GPIOPinRead ( GPIO_PORTC_BASE , PORT_C_EPI_PINS )>> 20;
    epiData |=_ rbit ( MAP_GPIOPinRead ( GPIO_PORTG_BASE, PORT_G_EPI_PINS )>> 20;
    epiData |= MAP_GPIOPinRead (GPIO_PORth_BASE、PORT_H_EPI_PINS);

    InputPins = MAP_GPIOPinRead (GPIO_PORTK_BASE、PORT_K_EPI_Pins);
    epiData |=(InputPins & 0x00000020)<< 26;
    epiData |=(InputPins & 0x00000080)<< 17;
    epiData |=(InputPins & 0x00000040)<< 19;

    InputPins = MAP_GPIOPinRead (GPIO_PORTL_BASE、PORT_L_EPI_Pins);
    epiData |=(输入引脚和0x0000000F)<< 16;
    epiData |=(InputPins & 0x00000010)<< 22;

    epiData |=_rbit ( MAP_GPIOPinRead ( GPIO_PORTM_BASE、PORT_M_EPI_PINS )>>16;
    epiData |= MAP_GPIOPinRead (GPIO_PORTP_BASE、PORT_P_EPI_PINS)<< 27;
    epiData |= MAP_GPIOPinRead (GPIO_PORTQ_BASE、PORT_Q_EPI_PINS)<< 20;
    #else
    epiData = HWREG( 0xA0000000 );
    #endif

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    epiData |=_ rbit ( MAP_GPIOPinRead ( GPIO_PORTM_BASE、PORT_M_EPI_PINS )>> 16;
    epiData |= MAP_GPIOPinRead (GPIO_PORTP_BASE、PORT_P_EPI_PINS)<< 27;
    epiData |= MAP_GPIOPinRead (GPIO_PORTQ_BASE、PORT_Q_EPI_PINS)<< 20;
    #else
    epiData = HWREG( 0xA0000000 );
    #endif[/报价]

    Patrick、您好!

     我仍然看到您从0xA0000000读取。 如果采用 SDRAM 或主机总线模式、此地址是要读取的基于存储器的地址。   在 EPI 自定义 GPIO 模式下、是否尝试过从0x400D.0070读取数据?

    此外、EPI 控制器还提供自定义 GPIO、可以快速使用 FIFO
    使用片内写 FIFO (WFIFO)或非阻塞式读 FIFO (NBRFIFO)进行控制
    WFIFO 可以保存4个字的数据、这些数据以受控的速率写入外部接口
    由 EPI 主波特率寄存器(EPIBAUD)查询。 NBRFIFO 可保存8个字的数据并且
    采样率由 EPIBAUD 寄存器控制。 EPI 控制器通过将数据信号
    因此比常规 GPIO 更有优势、因为常规 GPIO 的时序
    片上总线仲裁和总线桥上的延迟

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

    仍然在环形进行、没有取得进展。  在将所有引脚配置为通用输入后、可以使其正常工作、这种情况令人沮丧。  尝试使用 EPI TivaWare API 并未取得任何成功。  正如您的建议、我更改了代码中的两行:

    将 MAP_EPIAddressMapSet (EPI0_BASE、EPI_ADDR_PER_BASE_A);更改为 MAP_EPIAddressMapSet (EPI0_BASE、EPI_ADDR_CODE_BASE_NONE);

    将 epiData = HWREG( 0xA0000000 );更改为 epiData = HWREG( 0x400D0070 );

    当运行时、它应该在以下测试图形之间切换时、始终读取0x60261C82。

    const uint32_t EPI_data_pattern[ 2 ]=
    {
    0xAA55AA55、
    0x55AA55AA
    };

    能否确认您已在通用模式下使用 EPI 总线?  我们在解决这个问题方面没有取得任何进展。  请说明您已经通过提供一些工作示例代码完成了在通用模式下使用 EPI 进行的测试。

    我还在 E2E 设计支持论坛"TM4C1294 EPI GPIO Mode "中尝试了建议的更改。  这表明需要 在 MAP_EPIConfigGPModeSet API 中使用 EPI_GPMODE_CLKPIN。  这也不起作用、但它提供了在两个值之间循环的值、尽管这不是预期的数据模式。  如果 Amit 仍在 TI 工作、你能否和他核实一下如何解决这个问题?

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

    能否确认您已在通用模式下使用 EPI 总线?  我们在解决这个问题方面没有取得任何进展。  请说明您已经通过提供一些工作示例代码完成了在通用模式下使用 EPI 进行的测试。

    我还在 E2E 设计支持论坛"TM4C1294 EPI GPIO Mode "中尝试了建议的更改。  这表明需要 在 MAP_EPIConfigGPModeSet API 中使用 EPI_GPMODE_CLKPIN。  这也不起作用、但它提供了在两个值之间循环的值、尽管这不是预期的数据模式。  如果 Amit 仍在 TI 工作、你能否和他核实一下如何解决这个问题?

    [/报价]

    Patrick、您好!

     我完全理解你的沮丧。 阿米特早已离开了这个团体。 我自己以前没有使用过通用模式、而且 除了 LaunchPad、我还没有可以通过 EPI GPIO 模式轻松与外部器件进行通信的电路板。  

     您能显示您的整个 EPI 模块寄存器转储吗? 或者、如果您不介意、可以将包含代码的整个主文件发送给我、以便我可以自己运行。 我想看看我是否可以根据规格理解寄存器设置。 实际上、在 GPIO 模式下使用时、数据表没有明确地址和时钟设置。  

     我在 Amit 和另一张海报之间找到了另外一篇关于 GPIO 模式的文章。 不确定你是否见过这个。 海报似乎解决了问题。

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/553692/configuring-epi-for-gpio-mode/2024408?tisearch=e2e-sitesearch&keymatch=TM4C1294%2520EPI%2520GPIO%2520Mode#2024408

    下面的这个也可能值得阅读。  

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/547978/write-16-bits-in-epi-gpio-mode-no-address-bits---no-clock-output/2068338?tisearch=e2e-sitesearch&keymatch=TM4C1294%252520EPI%252520GPIO%252520Mode#2068338

     

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

    如何将代码文件发送给您?  我没有看到任何附加文件的选项。

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

    您只需将文件拖动到编辑窗口中即可。  

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

    e2e.ti.com/.../epiTest.ce2e.ti.com/.../epiTestPinMap.h

    请查看随附的程序和头文件。  在当前配置下、我在偶数索引上接收到0x256、在奇 数索引上接收到0x512、在偶数索引上接收到0xAA55AA55、 在奇数索引上接收到0x55AA55AA。

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

    Patrick、您好!

     我发现您的引脚配置有一个主要问题。 我之前要求您检查 PCTL 寄存器、您说它们是正确的。 我运行代码时、未正确对 PCTL 寄存器进行编程。 下面我选择一行解释。

    EPI0引脚配置如下行。

    MAP_GPIOPinConfigure (EPI0_SIGNAL_27_PB2);//将各个端口引脚分配至 EPI 总线

    将 EPI0_SIGNAL_27_PB2重新定义为 GPIO_PIN_2  、这完全错误。  

    枚举端口 B_pinMap_e
    {
    USB0_ID_PB0 = GPIO_PIN_0、  
    EPI0_SIGNAL_27_PB2 = GPIO_PIN_2、
    EPI0_SIGNAL_28_PB3 = GPIO_PIN_3、
    QSPI1_ENABLE_PB4 = GPIO_PIN_4、  
    QSPI1_CLK_PB5 = GPIO_PIN_5  

    如果您看看 GPIO_PIN_2的定义、它等于0x00000004。  

    #define GPIO_PIN_0 0x00000001 // GPIO 引脚0
    #define GPIO_PIN_1 0x00000002 // GPIO 引脚1
    #define GPIO_PIN_2 0x00000004 // GPIO 引脚2
    #define GPIO_PIN_3 0x00000008 // GPIO 引脚3
    #define GPIO_PIN_4 0x00000010 // GPIO 引脚4
    #define GPIO_PIN_5 0x00000020 // GPIO 引脚5
    #define GPIO_PIN_6 0x00000040 // GPIO 引脚6
    #define GPIO_PIN_7 0x00000080 // GPIO 引脚7

    但是:

    如果您使用  TivaWare 中预定义的引脚宏 GPIO_PB2_EPI0S27、那么您不会有问题。  GPIO_PB2_EPI0S27  等于0x0001080F。 下半字节的值 F 用于通过 F 对 PCTL 进行编程。这是为了选择第15引脚多路复用器选项。 显然 0x00000004 不等于 0x0001080F。 您需要 首先修复所有 MAP_GPIOPinConfigure 问题。  

    MAP_GPIOPinConfigure (GPIO_PB2_EPI0S27);

    #define GPIO_PB2_T5CCP0 0x00010803
    #define GPIO_PB2_I2C0SCL 0x00010802
    #define GPIO_PB2_USB0STP 0x0001080E
    #define GPIO_PB2_EPI0S27 0x0001080F

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

    e2e.ti.com/.../4274.epiTest.ce2e.ti.com/.../4274.epiTestPinMap.h

    没错、此错误是在调试期间的多次迭代过程中引入的。  当我确认 PCTL 的内容时、设置正确。  我已附上更新的计划。  现在、 在使用 CLKPIN 时、结果始终显示为2147483648、 在不使用 CLKPIN 时显示为170。  但仍然无法按预期工作。  请告诉我、您是否能发现可能妨碍此功能正常运行的任何其他错误。

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

    Patrick、您好!

     我没有您的电路板使用 OUTPUT_EPI0_CTS_PM5和 INPUT_EPI0_RTS_INT_PP0进行握手来与 FPGA 连接。 因此,我用下面的代码注释掉大多数 testepi()。 我在 LaunchPad 上对其进行测试。 我将 EPI0S0 (PH0)和 EPI0S1 (PH1)连接至3.3V、并且可以看到 epiData 等于0x80000003。  我可以看到位0和位1是正确的。 为什么不试试?

     请注意一周其余时间的重大美国假期、并预计会延迟回复。  

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    static void testEPI( void )
    {
    uint32_t inx,
    #ifdef BIT_BANG
    inputPins,
    #endif
    epiData;
    int i = 0;
    while (1){
    for (i=0;i<100;i++);
    epiData = HWREG( EPI_PORT ); // Read the FPGA data from EPI bus
    }
    // for( inx = 0 ; inx < 100 ; inx++ )
    // {
    // updateOutputState( GPIO_PORTM_BASE, OUTPUT_EPI0_CTS_PM5, ENABLE_OUTPUT ); // Set read ack to false while reading data
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    Patrick、您好!

     我没有您的电路板使用 OUTPUT_EPI0_CTS_PM5和 INPUT_EPI0_RTS_INT_PP0进行握手来与 FPGA 连接。 因此,我用下面的代码注释掉大多数 testepi()。 我在 LaunchPad 上对其进行测试。 我将 EPI0S0 (PH0)和 EPI0S1 (PH1)连接至3.3V、并且可以看到 epiData 等于0x80000003。  我可以看到位0和位1是正确的。 为什么不试试?

     请注意一周其余时间的重大美国假期、并预计会延迟回复。  

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    static void testEPI( void )
    {
    uint32_t inx,
    #ifdef BIT_BANG
    inputPins,
    #endif
    epiData;
    int i = 0;
    while (1){
    for (i=0;i<100;i++);
    epiData = HWREG( EPI_PORT ); // Read the FPGA data from EPI bus
    }
    // for( inx = 0 ; inx < 100 ; inx++ )
    // {
    // updateOutputState( GPIO_PORTM_BASE, OUTPUT_EPI0_CTS_PM5, ENABLE_OUTPUT ); // Set read ack to false while reading data
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    更新了一些。  

    我将 EPI0S31 (PK5)连接到0、将 EPI0S0和 EPI0S1连接到1。 我看到 epiData= 0x00000003。