Hello,
we are using the F28M35H52C1 and want to work with the EPI peripheral and need your help.
Situation in short: 16 data bits, no addressing, no output only input, no need for a synchronize
At the moment we don't get any result from EPI. Using the 16 EPI Pins (EPI0 ... EPI15) as simple input via GPIO, we could read the data.
Actual configuration:
SysCtlPeripheralEnable(SYSCTL_PERIPH_EPI0); GPIOPinConfigure(GPIO_PCTL_PH3_EPI0S0); GPIODirModeSet(GPIO_PORTH_BASE, GPIO_PIN_3, GPIO_DIR_MODE_IN); GPIOPadConfigSet(GPIO_PORTH_BASE, GPIO_PIN_3, GPIO_PIN_TYPE_OD_WPU); GPIOPinConfigure(GPIO_PCTL_PH2_EPI0S1); GPIODirModeSet(GPIO_PORTH_BASE, GPIO_PIN_2, GPIO_DIR_MODE_IN); GPIOPadConfigSet(GPIO_PORTH_BASE, GPIO_PIN_2, GPIO_PIN_TYPE_OD_WPU); GPIOPinConfigure(GPIO_PCTL_PC4_EPI0S2); GPIODirModeSet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_DIR_MODE_IN); GPIOPadConfigSet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_PIN_TYPE_OD_WPU); GPIOPinConfigure(GPIO_PCTL_PC5_EPI0S3); GPIODirModeSet(GPIO_PORTC_BASE, GPIO_PIN_5, GPIO_DIR_MODE_IN); GPIOPadConfigSet(GPIO_PORTC_BASE, GPIO_PIN_5, GPIO_PIN_TYPE_OD_WPU); GPIOPinConfigure(GPIO_PCTL_PC6_EPI0S4); GPIODirModeSet(GPIO_PORTC_BASE, GPIO_PIN_6, GPIO_DIR_MODE_IN); GPIOPadConfigSet(GPIO_PORTC_BASE, GPIO_PIN_6, GPIO_PIN_TYPE_OD_WPU); GPIOPinConfigure(GPIO_PCTL_PC7_EPI0S5); GPIODirModeSet(GPIO_PORTC_BASE, GPIO_PIN_7, GPIO_DIR_MODE_IN); GPIOPadConfigSet(GPIO_PORTC_BASE, GPIO_PIN_7, GPIO_PIN_TYPE_OD_WPU); GPIOPinConfigure(GPIO_PCTL_PH0_EPI0S6); GPIODirModeSet(GPIO_PORTH_BASE, GPIO_PIN_0, GPIO_DIR_MODE_IN); GPIOPadConfigSet(GPIO_PORTH_BASE, GPIO_PIN_0, GPIO_PIN_TYPE_OD_WPU); GPIOPinConfigure(GPIO_PCTL_PH1_EPI0S7); GPIODirModeSet(GPIO_PORTH_BASE, GPIO_PIN_1, GPIO_DIR_MODE_IN); GPIOPadConfigSet(GPIO_PORTH_BASE, GPIO_PIN_1, GPIO_PIN_TYPE_OD_WPU); GPIOPinConfigure(GPIO_PCTL_PE0_EPI0S8); GPIODirModeSet(GPIO_PORTE_BASE, GPIO_PIN_0, GPIO_DIR_MODE_IN); GPIOPadConfigSet(GPIO_PORTE_BASE, GPIO_PIN_0, GPIO_PIN_TYPE_OD_WPU); GPIOPinConfigure(GPIO_PCTL_PE1_EPI0S9); GPIODirModeSet(GPIO_PORTE_BASE, GPIO_PIN_1, GPIO_DIR_MODE_IN); GPIOPadConfigSet(GPIO_PORTE_BASE, GPIO_PIN_1, GPIO_PIN_TYPE_OD_WPU); GPIOPinConfigure(GPIO_PCTL_PH4_EPI0S10); GPIODirModeSet(GPIO_PORTH_BASE, GPIO_PIN_4, GPIO_DIR_MODE_IN); GPIOPadConfigSet(GPIO_PORTH_BASE, GPIO_PIN_4, GPIO_PIN_TYPE_OD_WPU); GPIOPinConfigure(GPIO_PCTL_PH5_EPI0S11); GPIODirModeSet(GPIO_PORTH_BASE, GPIO_PIN_5, GPIO_DIR_MODE_IN); GPIOPadConfigSet(GPIO_PORTH_BASE, GPIO_PIN_5, GPIO_PIN_TYPE_OD_WPU); GPIOPinConfigure(GPIO_PCTL_PF4_EPI0S12); GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_DIR_MODE_IN); GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_PIN_TYPE_OD_WPU); GPIOPinConfigure(GPIO_PCTL_PG0_EPI0S13); GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_0, GPIO_DIR_MODE_IN); GPIOPadConfigSet(GPIO_PORTG_BASE, GPIO_PIN_0, GPIO_PIN_TYPE_OD_WPU); GPIOPinConfigure(GPIO_PCTL_PG1_EPI0S14); GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_1, GPIO_DIR_MODE_IN); GPIOPadConfigSet(GPIO_PORTG_BASE, GPIO_PIN_1, GPIO_PIN_TYPE_OD_WPU); GPIOPinConfigure(GPIO_PCTL_PF5_EPI0S15); GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_5, GPIO_DIR_MODE_IN); GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_5, GPIO_PIN_TYPE_OD_WPU); EPIDividerSet(EPI0_BASE, 1); EPIModeSet(EPI0_BASE, EPI_MODE_GENERAL);
EPIAddressMapSet(EPI0_BASE, EPI_ADDR_PER_BASE_A | EPI_ADDR_PER_SIZE_256B); EPIConfigGPModeSet(EPI0_BASE, EPI_GPMODE_READ2CYCLE | EPI_GPMODE_ASIZE_NONE | EPI_GPMODE_DSIZE_16, 0, 0); while(HWREG(EPI0_BASE + EPI_O_STAT) & EPI_STAT_INITSEQ) { }
At first we used GPIO_DIR_MODE_HW and GPIO_PIN_TYPE_STD_WPU instead GPIO_DIR_MODE_IN and GPIO_PIN_TYPE_OD_WPU but that lead us to a high current consumption as soon as our external device set some pins. As we only need input and never write something to the connected device, we set config as input. With this configuration we have no current problem. Would this work or have we set GPIO_DIR_MODE_HW and GPIO_PIN_TYPE_STD_WPU for EPI to work?
Our test function for reading the EPI data looks like this:
void EPI_readtest() {
unsigned long address;
unsigned short *XMEM_ps;
unsigned short result;
address = 0xA0000000;
XMEM_ps = (unsigned short *)address;
result= *XMEM_ps;
}
At the moment the result is always 0 and never the expected value.
Can you please help us to find our error?
Best regards
Mathias