我们将 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 );
}
}







