/* ============================================================================
* Copyright (c) Texas Instruments Inc 2002, 2003, 2004, 2005
*
* Use of this software is controlled by the terms and conditions found
* in the license agreement under which this software has been supplied.
* ============================================================================
*/
/** ============================================================================
*
* @file Emifa_ReadWrite_example.c
*
* @path $(CSLPATH)\example\emifa\src
*
* @desc Example of EMIFA
*
* ============================================================================
* @n Target Platform: VDB
* ============================================================================
* @n <b> Example Description </b>
* @n This example,
* 1. Sets up for asynchronous and synchronous type
* 2. Initializes and opens the CSL EMFIA module.
* 3. Sets up the hardware parameter
* 4. Writes the Invalid values into EMIFA CS2 area to over write the
* previous values.
* 5. Writes valid data into CS2 area.
* 6. Does the data comparision to ensure the written data is proper or
* not and
* 7. Displays the messages based on step 6
* 8. Steps 4 to 7 is repeated to write the Data into CS4 area
*
* =============================================================================
*
* <b> Procedure to run the example </b>
* @verbatim
* 1. Configure the CCS setup to work with the emulator being used
* 2. Please refer CCS manual for setup configuration and loading
* proper GEL file
* 3. Launch CCS window
* 4. Open project Emifa_ReadWrite_example.pjt
* 5. Build the project and load the .out file of the project.
*
* @endverbatim
*
*/
/* =============================================================================
* Revision History
* ===============
* 21-May-2005 Ramitha Mathew. created
* 20-Jul-2005 RM Module name changed from EMIF64 to EMIFA
* 30-Nov-2005 NG Updated documentation
* 06-Feb-2006 ds Async and sync start areas has changed to CE3 loaction
* =============================================================================
*/
#include <csl_emifa.h>
#include <cslr_dev.h>
#include <stdio.h>
/* Success Flag for data comparision */
#define DATA_MATCH_SUCCESS 1
/* Result - Failed */
#define DATA_MATCH_FAIL 0
/* Data count(number write/readbacks) */
#define DATA_CNT 10
/* Base address of the EMIFA CE3 */
#define EMIFA_CE3_BASE_ADDR (0xB0000000u)
#define EMIFA_MEMTYPE_ASYNC 0
#define EMIFA_MEMTYPE_SYNC 1
/* Handle for the EMIFA instance */
CSL_EmifaHandle hEmifa;
/* Locals & Forwards */
void emifaReadWrite(void);
/*
* =============================================================================
* @func main
*
* @desc
* This is the main routine for the file.
*
* =============================================================================
*/
void main (
void
)
{
/* Enable EMIFA */
CSL_FINST(((CSL_DevRegs*)CSL_DEV_REGS)->PERCFG1, DEV_PERCFG1_EMIFACTL, \
ENABLE);
emifaReadWrite();
return;
}
/*
* =============================================================================
* @func emifaReadWrite
*
* @arg
* NONE
*
* @desc
* This function demonstrates the functionality of EMIFA with the setup
* It implements following steps
* 1. Opens the EMIFA module CSL
* 2. The CSL_emifaHwSetup is called for module configuration
* 3. It writes into CE4 area configured for synchronous memory and
* CE2 area configured for asynchronous memory reads back, to make
* sure the data is indeed written.
* 4. EMIFA module CSL is closed.
*
* @return
* NONE
*
* =============================================================================
*/
void emifaReadWrite (
void
)
{
Uint32 result, index, tempData;
CSL_EmifaObj emifaObj;
CSL_Status status;
CSL_EmifaHwSetup hwSetup ;
CSL_EmifaMemType asyncVal, syncVal;
CSL_EmifaAsyncWait asyncWait = CSL_EMIFA_ASYNCWAIT_DEFAULTS;
CSL_EmifaAsync asyncMem = CSL_EMIFA_ASYNCCFG_DEFAULTS;
CSL_EmifaSync syncMem = CSL_EMIFA_SYNCCFG_DEFAULTS;
/* Pointer that points to Async(CE3) start area */
Uint32 *pAsyncData = (Uint32 *)EMIFA_CE3_BASE_ADDR;
/* Pointer that points to Sync(CE3) start area */
Uint32 *pSyncData = (Uint32 *)EMIFA_CE3_BASE_ADDR;
/* Clear local data structures */
memset(&emifaObj, 0, sizeof(CSL_EmifaObj));
memset(&hwSetup, 0, sizeof(CSL_EmifaHwSetup));
/* setting for asynchronous type */
asyncVal.ssel = EMIFA_MEMTYPE_ASYNC;
asyncVal.async = &asyncMem;
asyncVal.sync = NULL;
/* setting for synchronous type */
syncVal.ssel = EMIFA_MEMTYPE_SYNC;
syncVal.async = NULL;
syncVal.sync = &syncMem;
/* setup the hardware parameters */
hwSetup.asyncWait = &asyncWait;
hwSetup.ceCfg[0] = &asyncVal;
hwSetup.ceCfg[1] = NULL;
hwSetup.ceCfg[2] = &syncVal;
hwSetup.ceCfg[3] = NULL;
printf("\tInfo: Read-Write operations of EMIFA \n");
/* Initialize EMIFA CSL module */
status = CSL_emifaInit(NULL);
if (status != CSL_SOK) {
printf("EMIFA: Initialization error.\n");
printf("\tReason: CSL_emifaInit [status = 0x%x].\n", status);
return;
}
else {
printf("EMIFA: Module Initialized.\n");
}
/* Opening the EMIFA instance */
hEmifa = CSL_emifaOpen(&emifaObj, CSL_EMIFA, NULL, &status);
if ((status != CSL_SOK) || (hEmifa == NULL)) {
printf("EMIFA: Error opening the instance. [status = 0x%x, hEmifa \
= 0x%x]\n", status, hEmifa);
return;
}
else {
printf("EMIFA: Module instance opened.\n");
}
/* Setting up configuration parameter using HwSetup */
status = CSL_emifaHwSetup(hEmifa, &hwSetup);
if (status != CSL_SOK) {
printf("EMIFA: Error in HW Setup.\n");
printf("Read write operation fails\n");
return;
}
else {
printf("EMIFA: Module Hardware setup is successful.\n");
}
printf("\tInfo: Async read write \n");
/* Write 'invalid' values into EMIFA CS2 area. This is to overwrite the
* previous valid values.
*/
tempData = 0xdeadbeef;
for (index = 0; index < DATA_CNT; index++) {
pAsyncData[index] = tempData;
}
/* Write **valid** values into CS2 area. */
tempData = 0x55550000;
for (index = 0; index < DATA_CNT; index++) {
pAsyncData[index] = tempData + index;
}
/* Verify that the data was indeed written */
result = DATA_MATCH_SUCCESS;
for (index = 0; index < DATA_CNT; index++) {
if (pAsyncData[index] != (tempData + index)) {
result = DATA_MATCH_FAIL;
break ;
}
}
/* Print the appropriate messages */
if (result == DATA_MATCH_SUCCESS) {
printf("\nAsynchronous Read Write is Successful\n");
}
else {
printf("\nAsynchronous Read Write is NOT Successful\n");
}
printf("\tInfo: Sync read write \n");
/* Write 'invalid' values into EMIFA CS4 area. This is to overwrite the
* previous valid values.
*/
tempData = 0xdeadbeef;
for (index = 0; index < DATA_CNT; index++) {
pSyncData[index] = tempData;
}
/* Write **valid** values into CS4 area. */
tempData = 0x56780000;
for (index = 0; index < DATA_CNT; index++) {
pSyncData[index] = tempData + index ;
}
/* Verify that the data was indeed written */
result = DATA_MATCH_SUCCESS;
for (index = 0; index < DATA_CNT; index++) {
if (pSyncData[index] != (tempData + index)) {
result = DATA_MATCH_FAIL;
break ;
}
}
/* Print the appropriate messages */
if (result == DATA_MATCH_SUCCESS) {
printf("\nSync Read Write is Successful\n");
}
else {
printf("\nSync Read Write is NOT Successful\n");
printf("\tReason:Error in data read.[status = 0x%x]\n", status);
}
return;
}
I haven't modified the code, and the CCS says the following error:
undefined first referenced
symbol in file
--------- ----------------
_CSL_emifaHwSetup ./Emifa_ReadWrite_example.obj
_CSL_emifaInit ./Emifa_ReadWrite_example.obj
_CSL_emifaOpen ./Emifa_ReadWrite_example.obj