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.

TM4C1290NCPDT: I do not see the EPI data or address line toggle. Where did it go wrong?

Part Number: TM4C1290NCPDT

With the EPI peripheral setup as follows:

    //
    // Enable all the GPIO peripherals.
    //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOJ);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOK);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOL);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOM);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPION);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOP);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOQ);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOR);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOS);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOT);

    //
    // Init. EPI0 Bus (General Purpose) (16 bits Data [0..15] + 12 bits Addr [16..27], WR[28], RD[29], FRAME[30], CLK[31])
    //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_EPI0);
    // Wait for GPIO change
    //while(SysCtlPeripheralReady(SYSCTL_PERIPH_EPI0)){};
	GPIOPinConfigure(GPIO_PK0_EPI0S0); // PK0 18 / PH0 29  D0
	GPIOPinConfigure(GPIO_PK1_EPI0S1); // PK1 19 / PH1 30  D1
	GPIOPinConfigure(GPIO_PK2_EPI0S2); // PK2 20 / PH2 31  D2
	GPIOPinConfigure(GPIO_PK3_EPI0S3); // PK3 21 / PH3 32  D3
	GPIOPinConfigure(GPIO_PK7_EPI0S24); // PK7 59   A8
	GPIOPinConfigure(GPIO_PK6_EPI0S25); // PK6 60   A9
	GPIOPinConfigure(GPIO_PK5_EPI0S31); // PK5 61 CLK
	GPIOPinTypeEPI(GPIO_PORTK_BASE, EPI_PORTK_PINS);
	GPIOPinConfigure(GPIO_PC7_EPI0S4); // PC7 22 D4
	GPIOPinConfigure(GPIO_PC6_EPI0S5); // PC6 23 D5
	GPIOPinConfigure(GPIO_PC5_EPI0S6); // PC5 24 D6
	GPIOPinConfigure(GPIO_PC4_EPI0S7); // PC4 25 D7
	GPIOPinTypeEPI(GPIO_PORTC_BASE, EPI_PORTC_PINS);
    GPIOPinConfigure(GPIO_PA6_EPI0S8); // PA8 40 D8
    GPIOPinConfigure(GPIO_PA7_EPI0S9); // PA9 41 D9
	GPIOPinTypeEPI(GPIO_PORTA_BASE, EPI_PORTA_PINS);
	GPIOPinConfigure(GPIO_PG1_EPI0S10); // PG1 50 D10
	GPIOPinConfigure(GPIO_PG0_EPI0S11); // PG0 49 D11
	GPIOPinTypeEPI(GPIO_PORTG_BASE, EPI_PORTG_PINS);
	GPIOPinConfigure(GPIO_PM3_EPI0S12); // PM3 75 D12
	GPIOPinConfigure(GPIO_PM2_EPI0S13); // PM2 22 D13
	GPIOPinConfigure(GPIO_PM1_EPI0S14); // PM1 22 D14
	GPIOPinConfigure(GPIO_PM0_EPI0S15); // PM0 22 D15
	GPIOPinTypeEPI(GPIO_PORTM_BASE, EPI_PORTM_PINS);
	GPIOPinConfigure(GPIO_PL0_EPI0S16); // PL0 81 A0 
	GPIOPinConfigure(GPIO_PL1_EPI0S17); // PL1 82 A1 
	GPIOPinConfigure(GPIO_PL2_EPI0S18); // PL2 83 A2 
	GPIOPinConfigure(GPIO_PL3_EPI0S19); // PL3 84 A3 
	GPIOPinConfigure(GPIO_PL4_EPI0S26); // PL4 84 A10
	GPIOPinTypeEPI(GPIO_PORTL_BASE, EPI_PORTL_PINS);
	GPIOPinConfigure(GPIO_PQ0_EPI0S20); // PQ0 05 A4 
	GPIOPinConfigure(GPIO_PQ1_EPI0S21); // PQ1 06 A5 
	GPIOPinConfigure(GPIO_PQ2_EPI0S22); // PQ2 11 A6 
	GPIOPinConfigure(GPIO_PQ3_EPI0S23); // PQ3 27 A7 
	GPIOPinTypeEPI(GPIO_PORTL_BASE, EPI_PORTL_PINS);
	GPIOPinConfigure(GPIO_PB2_EPI0S27); // pin 91 A11
	GPIOPinConfigure(GPIO_PB3_EPI0S28); // pin 92 /WE (/rd hb16)
	GPIOPinTypeEPI(GPIO_PORTB_BASE, EPI_PORTB_PINS);
    
	GPIOPinConfigure(GPIO_PP2_EPI0S29); // pin    GPIO RD (HB16 /WR) 
	//GPIOPinConfigure(GPIO_PP3_EPI0S30); // pin 22 D5
	GPIOPinTypeEPI(GPIO_PORTP_BASE, EPI_PORTP_PINS);

	// General Purpose Init
	EPIDividerSet(EPI0_BASE, 0x00000000);		// 0x00010001 1/2 (System) = 120MHz * 0.5 = 60MHz
	EPIModeSet(EPI0_BASE, EPI_MODE_HB16 );	// General Purpose
	EPIConfigHB16Set(EPI0_BASE, 
                       EPI_HB16_MODE_ADDEMUX | // sets up data and address as separate, D[15:0].
                       EPI_HB16_WRWAIT_1 |   // write wait 2 EPI clocks
                       EPI_HB16_RDWAIT_1 ,   // write wait 2 EPI clocks
                       0);
    
	EPIAddressMapSet(EPI0_BASE, 
                     EPI_ADDR_PER_SIZE_64KB | 
                     EPI_ADDR_PER_BASE_C  // set base to 0xC0000000
                     );

I can see that the clock is output properly at 30.72Mhz. With the following test program:

int
main(void)
{
    volatile int32_t ui32Loop;
   //
    // Make sure the main oscillator is enabled. The system must have a 25MHz crystal attached to the OSC
    // pins. The SYSCTL_MOSC_HIGHFREQ parameter is used when the crystal
    // frequency is 10MHz or higher. SYSCTL_MOSC_SESRC for single ended osc iput (no crystal)
    //
    #if 1// CLK_EX
    SysCtlMOSCConfigSet(SYSCTL_MOSC_HIGHFREQ|SYSCTL_MOSC_SESRC  | SYSCTL_MOSC_PWR_DIS);
    SysCtlClockOutConfig(SYSCTL_CLKOUT_MOSC | SYSCTL_CLKOUT_DIS , 1);
    //SysCtlClockOutConfig(SYSCTL_CLKOUT_MOSC, 1);
    //SysCtlClockFreqSet(SYSCTL_OSC_MAIN | SYSCTL_USE_OSC , 30720000);
    SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | SYSCTL_OSC_MAIN | SYSCTL_USE_OSC), 25000000);
    //HWREG(SYSCTL_RSCLKCFG_R)=0x03300000;
    #elif 0
    #else // internal with pll
    SysCtlClockOutConfig(SYSCTL_DIVSCLK_EN | SYSCTL_DIVSCLK_SRC_PIOSC, 1);
    SysCtlClockFreqSet(SYSCTL_OSC_INT | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_240, 30720000);
    #endif
    PinoutSet();
    

    //
    // Enable the GPIO port that is used for the on-board LED.
    //
    SYSCTL_RCGCGPIO_R = SYSCTL_RCGCGPIO_R12;

    //
    // Do a dummy read to insert a few cycles after enabling the peripheral.
    //
    ui32Loop = SYSCTL_RCGCGPIO_R;

    //
    // Enable the GPIO pin for the LED (PN0).  Set the direction as output, and
    // enable the GPIO pin for digital function.
    //
    GPIO_PORTN_DIR_R = 0x01;
    GPIO_PORTN_DEN_R = 0x01;

    //
    // Loop forever.
    //
    while(1)
    {
        volatile uint16_t *paddr=(uint16_t *)0xc0000010;
        volatile readval=0;
        //
        // Turn on the LED.
        //
        GPIO_PORTN_DATA_R |= 0x01;
        *paddr=5;
        readval=*paddr;
        //
        // Delay for a bit.
        //
        int delay=200000; //200000
        for(ui32Loop = delay; ui32Loop > 0; ui32Loop--)
        {
        }

        //
        // Turn off the LED.
        //
        GPIO_PORTN_DATA_R &= ~(0x01);

        *paddr=0x0a;
        readval=*paddr;
        //
        // Delay for a bit.
        //
        for(ui32Loop = delay; ui32Loop > 0; ui32Loop--)
        {
        }
    }
}

I can see the /RD and /WR lines toggle properly, but do not see d0 or a4 toggle. Where did I go wrong?