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.

AM5729: GPMC issue

Part Number: AM5729
Other Parts Discussed in Thread: TMDSIDK572

Hi,

I have received TMDSIDK572 eval board and checking for GPMC SDK example code check with Synchronous Multiplexed mode and probed GPMC_CLK signal at Expansion connector. But I didn’t received cock signal. Kindly help me to debug the code. 

1) Gpmc configuration – SYNC mode, SINGLE ACCESS type, Address(0:15) and data(15:0) multiplexed mode.

Here I attached my gpmc file (gpmc.txt) and MMU config (.cfg) text file. please refer this. I am reading and writing continuously through gpmc. But not getting GPMC clock.  

2) SDK – “ ti-processor-sdk-rtos-am57xx-evm-06.03.00.106-Windows-x86-Install”

3) OS – “TI-RTOS”.

/*
 *  Copyright (C) 2013-2019 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.
 *
 */
/**
 *   \file    main.c
 *
 *   \brief   GPMC test application optimized for FPGA read and write using CPU and DMA.
              Use the macros to select between synchronous/non-synchronous,
              burst/non-burst, and CPU/DMA modes. The application will perform
              reads and writes and output the benchmarks to UART terminal. The
              test will pass/fail depending on whether the benchmark numbers fall
              within the predefined bounds.
              The timing values configured in GPMC_init() can be tuned to further
              optimize your application.

              One of the following configurations can be tested at a time by defining/undefining the macros below.
              1. Synchronous Burst DMA Mode
              2. Synchronous Non-burst DMA Mode
              3. Asynchronous Burst DMA Mode
              4. Asynchronous Non-burst DMA Mode
              5. Synchronous Burst CPU Mode
              6. Synchronous Non-burst CPU Mode
              7. Asynchronous Burst CPU Mode
              8. Asynchronous Non-burst CPU Mode
 *
 */
/* ========================================================================== */
/*                             Include Files                                  */
/* ========================================================================== */
#include <ti/csl/example/utils/uart_console/inc/uartConfig.h>
#include <ti/csl/csl_gpmc.h>
#include <ti/csl/soc.h>
#include <ti/csl/hw_types.h>
#include <ti/csl/csl_edma.h>
#include <ti/csl/example/edma/edma_test/sample.h>

#include <ti/drv/uart/UART.h>
#include <ti/drv/uart/UART_stdio.h>
#include <ti/csl/soc/am572x/src/cslr_control_core_pad_io.h>

/* ========================================================================== */
/*                                 Macros                                     */
/* ========================================================================== */

#define BURST_MODE
#define SYNC_MODE
#define DMA_ENABLE

/* ========================================================================== */
/*                            Global Variables                                */
/* ========================================================================== */

signed char __attribute__((section(".my_sect_ddr"))) _srcBuff1[MAX_BUFFER_SIZE];
signed char __attribute__((section(".my_sect_ddr"))) _dstBuff1[MAX_BUFFER_SIZE];

uint32_t edma_ch_num = 1;
uint32_t edma_tcc_num = 1;
uint32_t edma_evtq_num = 0;

uint32_t region = EDMA3_CC_REGION;

signed char *srcBuff1;
signed char *dstBuff1;

extern uint32_t base_address;

/*To use UARTConfigPuts function for prints*/
uint32_t uartBaseAddr = SOC_UART3_BASE;

/* To use for benchmarking */
#define TIMER14_TCLR (*((volatile uint32_t *)0x4882A038))
#define TIMER14_TLDR (*((volatile uint32_t *)0x4882A040))
#define TIMER14_TCRR (*((volatile uint32_t *)0x4882A03C))
#define TIMER14_TMAR (*((volatile uint32_t *)0x4882A04C))
#define TIMER14_TSICR (*((volatile uint32_t *)0x4882A054))
/* ========================================================================== */
/*                          Function Definitions                              */
/* ========================================================================== */
void GPMC_init(void);
void padConfig_prcmEnable(void);
int gpmc_init(void);

int gpmc_init(void)
{

    uint32_t i, t_start, t_stop, t_overhead;


    uint32_t t_delta_cpu_writes, t_delta_cpu_reads;
    uint32_t var0 = 0xFFFFFFFF;

    volatile uint32_t * GPMC0 = (volatile uint32_t*) 0x08000000;
    volatile uint32_t * GPMC1 = (volatile uint32_t*) 0x08000004;
    volatile uint32_t * GPMC2 = (volatile uint32_t*) 0x08000008;
    volatile uint32_t * GPMC3 = (volatile uint32_t*) 0x0800000C;
    volatile uint32_t * GPMC4 = (volatile uint32_t*) 0x08000010;
    volatile uint32_t * GPMC5 = (volatile uint32_t*) 0x08000014;
    volatile uint32_t * GPMC6 = (volatile uint32_t*) 0x08000018;
    volatile uint32_t * GPMC7 = (volatile uint32_t*) 0x0800001C;

    UART_printf("Data received is gpmc 1\n");
    /*MMC1 PAD Configuration*/
    padConfig_prcmEnable();


    /* Configure GPMC registers with timing values optimized for an FPGA */
    GPMC_init();



    while (1)
    {

    /* Initialize timer14 for benchmarking */
    TIMER14_TCLR = 0;
    TIMER14_TLDR = 0;
    TIMER14_TCRR = 0;
    TIMER14_TMAR = 0;
    TIMER14_TSICR = 0;
    TIMER14_TCLR = 0x1;

    /* Calculate timer overhead */
    t_start = TIMER14_TCRR;
    t_stop = TIMER14_TCRR;
    t_overhead = t_stop - t_start;


    t_start = TIMER14_TCRR;
    for(i=0;i<4;i++)
    {
        *GPMC0 = 0xFFFFFFFF;
        *GPMC1 = 0x00000000;
        *GPMC2 = 0xAAAAAAAA;
        *GPMC3 = 0x55555555;
        *GPMC4 = 0xFFFFFFFF;
        *GPMC5 = 0x00000000;
        *GPMC6 = 0xFFFFFFFF;
        *GPMC7 = 0xAAAAAAAA;
    }
    t_stop = TIMER14_TCRR;
    t_delta_cpu_writes = t_stop - t_start - t_overhead;


    t_start = TIMER14_TCRR;
    for(i=0;i<4;i++)
    {
        var0 = *GPMC0;
        var0 = *GPMC1;
        var0 = *GPMC2;
        var0 = *GPMC3;
        var0 = *GPMC4;
        var0 = *GPMC5;
        var0 = *GPMC6;
        var0 = *GPMC7;
    }
    t_stop = TIMER14_TCRR;
    t_delta_cpu_reads = t_stop - t_start - t_overhead;

    UART_printf("Data received is gpmc print end\n");

   }

    return 0;
}


/* Configures GPMC registers with timing values optimized for an OCTAL UART */
void GPMC_init(void)
{
    uint32_t baseAddr = CSL_MPU_GPMC_CONF_REGS_REGS;
    uint32_t config;

    /* Enable the chip select 3 OCTAL UART */
    GPMCCSConfig(baseAddr, GPMC_CHIP_SELECT_0, GPMC_CS_ENABLE);

    /* Select the chip-select base address, chip addr needs to be given */
    GPMCBaseAddrSet(baseAddr, GPMC_CHIP_SELECT_0, 0x00000008);

    /* Select the chip-select mask address */
    GPMCMaskAddrSet(baseAddr, GPMC_CHIP_SELECT_0, GPMC_CS_SIZE_64MB);

    /* Set the device size attached */
    GPMCDevSizeSelect(baseAddr, GPMC_CHIP_SELECT_0, GPMC_DEVICESIZE_8BITS);

    /* Set the read mode operation and write mode operation */
    /*SYNC_MODE*/
    GPMCReadTypeSelect(baseAddr,GPMC_CHIP_SELECT_0, GPMC_READTYPE_SYNC);
    GPMCWriteTypeSelect(baseAddr,GPMC_CHIP_SELECT_0, GPMC_WRITETYPE_SYNC);

    /* Select single access reads and writes*/
    /* NON_BURST_MODE */ //need to check burst
    GPMCAccessTypeSelect(baseAddr, GPMC_CHIP_SELECT_0, GPMC_MODE_READ, GPMC_ACCESSTYPE_SINGLE);
    GPMCAccessTypeSelect(baseAddr, GPMC_CHIP_SELECT_0, GPMC_MODE_WRITE, GPMC_ACCESSTYPE_SINGLE);


    /* Set the signals timing latencies scalar factor */
    GPMCTimeParaGranularitySelect(baseAddr, GPMC_CHIP_SELECT_0,
    GPMC_TIMEPARAGRANULARITY_X1);

    /* Set the address and data multiplexed protocol */
    GPMCAddrDataMuxProtocolSelect(baseAddr, GPMC_CHIP_SELECT_0,
    GPMC_MUXADDDATA_ADMUX);

    /* Set the timing parameters for the chip select signal */
    //CSWROFFTIME, CSRDOFFTIME, CSEXTRADELAY, CSONTIME
    config = GPMC_CS_TIMING_CONFIG(10, 7, GPMC_CS_EXTRA_NODELAY, 0);
    GPMCCSTimingConfig(baseAddr, GPMC_CHIP_SELECT_0, config);

    /* Set the timing parameters for the ADV# signal */
    /* ADVAADMUXWROFFTIME, ADVAADMUXRDOFFTIME, ADVWROFFTIME, ADVRDOFFTIME, ADVEXTRADELAY, ADVAADMUXONTIME, ADVONTIME */
    config = GPMC_ADV_TIMING_CONFIG(0, 0, 4, 4, GPMC_ADV_EXTRA_NODELAY, 0, 0);
    GPMCADVTimingConfig(baseAddr, GPMC_CHIP_SELECT_0, config);

    /* Set the timing parameters for the WE# and OE# signals */
    /* WEOFFTIME, WEEXTRADELAY, WEONTIME, OEAADMUX_OFFTIME, OEOFFTIME, OEEXTRADELAY, OEAADMUX_ONTIME, OEONTIME */
    config = GPMC_WE_OE_TIMING_CONFIG(7, 0, 4, 0, 7, GPMC_OE_EXTRA_NODELAY, 0,
                                      4);
    GPMCWEAndOETimingConfig(baseAddr, GPMC_CHIP_SELECT_0, config);

    /* Set the RdAccessTime and CycleTime timing parameters */
    /* RDCYCLETIME, WRCYCLETIME, RDACCESSTIME, PAGEBURSTACCESSTIME */
    config = GPMC_RDACCESS_CYCLETIME_TIMING_CONFIG(9, 9, 6, 3);
    GPMCRdAccessAndCycleTimeTimingConfig(baseAddr, GPMC_CHIP_SELECT_0, config);

    /* Configure the Cycle2Cycle and BusTurnAround timing parameters */
    /* CYCLE2CYCLEDELAY, CYCLE2CYCLEDELAYSAMECSCFG, CYCLE2CYCLEDELAYDIFFCSCFG, BUSTATIME */
    config = GPMC_CYCLE2CYCLE_BUSTURNAROUND_TIMING_CONFIG(
            2, GPMC_CYCLE2CYCLESAMECSEN_C2CDELAY,
            GPMC_CYCLE2CYCLEDIFFCSEN_NOC2CDELAY, 0);
    GPMCycle2CycleAndTurnArndTimeTimingConfig(baseAddr, GPMC_CHIP_SELECT_0,
                                              config);

    /* Configure the WrAccessTime, Cycle2Cycle andBusTurnAround timing parameters.*/
    /* WRACCESSTIME, WRDATAONADMUXBUS */
    GPMCWrAccessAndWrDataOnADMUXBusTimingConfig(baseAddr, GPMC_CHIP_SELECT_0, 6,
                                                4);

    /* Set the FCLK divide down value */
    GPMCFclkDividerSelect(baseAddr, GPMC_CHIP_SELECT_0, GPMC_FCLK_DIV_BY_3);

    /* Set the attached device page (burst) length */
    GPMCDevPageLenSet(baseAddr, GPMC_CHIP_SELECT_0,
    GPMC_DEV_PAGELENGTH_SIXTEEN);

    UART_printf("Data received is gpmc 3\n");

}

void padConfig_prcmEnable(void)
{
    /*Pad configurations */
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_UART3_RXD,
            0x00040000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_UART3_TXD,
            0x00000000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_UART2_CTSN,
            0x00060002);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_UART2_RTSN,
            0x00060001);
    /*Pad configurations*/
    /*GPMC Data lines AD15-AD0*/
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_AD15,
            0x00050000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_AD14,
            0x00050000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_AD13,
            0x00050000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_AD12,
            0x00050000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_AD11,
            0x00050000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_AD10,
            0x00050000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_AD9,
            0x00050000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_AD8,
            0x00050000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_AD7,
            0x00050000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_AD6,
            0x00050000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_AD5,
            0x00050000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_AD4,
            0x00050000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_AD3,
            0x00050000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_AD2,
            0x00050000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_AD1,
            0x00050000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_AD0,
            0x00050000);


    /*GPMC Add lines A15-A1*/
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_A15,
            0x00040000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_A14,
            0x00040000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_A13,
            0x00040000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_A12,
            0x00040000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_A11,
            0x00040000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_A10,
            0x00040000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_A9,
            0x00040000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_A8,
            0x00040000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_A7,
            0x00040000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_A6,
            0x00040000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_A5,
            0x00040000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_A4,
            0x00040000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_A3,
            0x00040000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_A2,
            0x00040000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_A1,
            0x00040000);

    /*GPMC chip select*/
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_CS0,
            0x00060000);
    /*GPMC control lines*/
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_ADVN_ALE,
            0x00060000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_OEN_REN,
            0x00070000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_WEN,
            0x00070000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_BEN0,
            0x00070000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_WAIT0,
            0x000F0000);
    HW_WR_REG32(
            CSL_MPU_CORE_PAD_IO_REGISTERS_REGS+CSL_CONTROL_CORE_PAD_IO_PAD_GPMC_CLK,
            0x00060000);

    UART_printf("Data received is gpmc 2\n");
}
/***************************** End Of File ***********************************/
/**
 *  \file   uart_arm.cfg
 *
 *  \brief  Sysbios config file for UART example project on AM572X IDK EVM.
 *
 */

/*
 * Copyright (C) 2015 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.
 *
 */
/* ================ General configuration ================ */
var Defaults = xdc.useModule('xdc.runtime.Defaults');
var Diags = xdc.useModule('xdc.runtime.Diags');
var Error = xdc.useModule('xdc.runtime.Error');
var Log = xdc.useModule('xdc.runtime.Log');
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
var Main = xdc.useModule('xdc.runtime.Main');
var Memory = xdc.useModule('xdc.runtime.Memory')
var SysMin = xdc.useModule('xdc.runtime.SysMin');
var System = xdc.useModule('xdc.runtime.System');
var Text = xdc.useModule('xdc.runtime.Text');
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
var Swi = xdc.useModule('ti.sysbios.knl.Swi');
var Task = xdc.useModule('ti.sysbios.knl.Task');
var Semaphore = xdc.useModule('ti.sysbios.knl.Semaphore');
var Hwi = xdc.useModule('ti.sysbios.hal.Hwi');
var IntXbar      = xdc.useModule('ti.sysbios.family.shared.vayu.IntXbar');
var Program     = xdc.useModule("xdc.cfg.Program");

/* 
 * Program.argSize sets the size of the .args section. 
 * The examples don't use command line args so argSize is set to 0.
 */
/* Program.argSize = 0x0; */
Program.heap            = 0x10000;

/* System stack size (used by ISRs and Swis) */
Program.stack = 0x20000;

/*
 * Uncomment this line to globally disable Asserts.
 * All modules inherit the default from the 'Defaults' module.  You
 * can override these defaults on a per-module basis using Module.common$. 
 * Disabling Asserts will save code space and improve runtime performance.
Defaults.common$.diags_ASSERT = Diags.ALWAYS_OFF;
 */

/*
 * Uncomment this line to keep module names from being loaded on the target.
 * The module name strings are placed in the .const section. Setting this
 * parameter to false will save space in the .const section.  Error and
 * Assert messages will contain an "unknown module" prefix instead
 * of the actual module name.
/*Defaults.common$.namedModule = false;*/

/* 
 * Create and install logger for the whole system
 */
var loggerBufParams = new LoggerBuf.Params();
loggerBufParams.numEntries = 16;
var logger0 = LoggerBuf.create(loggerBufParams);
Defaults.common$.logger = logger0;
Main.common$.diags_INFO = Diags.ALWAYS_ON;

/* ================ BIOS configuration ================ */

var BIOS = xdc.useModule('ti.sysbios.BIOS');
/*
 * Build a custom SYS/BIOS library from sources.
 */
BIOS.libType = BIOS.LibType_Custom;

BIOS.heapSize = 0x10000;

/* ================ Driver configuration ================ */

/* Load the OSAL package */
var osType           = "tirtos";
var Osal             = xdc.loadPackage('ti.osal');
Osal.Settings.osType = osType;

/*use CSL package*/
var socType           = "am572x";
var Csl = xdc.loadPackage('ti.csl');
Csl.Settings.deviceType = socType;

/* Load the uart package */
var Uart              = xdc.loadPackage('ti.drv.uart');
Uart.Settings.socType = socType;

/* Load the I2C package */
var I2c = xdc.loadPackage('ti.drv.i2c');
I2c.Settings.socType = socType;

/* Load the SPI package */
var Spi = xdc.loadPackage('ti.drv.spi');

/* Load the Board package and set the board name */
var Board = xdc.loadPackage('ti.board');
Board.Settings.boardName = "idkAM572x";

/* ================ Cache and MMU configuration ================ */

var Cache1  = xdc.useModule('ti.sysbios.family.arm.a15.Cache');
var Mmu    = xdc.useModule('ti.sysbios.family.arm.a15.Mmu');

/* Enable the cache */
Cache1.enableCache = true;

/* Enable the MMU (Required for L1 data caching) */
Mmu.enableMMU = true;

var attrs = new Mmu.DescriptorAttrs();
Mmu.initDescAttrsMeta(attrs);
attrs.type = Mmu.DescriptorType_BLOCK;
attrs.noExecute = true;
attrs.accPerm = 0;       // R/W at PL1
attrs.attrIndx = 4;       // Use MAIR0 Byte2
Mmu.setMAIRMeta(4, 0x04);
Mmu.setSecondLevelDescMeta(0x43200000, 0x43200000, attrs);

/* Set IO Delay configuration areas as non-cache */
attrs.attrIndx = 1;
Mmu.setSecondLevelDescMeta(0x4844a000, 0x4844a000, attrs);
Mmu.setSecondLevelDescMeta(0x4ae07d00, 0x4ae07d00, attrs);

/* Adding for GPMC setting */
var peripheralAttrs = new Mmu.DescriptorAttrs();
Mmu.initDescAttrsMeta(peripheralAttrs);
peripheralAttrs.type = Mmu.DescriptorType_BLOCK;
peripheralAttrs.shareable = 2;
peripheralAttrs.noExecute = true;
peripheralAttrs.accPerm = 0;
peripheralAttrs.attrIndx = 1; // level1 is 1GB area
/* Define the base address of the 1 Meg page the peripheral resieds in. */
var gpmcConfigBaseAddr = 0x50000000;
/* Configure the corresponding MMU page descriptor accordingly */
Mmu.setSecondLevelDescMeta(gpmcConfigBaseAddr,
gpmcConfigBaseAddr,
peripheralAttrs);

var gpmcAttrs = new Mmu.DescriptorAttrs(); 
Mmu.initDescAttrsMeta(gpmcAttrs);
gpmcAttrs.type = Mmu.DescriptorType_BLOCK;
gpmcAttrs.shareable = 2;
gpmcAttrs.noExecute = true;
gpmcAttrs.accPerm = 0;
gpmcAttrs.attrIndx = 1; // level2: 2MB area (level1 is 1GB area)

var gpmcBaseAddr = 0x08000000;
/* Configure the corresponding MMU page descriptor accordingly */
Mmu.setSecondLevelDescMeta(gpmcBaseAddr,
gpmcBaseAddr,
gpmcAttrs);




/* ================ Memory sections configuration ================ */
Program.sectMap["BOARD_IO_DELAY_DATA"] = "OCMC_RAM1";
Program.sectMap["BOARD_IO_DELAY_CODE"] = "OCMC_RAM1";

  • Hi,

    Could you check other signals as well? Do you see AD lines or CS toggled?

    Did you try this as-is in baremetal code without TI-RTOS?

    Regards,

    Stanley

  • Hi Stanley,

               I checked AD lines and CS not toggled.

             while(1) {

            UART_printf("Data received is process\n");
            UART_printf ("*******writing in the ADDR : 0x%08x\n", GPMC0);
            *GPMC0 =0xAAAAAAAA;
            UART_printf ("*******writing in the ADDR 2: 0x%08x\n", GPMC0);
            *GPMC1 = 0x55555555;
            }
           actually my program is hanged in while loop in this line   "*GPMC0 =0xAAAAAAAA;". when I try to write GPMC space.
           
  • Did you run the CSL example baremetal code as-is?

    If yes, please share GPMC registers dump.