Hi,
I am using a TM4C129NCPDT on a custom board. I have the EPI connected to an FPGA with data size 16 and address size 4.
Initial tests show that the read, write and clock signals are as expected but the address lines do not change state.
There don't seem to be many examples involving EPI - please would someone check my initialisation code, and that I have undestood how to use the EPI.
Thanks, Richard
//---------------------------------------------------------
void initEPI(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOK); //
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); //
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); //
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG); //
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOM); //
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOL); //
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); //
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOP); //
SysCtlPeripheralEnable(SYSCTL_PERIPH_EPI0);
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_EPI0)) //wait for it to be ready
{
}
MAP_GPIOPinConfigure(GPIO_PK0_EPI0S0);
GPIOPinTypeEPI(GPIO_PORTK_BASE, GPIO_PIN_0); //D0
MAP_GPIOPinConfigure(GPIO_PK1_EPI0S1);
GPIOPinTypeEPI(GPIO_PORTK_BASE, GPIO_PIN_1); //D1
MAP_GPIOPinConfigure(GPIO_PK2_EPI0S2);
GPIOPinTypeEPI(GPIO_PORTK_BASE, GPIO_PIN_2); //D2
MAP_GPIOPinConfigure(GPIO_PK3_EPI0S3);
GPIOPinTypeEPI(GPIO_PORTK_BASE, GPIO_PIN_3); //D3
MAP_GPIOPinConfigure(GPIO_PC7_EPI0S4);
GPIOPinTypeEPI(GPIO_PORTC_BASE, GPIO_PIN_7); //D4
MAP_GPIOPinConfigure(GPIO_PC6_EPI0S5);
GPIOPinTypeEPI(GPIO_PORTC_BASE, GPIO_PIN_6); //D5
MAP_GPIOPinConfigure(GPIO_PC5_EPI0S6);
GPIOPinTypeEPI(GPIO_PORTC_BASE, GPIO_PIN_5); //D6
MAP_GPIOPinConfigure(GPIO_PC4_EPI0S7);
GPIOPinTypeEPI(GPIO_PORTC_BASE, GPIO_PIN_4); //D7
MAP_GPIOPinConfigure(GPIO_PA6_EPI0S8);
GPIOPinTypeEPI(GPIO_PORTA_BASE, GPIO_PIN_6); //D8
MAP_GPIOPinConfigure(GPIO_PA7_EPI0S9);
GPIOPinTypeEPI(GPIO_PORTA_BASE, GPIO_PIN_7); //D9
MAP_GPIOPinConfigure(GPIO_PG1_EPI0S10);
GPIOPinTypeEPI(GPIO_PORTG_BASE, GPIO_PIN_1); //D10
MAP_GPIOPinConfigure(GPIO_PG0_EPI0S11);
GPIOPinTypeEPI(GPIO_PORTG_BASE, GPIO_PIN_0); //D11
MAP_GPIOPinConfigure(GPIO_PM3_EPI0S12);
GPIOPinTypeEPI(GPIO_PORTM_BASE, GPIO_PIN_3); //D12
MAP_GPIOPinConfigure(GPIO_PM2_EPI0S13);
GPIOPinTypeEPI(GPIO_PORTM_BASE, GPIO_PIN_2); //D13
MAP_GPIOPinConfigure(GPIO_PM1_EPI0S14);
GPIOPinTypeEPI(GPIO_PORTM_BASE, GPIO_PIN_1); //D14
MAP_GPIOPinConfigure(GPIO_PM0_EPI0S15);
GPIOPinTypeEPI(GPIO_PORTM_BASE, GPIO_PIN_0); //D15
MAP_GPIOPinConfigure(GPIO_PL0_EPI0S16);
GPIOPinTypeEPI(GPIO_PORTL_BASE, GPIO_PIN_0); //A0
MAP_GPIOPinConfigure(GPIO_PL1_EPI0S17);
GPIOPinTypeEPI(GPIO_PORTL_BASE, GPIO_PIN_1); //A1
MAP_GPIOPinConfigure(GPIO_PL2_EPI0S18);
GPIOPinTypeEPI(GPIO_PORTL_BASE, GPIO_PIN_2); //A2
MAP_GPIOPinConfigure(GPIO_PL3_EPI0S19);
GPIOPinTypeEPI(GPIO_PORTL_BASE, GPIO_PIN_3); //A3
MAP_GPIOPinConfigure(GPIO_PB3_EPI0S28);
GPIOPinTypeEPI(GPIO_PORTB_BASE, GPIO_PIN_3); //WR
MAP_GPIOPinConfigure(GPIO_PP2_EPI0S29);
GPIOPinTypeEPI(GPIO_PORTP_BASE, GPIO_PIN_2); //RD
MAP_GPIOPinConfigure(GPIO_PK5_EPI0S31);
GPIOPinTypeEPI(GPIO_PORTK_BASE, GPIO_PIN_5); //CLK
EPIModeSet(EPI0_BASE, EPI_MODE_GENERAL); //general mode
EPIDividerSet(EPI0_BASE, 10); //1=60MHz, 10=10MHz, 119=1MHz
EPIConfigGPModeSet(EPI0_BASE,
EPI_GPMODE_CLKPIN | //interface clock is output on a pin
EPI_GPMODE_CLKGATE | //clock is stopped when there is no transaction
// EPI_GPMODE_FRAME50 | //frame 50:50 - not using frame signal
// EPI_GPMODE_WRITE2CYCLE | //two cycle write - single cycle write
EPI_GPMODE_ASIZE_4 | //address bus size of 4 bits
EPI_GPMODE_DSIZE_16, //data bus size of 16 bits
0, //frame 0
0); //parameter not used
EPIAddressMapSet(EPI0_BASE,
EPI_ADDR_PER_SIZE_256B | //only 16 needed
EPI_ADDR_PER_BASE_C); //EPI0 is mapped from 0xC0000000 to 0xC00000FF.
} //initEPI()
//and to use the EPI....... //--------------------------------------------------------- uint16_t * EPIfpga = (uint16_t *)0xC0000000; uint16_t sr; //to read an fpga register... sr = EPIfpga[2]; //to write an fpga register... EPIfpga[2] = 0x2A27;