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.

TMS320F28379D: Interfacing with DS1747

Part Number: TMS320F28379D
Other Parts Discussed in Thread: C2000WARE

Hi Experts,

Seeking your assistance:

I have connected DS1747 with TMS320F28379D. I have used CS2 chip select:

Connection schematic is given below:

I have also attached sample code which I am using. I am unable to set RTC and Read RTC.

Please let me know what should be the correct address to set RTC registers.

Thank you.

Regards,
Archie A.

//#############################################################################
//
// FILE:   emif_ex1_16bit_asram.c
//
// TITLE:  EMIF1 ASYNC module accessing 16bit ASRAM.
//
//! \addtogroup driver_example_list
//! <h1> EMIF1 ASYNC module accessing 16bit ASRAM. </h1>
//!
//! This example configures EMIF1 in 16bit ASYNC mode and uses CS2 as chip
//! enable.
//!
//! \b External \b Connections \n
//!  - External ASRAM memory (CY7C1041CV33 -10ZSXA) daughter card
//!
//! \b Watch \b Variables \n
//! - \b testStatusGlobal - Equivalent to \b TEST_PASS if test finished
//!                         correctly, else the value is set to \b TEST_FAIL
//! - \b errCountGlobal - Error counter
//!
//
//#############################################################################
//
// $Release Date: $
// $Copyright:
// Copyright (C) 2013-2022 Texas Instruments Incorporated - http://www.ti.com/
//
// Redistribution and use in source and binary forms, with or without 
// modification, are permitted provided that the following conditions 
// are met:
// 
//   Redistributions of source code must retain the above copyright 
//   notice, this list of conditions and the following disclaimer.
// 
//   Redistributions in binary form must reproduce the above copyright
//   notice, this list of conditions and the following disclaimer in the 
//   documentation and/or other materials provided with the   
//   distribution.
// 
//   Neither the name of Texas Instruments Incorporated nor the names of
//   its contributors may be used to endorse or promote products derived
//   from this software without specific prior written permission.
// 
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// $
//#############################################################################

//
// Included Files
//
#include "device.h"
#include "driverlib.h"

//
// Defines
//
#define TEST_PASS 0xABCDABCD
#define TEST_FAIL 0xDEADDEAD
#define ASRAM_CS2_START_ADDR 0x100000
#define ASRAM_CS2_SIZE 0x8000


//#define RTC_RAM         0x080000        /* address ~0x0ffffe */
#define CLOCK           0x7fff0
#define YY                  ASRAM_CS2_START_ADDR+CLOCK+0x0f
#define MM                  ASRAM_CS2_START_ADDR+CLOCK+0x0e
#define DD                  ASRAM_CS2_START_ADDR+CLOCK+0x0d
#define DY                  ASRAM_CS2_START_ADDR+CLOCK+0x0c
#define HH                  ASRAM_CS2_START_ADDR+CLOCK+0x0b
#define MN                  ASRAM_CS2_START_ADDR+CLOCK+0x0a
#define SS                  ASRAM_CS2_START_ADDR+CLOCK+0x09
#define CONT                ASRAM_CS2_START_ADDR+CLOCK+0x08
/*
#define YY              *((unsigned int *) RTC_RAM+CLOCK+0x0f)
#define MM              *((unsigned int *) RTC_RAM+CLOCK+0x0e)
#define DD              *((unsigned int *) RTC_RAM+CLOCK+0x0d)
#define HH              *((unsigned int *) RTC_RAM+CLOCK+0x0b)
#define MN              *((unsigned int *) RTC_RAM+CLOCK+0x0a)
#define SS              *((unsigned int *) RTC_RAM+CLOCK+0x09)
#define CONT            *((unsigned int *) RTC_RAM+CLOCK+0x08)
*/




//
// Globals
//
uint16_t errCountGlobal = 0;
uint32_t testStatusGlobal;
uint32_t i;

//
// Function Prototypes
//
extern void setupEMIF1PinmuxAsync16Bit(void);
extern void setupEMIF1PinmuxAsync8Bit(void);                    // Added this line
uint16_t readWriteMem(uint32_t startAddr, uint32_t memSize);
uint16_t walkMemData(uint32_t startAddr, uint32_t memSize);
uint16_t walkMemAddr(uint32_t startAddr, uint32_t addrSize);
uint16_t accessMemData(uint32_t startAddr, uint32_t sizeToCheck);

//
// Main
//
void main(void)
{
    //unsigned int yearvar;
    uint16_t errCountLocal;
    EMIF_AsyncTimingParams tparam;
    testStatusGlobal = TEST_FAIL;
   // yearvar=YY;
    //
    // Initialize device clock and peripherals.
    //
    Device_init();

    //
    // Disable all the interrupts.
    //
    DINT;

    //
    // Setup GPIO by disabling pin locks and enabling pullups.
    //
    Device_initGPIO();

    //
    // Initialize PIE and clear PIE registers. Disables CPU interrupts.
    //
    Interrupt_initModule();

    //
    // Initialize the PIE vector table with pointers to the shell Interrupt
    // Service Routines (ISR).
    //
    Interrupt_initVectorTable();

    //
    // Configure to run EMIF1 on full Rate. (EMIF1CLK = CPU1SYSCLK)
    //
    SysCtl_setEMIF1ClockDivider(SYSCTL_EMIF1CLK_DIV_1);

    //
    // Grab EMIF1 For CPU1.
    //
    EMIF_selectMaster(EMIF1CONFIG_BASE, EMIF_MASTER_CPU1_G);

    //
    // Disable Access Protection. (CPU_FETCH/CPU_WR/DMA_WR)
    //
    EMIF_setAccessProtection(EMIF1CONFIG_BASE, 0x0);

    //
    // Commit the configuration related to protection. Till this bit remains
    // set, contents of EMIF1ACCPROT0 register can't be changed.
    //
    EMIF_commitAccessConfig(EMIF1CONFIG_BASE);

    //
    // Lock the configuration so that EMIF1COMMIT register can't be changed
    // any more.
    //
    EMIF_lockAccessConfig(EMIF1CONFIG_BASE);

    //
    // Configure GPIO pins for EMIF1.
    //
   // setupEMIF1PinmuxAsync16Bit();     // function commented by skg
    setupEMIF1PinmuxAsync8Bit();        // function added by skg as made it for 8 bit from 16 bit

    //
    // Configures Normal Asynchronous Mode of Operation.
    //
    EMIF_setAsyncMode(EMIF1_BASE, EMIF_ASYNC_CS2_OFFSET,
                      EMIF_ASYNC_NORMAL_MODE);

    //
    // Disables Extended Wait Mode.
    //
    EMIF_disableAsyncExtendedWait(EMIF1_BASE, EMIF_ASYNC_CS2_OFFSET);

    //
    // Configure EMIF1 Data Bus Width.
    //
    /*
     EMIF_setAsyncDataBusWidth(EMIF1_BASE, EMIF_ASYNC_CS2_OFFSET,       // function commented by skg
                              EMIF_ASYNC_DATA_WIDTH_16);*/

    EMIF_setAsyncDataBusWidth(EMIF1_BASE, EMIF_ASYNC_CS2_OFFSET,        // function added by skg as changed data width from 16 to 8
                              EMIF_ASYNC_DATA_WIDTH_8);


    //
    // Configure the access timing for CS2 space.
    //
   /* tparam.rSetup = 0;
    tparam.rStrobe = 3;
    tparam.rHold = 0;
    tparam.turnArnd = 0;
    tparam.wSetup = 0;
    tparam.wStrobe = 1;
    tparam.wHold = 0;*/

   tparam.rSetup = 100;
        tparam.rStrobe = 100;
        tparam.rHold = 20;
        tparam.turnArnd = 100;
        tparam.wSetup = 100;
        tparam.wStrobe = 80;
        tparam.wHold = 20;
    EMIF_setAsyncTimingParams(EMIF1_BASE, EMIF_ASYNC_CS2_OFFSET, &tparam);

    //
    // Checks basic RD/WR access to CS2 space.
    //
    //CONT=0x80;
     //   YY=0x21;

   // CONT=0x00;
   // yearvar=YY;
    while(1)
    {
   errCountLocal = readWriteMem(CONT, 1);
       errCountGlobal = errCountGlobal + errCountLocal;
  //  errCountLocal = readWriteMem(ASRAM_CS2_START_ADDR, ASRAM_CS2_SIZE);
    //errCountGlobal = errCountGlobal + errCountLocal;
    }

    //
    // Address walk checks. (Tested for Memory with address width of 16bit)
    //
    errCountLocal = walkMemAddr(ASRAM_CS2_START_ADDR, 16);
    errCountGlobal = errCountGlobal + errCountLocal;

    //
    // Data walk checks.
    //
    errCountLocal = walkMemData(ASRAM_CS2_START_ADDR, ASRAM_CS2_SIZE);
    errCountGlobal = errCountGlobal + errCountLocal;

    //
    // Data size checks.
    //
    errCountLocal = accessMemData(ASRAM_CS2_START_ADDR, 4);
    errCountGlobal = errCountGlobal + errCountLocal;

    if(errCountGlobal == 0x0)
    {
        testStatusGlobal = TEST_PASS;
    }
    while(1);
}

//
// Read Write Memory - This function performs simple read/write word accesses
// to memory.
//
uint16_t readWriteMem(uint32_t startAddr, uint32_t memSize)
{
    uint32_t memReadData;
    uint32_t memWriteData;
    uint32_t memReadDataHH,memReadDataMM,memReadDataSS,memReadDataMN,memReadDataDY,memReadDataCY;
    uint32_t *memPtr;
    uint32_t i;

    memPtr = (uint32_t *)startAddr;

    //
    // Write data to memory.
    //
    memPtr=(uint32_t *)(CONT);
    *memPtr = 0x80;
   // memPtr= (uint32_t *)(MN);
    // *memPtr=9;
    // memPtr= (uint32_t *)(SS);
    //      *memPtr=0x85;

   // *memPtr = 0x33;
     memPtr=(uint32_t *)(CONT);
     *memPtr=0x40;
    memReadDataCY = *memPtr;
    memPtr= (uint32_t *)(SS);
    memReadDataSS = *memPtr;
    memPtr= (uint32_t *)(MN);
    memReadDataMN = *memPtr;
    memPtr=(uint32_t *)(CONT);
    *memPtr=0x20;
   // *memPtr=05;
   //memPtr=(uint32_t *)(CONT);



   // memPtr= (uint32_t *)(DY);
    //    *memPtr=01;

    //for(i = 0; i < memSize; i++)
    /*{
        *memPtr = memWriteData;
        memPtr= (uint32_t *)(YY);
        *memPtr=memWriteData=22;
        memPtr= (uint32_t *)(SS);
        *memPtr=5;
        memPtr= (uint32_t *)(MM);
        *memPtr=9;
        memPtr= (uint32_t *)(MN);
        *memPtr=5;
         memPtr= (uint32_t *)(HH);
         *memPtr=memWriteData=17;
        memPtr= (uint32_t *)(CONT);
        *memPtr=0x00;
        //*memPtr=0x40;
       // memWriteData += 0x11111111;
    }*/

    ///
    // Verify data written to memory.
    //
    //memWriteData = 0x21;
    //memPtr = (uint32_t *)startAddr;

//while(1)
//{
   // memPtr= (uint32_t *)(CONT);
    /*memPtr=0x40;
        memPtr = (uint32_t *)(MM);
        memReadDataMM = *memPtr;
        memPtr = (uint32_t *)(HH);
       memReadDataHH = *memPtr;
       memPtr= (uint32_t *)(MN);
       memReadDataMN = *memPtr;
       memPtr= (uint32_t *)(SS);
       memReadDataSS = *memPtr;
       memPtr= (uint32_t *)(DY);
         memReadDataDY = *memPtr;
         memPtr= (uint32_t *)(CONT);
                  memReadDataCY = *memPtr;
    //for(i = 0; i < memSize; i++)
    {
       // memReadData = *memPtr;
     //   memPtr= (uint32_t *)(CONT);
     //   *memPtr=0x00;
        if(memReadData != memWriteData)
        {
        //    return(1);
        }
        //memPtr++;
       // memWriteData += 0x11111111;
    }
}*/
    return(0);
}

//
// Walk Memory Data - This function performs a walking 0 & 1 on data lines
// for SRAM RD & WR.
//
uint16_t walkMemData(uint32_t startAddr, uint32_t memSize)
{
    uint32_t sramReadData;
    uint32_t sramWriteData;
    uint32_t i;
    uint32_t k;
    uint32_t m;
    uint32_t *memPtr;
    uint32_t *memPtrIter;

    memPtr = (uint32_t *)startAddr;

    for(i = 0; i < memSize; i = i + 64)
    {
        for(m = 0; m < 2; m++)
        {
            //
            // Write loop.
            //
            memPtrIter = memPtr;
            sramWriteData = 0x01;
            for(k = 0; k < 32; k++)
            {
                if(m == 0)
                {
                    *memPtrIter++ = sramWriteData;
                }
                else
                {
                    *memPtrIter++ = ~sramWriteData;
                }
                sramWriteData = sramWriteData << 1;
            }

            //
            // Read loop.
            //
            memPtrIter = memPtr;
            sramWriteData = 0x01;
            for(k = 0; k < 32; k++)
            {
                sramReadData = *memPtrIter;
                if(m == 1)
                {
                    sramReadData = ~sramReadData;
                }
                if(sramReadData != sramWriteData)
                {
                    return(1);
                }
                memPtrIter++;
                sramWriteData = sramWriteData << 1;
            }
        }
        memPtr = memPtrIter;
    }
    return(0);
}

//
// Walk Memory Addresses - This function performs a toggle on each address bit.
//
uint16_t walkMemAddr(uint32_t startAddr, uint32_t addrSize)
{
    uint32_t sramReadData;
    uint32_t sramWriteData;
    uint32_t k;
    uint32_t xshift;
    uint32_t *memPtr;
    uint32_t *memPtrIter;

    memPtr = (uint32_t *)startAddr;

    //
    // Write loop.
    //
    xshift = 0x00000001;
    sramWriteData = 0x00;
    for(k = 0; k < addrSize; k++)
    {
        memPtrIter = (uint32_t *)(startAddr + xshift);
        *memPtrIter = sramWriteData++;
        xshift = xshift << 1;
    }

    //
    // Read loop.
    //
    memPtrIter = memPtr;
    xshift = 0x00000001;
    sramWriteData = 0x00;
    for(k = 0; k < addrSize; k++)
    {
        memPtrIter = (uint32_t *)(startAddr + xshift);
        sramReadData = *memPtrIter;
        if(sramReadData != sramWriteData)
        {
            return(1);
        }
        xshift = xshift << 1;
        sramWriteData++;
    }
    return(0);
}

//
// Access Memory Data - This function performs different data type
// (HALFWORD/WORD) access.
//
uint16_t accessMemData(uint32_t startAddr, uint32_t sizeToCheck)
{
    uint16_t memRdShort;
    uint32_t memRdLong;
    uint16_t memWrShort;
    uint32_t memWrLong;
    uint32_t i;
    uint16_t *memPtrShort;
    uint32_t *memPtrLong;

    //
    // Write short data.
    //
    memPtrShort = (uint16_t *)startAddr;
    memWrShort = 0x0605;

    for(i = 0; i < 2; i++)
    {
        *memPtrShort++ = memWrShort;
        memWrShort += 0x0202;
    }

    //
    // Write long data.
    //
    memPtrLong = (uint32_t *)memPtrShort;
    memWrLong = 0x0C0B0A09;
    for(i = 0; i < 2; i++)
    {
        *memPtrLong++ = memWrLong;
        memWrLong += 0x04040404;
    }

    //
    // Read short data.
    //
    memPtrShort = (uint16_t *)startAddr;
    memWrShort = 0x0605;
    for(i = 0; i < 6; i++)
    {
        memRdShort = *memPtrShort;
        if(memRdShort != memWrShort)
        {
            return(1);
        }
        memPtrShort++;
        memWrShort += 0x0202;
    }

    //
    // Read long data.
    //
    memPtrLong = (uint32_t *)startAddr;
    memWrLong = 0x08070605;
    for(i = 0; i < 3; i++)
    {
        memRdLong = *memPtrLong;
        if(memRdLong != memWrLong)
        {
            return(1);
        }
        memPtrLong++;
        memWrLong += 0x04040404;
    }
    return(0);
}

//
// End of File
//

//#############################################################################
//
// FILE:   emif_asram_pin_setup.c
//
// TITLE:  Pin setup for EMIF module accessing ASRAM.
//
// This example configures pins for EMIF in ASYNC mode.
//
//
//#############################################################################
//
// $Release Date: $
// $Copyright:
// Copyright (C) 2013-2022 Texas Instruments Incorporated - http://www.ti.com/
//
// Redistribution and use in source and binary forms, with or without 
// modification, are permitted provided that the following conditions 
// are met:
// 
//   Redistributions of source code must retain the above copyright 
//   notice, this list of conditions and the following disclaimer.
// 
//   Redistributions in binary form must reproduce the above copyright
//   notice, this list of conditions and the following disclaimer in the 
//   documentation and/or other materials provided with the   
//   distribution.
// 
//   Neither the name of Texas Instruments Incorporated nor the names of
//   its contributors may be used to endorse or promote products derived
//   from this software without specific prior written permission.
// 
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// $
//#############################################################################

//
// Included Files
//
#include <stdint.h>
#include "device.h"
#include "driverlib.h"

#ifdef CPU1

//
// Function Prototypes
//
void setupEMIF1PinmuxAsync8Bit(void);
void setupEMIF1PinmuxAsync16Bit(void);
void setupEMIF1PinmuxAsync32Bit(void);
void setupEMIF2PinmuxAsync16Bit(void);

#endif
void setupEMIF1PinmuxAsync8Bit(void)         // function added by skg
{
    uint16_t i;

   /* GPIO_setPinConfig(GPIO_28_EM1CS4N);
    GPIO_setPinConfig(GPIO_29_EM1SDCKE);        
    GPIO_setPinConfig(GPIO_30_EM1CLK);*/

    GPIO_setPinConfig(GPIO_31_EM1WEN);
  /*  GPIO_setPinConfig(GPIO_32_EM1CS0N);
    GPIO_setPinConfig(GPIO_33_EM1RNW);*/
    GPIO_setPinConfig(GPIO_34_EM1CS2N);
    GPIO_setPinConfig(GPIO_35_EM1CS3N);
   // GPIO_setPinConfig(GPIO_36_EM1WAIT);*/
    GPIO_setPinConfig(GPIO_37_EM1OEN);

    //
    // Selecting address lines.
    //
    GPIO_setPinConfig(GPIO_38_EM1A0);
    GPIO_setPinConfig(GPIO_39_EM1A1);
    GPIO_setPinConfig(GPIO_40_EM1A2);
    GPIO_setPinConfig(GPIO_41_EM1A3);
    GPIO_setPinConfig(GPIO_44_EM1A4);
    GPIO_setPinConfig(GPIO_45_EM1A5);
    GPIO_setPinConfig(GPIO_46_EM1A6);
    GPIO_setPinConfig(GPIO_47_EM1A7);
    GPIO_setPinConfig(GPIO_48_EM1A8);
    GPIO_setPinConfig(GPIO_49_EM1A9);
    GPIO_setPinConfig(GPIO_50_EM1A10);
    GPIO_setPinConfig(GPIO_51_EM1A11);
    GPIO_setPinConfig(GPIO_52_EM1A12);
    GPIO_setPinConfig(GPIO_86_EM1A13);
    GPIO_setPinConfig(GPIO_87_EM1A14);

    //
    // Selecting data lines.
    //
   /* GPIO_setPinConfig(GPIO_63_EM1D21);
    GPIO_setPinConfig(GPIO_64_EM1D20);
    GPIO_setPinConfig(GPIO_65_EM1D19);
    GPIO_setPinConfig(GPIO_66_EM1D18);
    GPIO_setPinConfig(GPIO_67_EM1D17);
    GPIO_setPinConfig(GPIO_68_EM1D16);
    GPIO_setPinConfig(GPIO_69_EM1D15);
    GPIO_setPinConfig(GPIO_70_EM1D14);
    GPIO_setPinConfig(GPIO_71_EM1D13);
    GPIO_setPinConfig(GPIO_72_EM1D12);
    GPIO_setPinConfig(GPIO_73_EM1D11);
    GPIO_setPinConfig(GPIO_74_EM1D10);
    GPIO_setPinConfig(GPIO_75_EM1D9);
    GPIO_setPinConfig(GPIO_76_EM1D8);*/

    GPIO_setPinConfig(GPIO_77_EM1D7);
    GPIO_setPinConfig(GPIO_78_EM1D6);
    GPIO_setPinConfig(GPIO_79_EM1D5);
    GPIO_setPinConfig(GPIO_80_EM1D4);
    GPIO_setPinConfig(GPIO_81_EM1D3);
    GPIO_setPinConfig(GPIO_82_EM1D2);
    GPIO_setPinConfig(GPIO_83_EM1D1);
    GPIO_setPinConfig(GPIO_85_EM1D0);

    //
    // Setting DQM and Bank Select lines.
    //
    /*GPIO_setPinConfig(GPIO_88_EM1DQM0);
    GPIO_setPinConfig(GPIO_89_EM1DQM1);
    GPIO_setPinConfig(GPIO_90_EM1DQM2);
    GPIO_setPinConfig(GPIO_91_EM1DQM3);*/
    GPIO_setPinConfig(GPIO_92_EM1BA1);
    GPIO_setPinConfig(GPIO_93_EM1BA0);
   // GPIO_setPinConfig(GPIO_94_EM1A21);

    //
    // Setup async mode and enable pull-ups for Data pins.
    //
    for(i=69; i<=85;i++)
    {
        if(i != 84)
        {
            GPIO_setPadConfig(i, GPIO_PIN_TYPE_PULLUP);
            GPIO_setQualificationMode(i, GPIO_QUAL_ASYNC);
        }
    }
 }

//
// Setup EMIF1 Pinmux Async 16Bit - This function configures pins for 16 bit
// Asynchronous EMIF1.
//
void setupEMIF1PinmuxAsync16Bit(void)
{
    uint16_t i;

    GPIO_setPinConfig(GPIO_28_EM1CS4N);
    GPIO_setPinConfig(GPIO_29_EM1SDCKE);
    GPIO_setPinConfig(GPIO_30_EM1CLK);
    GPIO_setPinConfig(GPIO_31_EM1WEN);
    GPIO_setPinConfig(GPIO_32_EM1CS0N);
    GPIO_setPinConfig(GPIO_33_EM1RNW);
    GPIO_setPinConfig(GPIO_34_EM1CS2N);
    GPIO_setPinConfig(GPIO_35_EM1CS3N);
    GPIO_setPinConfig(GPIO_36_EM1WAIT);
    GPIO_setPinConfig(GPIO_37_EM1OEN);

    //
    // Selecting address lines.
    //
    GPIO_setPinConfig(GPIO_38_EM1A0);
    GPIO_setPinConfig(GPIO_39_EM1A1);
    GPIO_setPinConfig(GPIO_40_EM1A2);
    GPIO_setPinConfig(GPIO_41_EM1A3);
    GPIO_setPinConfig(GPIO_44_EM1A4);
    GPIO_setPinConfig(GPIO_45_EM1A5);
    GPIO_setPinConfig(GPIO_46_EM1A6);
    GPIO_setPinConfig(GPIO_47_EM1A7);
    GPIO_setPinConfig(GPIO_48_EM1A8);
    GPIO_setPinConfig(GPIO_49_EM1A9);
    GPIO_setPinConfig(GPIO_50_EM1A10);
    GPIO_setPinConfig(GPIO_51_EM1A11);
    GPIO_setPinConfig(GPIO_52_EM1A12);
    GPIO_setPinConfig(GPIO_86_EM1A13);
    GPIO_setPinConfig(GPIO_87_EM1A14);

    //
    // Selecting data lines.
    //
    GPIO_setPinConfig(GPIO_63_EM1D21);
    GPIO_setPinConfig(GPIO_64_EM1D20);
    GPIO_setPinConfig(GPIO_65_EM1D19);
    GPIO_setPinConfig(GPIO_66_EM1D18);
    GPIO_setPinConfig(GPIO_67_EM1D17);
    GPIO_setPinConfig(GPIO_68_EM1D16);
    GPIO_setPinConfig(GPIO_69_EM1D15);
    GPIO_setPinConfig(GPIO_70_EM1D14);
    GPIO_setPinConfig(GPIO_71_EM1D13);
    GPIO_setPinConfig(GPIO_72_EM1D12);
    GPIO_setPinConfig(GPIO_73_EM1D11);
    GPIO_setPinConfig(GPIO_74_EM1D10);
    GPIO_setPinConfig(GPIO_75_EM1D9);
    GPIO_setPinConfig(GPIO_76_EM1D8);
    GPIO_setPinConfig(GPIO_77_EM1D7);
    GPIO_setPinConfig(GPIO_78_EM1D6);
    GPIO_setPinConfig(GPIO_79_EM1D5);
    GPIO_setPinConfig(GPIO_80_EM1D4);
    GPIO_setPinConfig(GPIO_81_EM1D3);
    GPIO_setPinConfig(GPIO_82_EM1D2);
    GPIO_setPinConfig(GPIO_83_EM1D1);
    GPIO_setPinConfig(GPIO_85_EM1D0);

    //
    // Setting DQM and Bank Select lines.
    //
    GPIO_setPinConfig(GPIO_88_EM1DQM0);
    GPIO_setPinConfig(GPIO_89_EM1DQM1);
    GPIO_setPinConfig(GPIO_90_EM1DQM2);
    GPIO_setPinConfig(GPIO_91_EM1DQM3);
    GPIO_setPinConfig(GPIO_92_EM1BA1);
    GPIO_setPinConfig(GPIO_93_EM1BA0);
    GPIO_setPinConfig(GPIO_94_EM1A21);

    //
    // Setup async mode and enable pull-ups for Data pins.
    //
    for(i=69; i<=85;i++)
    {
        if(i != 84)
        {
            GPIO_setPadConfig(i, GPIO_PIN_TYPE_PULLUP);
            GPIO_setQualificationMode(i, GPIO_QUAL_ASYNC);
        }
    }
 }

//
// Setup EMIF1 Pinmux Async 32Bit - This function configures pins for 32 bit
// Asynchronous EMIF1.
//
void setupEMIF1PinmuxAsync32Bit(void)
{
    uint16_t i;

    GPIO_setPinConfig(GPIO_28_EM1CS4N);
    GPIO_setPinConfig(GPIO_29_EM1SDCKE);
    GPIO_setPinConfig(GPIO_30_EM1CLK);
    GPIO_setPinConfig(GPIO_31_EM1WEN);
    GPIO_setPinConfig(GPIO_32_EM1CS0N);
    GPIO_setPinConfig(GPIO_33_EM1RNW);
    GPIO_setPinConfig(GPIO_34_EM1CS2N);
    GPIO_setPinConfig(GPIO_35_EM1CS3N);
    GPIO_setPinConfig(GPIO_36_EM1WAIT);
    GPIO_setPinConfig(GPIO_37_EM1OEN);

    //
    // Selecting address lines.
    //
    GPIO_setPinConfig(GPIO_38_EM1A0);
    GPIO_setPinConfig(GPIO_39_EM1A1);
    GPIO_setPinConfig(GPIO_40_EM1A2);
    GPIO_setPinConfig(GPIO_41_EM1A3);
    GPIO_setPinConfig(GPIO_44_EM1A4);
    GPIO_setPinConfig(GPIO_45_EM1A5);
    GPIO_setPinConfig(GPIO_46_EM1A6);
    GPIO_setPinConfig(GPIO_47_EM1A7);
    GPIO_setPinConfig(GPIO_48_EM1A8);
    GPIO_setPinConfig(GPIO_49_EM1A9);
    GPIO_setPinConfig(GPIO_50_EM1A10);
    GPIO_setPinConfig(GPIO_51_EM1A11);
    GPIO_setPinConfig(GPIO_52_EM1A12);
    GPIO_setPinConfig(GPIO_86_EM1A13);
    GPIO_setPinConfig(GPIO_87_EM1A14);

    //
    // Selecting data lines.
    //
    GPIO_setPinConfig(GPIO_53_EM1D31);
    GPIO_setPinConfig(GPIO_54_EM1D30);
    GPIO_setPinConfig(GPIO_55_EM1D29);
    GPIO_setPinConfig(GPIO_56_EM1D28);
    GPIO_setPinConfig(GPIO_57_EM1D27);
    GPIO_setPinConfig(GPIO_58_EM1D26);
    GPIO_setPinConfig(GPIO_59_EM1D25);
    GPIO_setPinConfig(GPIO_60_EM1D24);
    GPIO_setPinConfig(GPIO_61_EM1D23);
    GPIO_setPinConfig(GPIO_62_EM1D22);
    GPIO_setPinConfig(GPIO_63_EM1D21);
    GPIO_setPinConfig(GPIO_64_EM1D20);
    GPIO_setPinConfig(GPIO_65_EM1D19);
    GPIO_setPinConfig(GPIO_66_EM1D18);
    GPIO_setPinConfig(GPIO_67_EM1D17);
    GPIO_setPinConfig(GPIO_68_EM1D16);
    GPIO_setPinConfig(GPIO_69_EM1D15);
    GPIO_setPinConfig(GPIO_70_EM1D14);
    GPIO_setPinConfig(GPIO_71_EM1D13);
    GPIO_setPinConfig(GPIO_72_EM1D12);
    GPIO_setPinConfig(GPIO_73_EM1D11);
    GPIO_setPinConfig(GPIO_74_EM1D10);
    GPIO_setPinConfig(GPIO_75_EM1D9);
    GPIO_setPinConfig(GPIO_76_EM1D8);
    GPIO_setPinConfig(GPIO_77_EM1D7);
    GPIO_setPinConfig(GPIO_78_EM1D6);
    GPIO_setPinConfig(GPIO_79_EM1D5);
    GPIO_setPinConfig(GPIO_80_EM1D4);
    GPIO_setPinConfig(GPIO_81_EM1D3);
    GPIO_setPinConfig(GPIO_82_EM1D2);
    GPIO_setPinConfig(GPIO_83_EM1D1);
    GPIO_setPinConfig(GPIO_85_EM1D0);

    //
    // Setting DQM and Bank Select lines.
    //
    GPIO_setPinConfig(GPIO_88_EM1DQM0);
    GPIO_setPinConfig(GPIO_89_EM1DQM1);
    GPIO_setPinConfig(GPIO_90_EM1DQM2);
    GPIO_setPinConfig(GPIO_91_EM1DQM3);
    GPIO_setPinConfig(GPIO_92_EM1BA1);
    GPIO_setPinConfig(GPIO_93_EM1BA0);
    GPIO_setPinConfig(GPIO_94_EM1A21);

    //
    // Setup Async Mode for Data pins.
    //
    for(i=53; i<=85;i++)
    {
        if(i != 84)
        {
            GPIO_setPadConfig(i, GPIO_PIN_TYPE_PULLUP);
            GPIO_setQualificationMode(i, GPIO_QUAL_ASYNC);
        }
    }
}

//
// Setup EMIF2 Pinmux Async 16Bit - This function configures pins for 16 bit
// Asynchronous EMIF2.
//
void setupEMIF2PinmuxAsync16Bit(void)
{
    uint16_t i;

    GPIO_setPinConfig(GPIO_96_EM2DQM1);
    GPIO_setPinConfig(GPIO_97_EM2DQM0);
    GPIO_setPinConfig(GPIO_98_EM2A0);
    GPIO_setPinConfig(GPIO_99_EM2A1);
    GPIO_setPinConfig(GPIO_100_EM2A2);
    GPIO_setPinConfig(GPIO_101_EM2A3);
    GPIO_setPinConfig(GPIO_102_EM2A4);
    GPIO_setPinConfig(GPIO_103_EM2A5);
    GPIO_setPinConfig(GPIO_104_EM2A6);
    GPIO_setPinConfig(GPIO_105_EM2A7);
    GPIO_setPinConfig(GPIO_106_EM2A8);
    GPIO_setPinConfig(GPIO_107_EM2A9);
    GPIO_setPinConfig(GPIO_108_EM2A10);
    GPIO_setPinConfig(GPIO_109_EM2A11);
    GPIO_setPinConfig(GPIO_110_EM2WAIT);
    GPIO_setPinConfig(GPIO_111_EM2BA0);
    GPIO_setPinConfig(GPIO_112_EM2BA1);
    GPIO_setPinConfig(GPIO_113_EM2CAS);
    GPIO_setPinConfig(GPIO_114_EM2RAS);
    GPIO_setPinConfig(GPIO_115_EM2CS0N);
    GPIO_setPinConfig(GPIO_116_EM2CS2N);
    GPIO_setPinConfig(GPIO_117_EM2SDCKE);
    GPIO_setPinConfig(GPIO_118_EM2CLK);
    GPIO_setPinConfig(GPIO_119_EM2RNW);
    GPIO_setPinConfig(GPIO_120_EM2WEN);
    GPIO_setPinConfig(GPIO_121_EM2OEN);

    //
    // Selecting Data lines.
    //
    GPIO_setPinConfig(GPIO_53_EM2D15);
    GPIO_setPinConfig(GPIO_54_EM2D14);
    GPIO_setPinConfig(GPIO_55_EM2D13);
    GPIO_setPinConfig(GPIO_56_EM2D12);
    GPIO_setPinConfig(GPIO_57_EM2D11);
    GPIO_setPinConfig(GPIO_58_EM2D10);
    GPIO_setPinConfig(GPIO_59_EM2D9);
    GPIO_setPinConfig(GPIO_60_EM2D8);
    GPIO_setPinConfig(GPIO_61_EM2D7);
    GPIO_setPinConfig(GPIO_62_EM2D6);
    GPIO_setPinConfig(GPIO_63_EM2D5);
    GPIO_setPinConfig(GPIO_64_EM2D4);
    GPIO_setPinConfig(GPIO_65_EM2D3);
    GPIO_setPinConfig(GPIO_66_EM2D2);
    GPIO_setPinConfig(GPIO_67_EM2D1);
    GPIO_setPinConfig(GPIO_68_EM2D0);

    //
    // Setup async mode for Data pins.
    //
    for(i=53; i<=68;i++)
    {
        GPIO_setPadConfig(i, GPIO_PIN_TYPE_PULLUP);
        GPIO_setQualificationMode(i, GPIO_QUAL_ASYNC);
    }
}

//
// End of File
//