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.

DM814x McASP loopback test

Other Parts Discussed in Thread: TMS320C6727, CCSTUDIO

hello everyone,

  I am trying to modify a test code of Mcasp Loopback  TMS320c6727 for Mcasp of DM814x nd for that i have done some alterations in the header files ,command files but i am getting some errors,which i am not able to rectify.kindly help in this regards.i am also attaching my c files nd header files.the errrors i am getting are :

undefined first referenced

symbol in file

--------- ----------------

_McASP0 ./main.obj

_McASP1 ./main.obj

_McASP2 ./main.obj

error #10234-D: unresolved symbols remain

error #10010: errors encountered during linking; "D710 McASP.out" not built

 

 

 

 

/*
 * main.c
 */
#include  "DM814x.h"
#include "McASP_definitions.h"
#include "McASP_functions.c"
#include "stdio.h"
#include "string.h"

char result[256]={"0"};

void clearResult()
{
	int i=0;
	for(i=0; i<255; i++)
		result[i]=' ';
}

void formatResult(int error)
{
	clearResult();
	if(error==1)
		strcpy(result, "McASP Loopback passed");
	else strcpy(result, "McASP Loopback failed");
}

void finalStep(void)
{
	while(1);
}

int main(void) {
	initMcASP_I2S_Loopback(0); // Loopback on McASP0
	// initMcASP_I2S(0); // I2S on Ser0
	int status=0;
	int i=0;
	for(i=0; i<256; i++)
	{
		status=checkLoop(0x01234567, 0x89ABCDEF); // reading loopback data; returns 0 if pass, 1 if fail
		//ckeckI2S(0x01234567, 0x89ABCDEF);  / left and right data
		if(status==2)
			i=256;
	}
	if(status==0)
		status=1;
	formatResult(status);
	finalStep();
	return 0;
}




extern far int McASP0[0xFFF];
extern far int McASP1[0xFFF];
extern far int McASP2[0xFFF];


//L3 Mem Map//
//size of  MCASP0,1,2 data peripheral registers 4MB//
#define MCASP0_BASE_ADDRESS        0x46000000
#define MCASP0_END_ADDRESS         0x463FFFFF

#define MCASP1_BASE_ADDRESS        0x46400000
#define MCASP_END_ADDRESS          0x467FFFFF

#define MCASP2_BASE_ADDRESS        0x46800000
#define MCASP2_END_ADDRESS         0x46BFFFFF

//size of McASP3,4,5 data peripheral registers 4KB
//L4 Mem map
#define MCASP3_Cortex_A8_BASE_ADDRESS             0x4A1A5000
#define MCASP3_Cortex_A8_END_ADDRESS              0x4A1A5FFF

#define MCASP4_Cortex_A8_BASE_ADDRESS             0x4A1AB000
#define MCASP4_Cortex_A8_END_ADDRESS              0x4A1ABFFF

#define MCASP5_Cortex_A8_BASE_ADDRESS             0x4A1B1000
#define MCASP5_Cortex_A8_END_ADDRESS              0x4A1B1FFF


#define BUFFER_CFGRD_WFIFOCTL        0x48039000
#define BUFFER_CFGRD_WFIFOSTS        0x48039004
#define BUFFER_CFGRD_RFIFOCTL        0x48039008
#define BUFFER_CFGRD_RFIFOSTS        0x4803900C

#define PID	    (0x00/4)
#define PWRDEMU 	(0x04/4)
#define REV         (0x00/4)
#define PFUNC		(0x10/4)
#define PDIR		(0x14/4)
#define PDOUT		(0x18/4)
#define PDIN		(0x1C/4)
#define PDSET		(0x1C/4)
#define PDCLR		(0x20/4)

#define GBLCTL 		(0x44/4)
#define AMUTE		(0x48/4)
#define DLBCTL		(0x4C/4)
#define DITCTL		(0x50/4)

#define RGBCTL		(0x60/4)
#define RMASK		(0x64/4)
#define RFMT		(0x68/4)
#define AFSRCTL		(0x6C/4)
#define ACLKRCTL	(0x70/4)
#define AHCLKRCTL	(0x74/4)
#define RTDM		(0x78/4)
#define RINTCTL		(0x7C/4)
#define RSTAT		(0x80/4)
#define RSLOT		(0x84/4)
#define RCLKCHK		(0x88/4)
#define REVTCTL		(0x8C/4)

#define XGBLCTL		(0xA0/4)
#define XMASK		(0xA4/4)
#define XFMT		(0xA8/4)
#define AFSXCTL		(0xAC/4)
#define ACLKXCTL	(0xB0/4)
#define AHCLKXCTL	(0xB4/4)
#define XTDM		(0xB8/4)
#define XINTCTL		(0xBC/4)
#define XSTAT		(0xC0/4)
#define XSLOT		(0xC4/4)
#define XCLKCHK		(0xC8/4)
#define XEVTCTL		(0xCC/4)

#define DITCSRA0 	(0x100/4)
#define DITCSRA1 	(0x104/4)
#define DITCSRA2 	(0x108/4)
#define DITCSRA3 	(0x10C/4)
#define DITCSRA4 	(0x110/4)
#define DITCSRA5 	(0x114/4)
#define DITCSRB0 	(0x118/4)
#define DITCSRB1 	(0x11C/4)
#define DITCSRB2 	(0x120/4)
#define DITCSRB3 	(0x124/4)
#define DITCSRB4 	(0x128/4)
#define DITCSRB5 	(0x12C/4)
#define DITUDRA0	(0x130/4)
#define DITUDRA1	(0x134/4)
#define DITUDRA2	(0x138/4)
#define DITUDRA3	(0x13C/4)
#define DITUDRA4	(0x140/4)
#define DITUDRA5	(0x144/4)
#define DITUDRB0	(0x148/4)
#define DITUDRB1	(0x14C/4)
#define DITUDRB2	(0x150/4)
#define DITUDRB3	(0x154/4)
#define DITUDRB4	(0x158/4)
#define DITUDRB5	(0x15C/4)

#define SRCTL0		(0x180/4)
#define SRCTL1		(0x184/4)
#define SRCTL2		(0x188/4)
#define SRCTL3		(0x18C/4)
#define SRCTL4		(0x190/4)
#define SRCTL5		(0x194/4)
#define SRCTL6		(0x198/4)
#define SRCTL7		(0x19C/4)
#define SRCTL8		(0x1A0/4)
#define SRCTL9		(0x1A4/4)
#define SRCTL10		(0x1A8/4)
#define SRCTL11		(0x1AC/4)
#define SRCTL12		(0x1B0/4)
#define SRCTL13		(0x1B4/4)
#define SRCTL14		(0x1B8/4)
#define SRCTL15		(0x1BC/4)

#define XBUF0 		(0x200/4)
#define XBUF1 		(0x204/4)
#define XBUF2 		(0x208/4)
#define XBUF3 		(0x20C/4)
#define XBUF4 		(0x210/4)
#define XBUF5 		(0x214/4)
#define XBUF6 		(0x218/4)
#define XBUF7 		(0x21C/4)
#define XBUF8 		(0x220/4)
#define XBUF9 		(0x224/4)
#define XBUF10 		(0x228/4)
#define XBUF11		(0x22C/4)
#define XBUF12		(0x230/4)
#define XBUF13		(0x234/4)
#define XBUF14		(0x238/4)
#define XBUF15		(0x23C/4)

#define RBUF0 		(0x280/4)
#define RBUF1 		(0x284/4)
#define RBUF2 		(0x288/4)
#define RBUF3 		(0x28C/4)
#define RBUF4 		(0x290/4)
#define RBUF5 		(0x294/4)
#define RBUF6 		(0x298/4)
#define RBUF7 		(0x29C/4)
#define RBUF8 		(0x2A0/4)
#define RBUF9 		(0x2A4/4)
#define RBUF10 		(0x2A8/4)
#define RBUF11		(0x2AC/4)
#define RBUF12		(0x2B0/4)
#define RBUF13		(0x2B4/4)
#define RBUF14		(0x2B8/4)
#define RBUF15		(0x2BC/4)






#include "McASP_definitions.h"

static void delayCycles(int i)
{
	for(;i>0; i--);
}

static void initMcASP_beginn(int McASP)
{
	if(McASP==0)
	{
		McASP0[GBLCTL]=0x0;
		McASP0[PWRDEMU]=0x1;
	}
	if(McASP==1)
		{
			McASP1[GBLCTL]=0x0;
			McASP1[PWRDEMU]=0x1;
		}
	if(McASP==1)
		{
			McASP1[GBLCTL]=0x0;
			McASP1[PWRDEMU]=0x1;
		}
}

static void initMcASP_RX(int McASP, int RnX, int MASK, int FMT, int AFSCTL, int ACLKCTL, int AHCLKCTL, int TDM, int INTCTL, int CLKCHK) // RnX=0 Transmit, 1 Receive
{
	if(McASP==0)
	{
		if(RnX==0)
		{
			McASP0[XMASK]=MASK;
			McASP0[XFMT]= FMT;
			McASP0[AFSXCTL]= AFSCTL;
			McASP0[ACLKXCTL]= ACLKCTL;
			McASP0[AHCLKXCTL]= AHCLKCTL;
			McASP0[XTDM]= TDM;
			McASP0[XINTCTL]= INTCTL;
			McASP0[XCLKCHK]= CLKCHK;
		}
		else
		{
			McASP0[RMASK]=MASK;
			McASP0[RFMT]= FMT;
			McASP0[AFSRCTL]= AFSCTL;
			McASP0[ACLKRCTL]= ACLKCTL;
			McASP0[AHCLKRCTL]= AHCLKCTL;
			McASP0[RTDM]= TDM;
			McASP0[RINTCTL]= INTCTL;
			McASP0[RCLKCHK]= CLKCHK;
		}
	}
	else if(McASP==1)
	{
		if(RnX==0)
		{
			McASP1[XMASK]=MASK;
			McASP1[XFMT]= FMT;
			McASP1[AFSXCTL]= AFSCTL;
			McASP1[ACLKXCTL]= ACLKCTL;
			McASP1[AHCLKXCTL]= AHCLKCTL;
			McASP1[XTDM]= TDM;
			McASP1[XINTCTL]= INTCTL;
			McASP1[XCLKCHK]= CLKCHK;
		}
		else
		{
			McASP1[RMASK]=MASK;
			McASP1[RFMT]= FMT;
			McASP1[AFSRCTL]= AFSCTL;
			McASP1[ACLKRCTL]= ACLKCTL;
			McASP1[AHCLKRCTL]= AHCLKCTL;
			McASP1[RTDM]= TDM;
			McASP1[RINTCTL]= INTCTL;
			McASP1[RCLKCHK]= CLKCHK;
		}
	}
	else if(McASP==2)
	{
		if(RnX==0)
		{
			McASP2[XMASK]=MASK;
			McASP2[XFMT]= FMT;
			McASP2[AFSXCTL]= AFSCTL;
			McASP2[ACLKXCTL]= ACLKCTL;
			McASP2[AHCLKXCTL]= AHCLKCTL;
			McASP2[XTDM]= TDM;
			McASP2[XINTCTL]= INTCTL;
			McASP2[XCLKCHK]= CLKCHK;
		}
		else
		{
			McASP2[RMASK]=MASK;
			McASP2[RFMT]= FMT;
			McASP2[AFSRCTL]= AFSCTL;
			McASP2[ACLKRCTL]= ACLKCTL;
			McASP2[AHCLKRCTL]= AHCLKCTL;
			McASP2[RTDM]= TDM;
			McASP2[RINTCTL]= INTCTL;
			McASP2[RCLKCHK]= CLKCHK;
		}
	}
}

static void initMcASP_Ser(int McASP, int MODEh, int MODEl, int DRIVEh, int DRIVEl) // rebundle from settings in each int to settings for each serializer. LSB of int always stands for serializer 0, only lower 16 Bit used
{
	int buf=0;
	int count=0;
	for(count=0; count<15; count++)
	{
		buf=0;
		if(((DRIVEh >> count) & 1) == 1)
		buf++;
		buf = buf << 1;
		if(((DRIVEl >> count) & 1) == 1)
		buf++;
		buf = buf << 1;
		if(((MODEh >> count) & 1) == 1)
		buf++;
		buf = buf << 1;
		if(((MODEl >> count) & 1) == 1)
		buf++;
		if(McASP==0)
		McASP0[SRCTL0+count]=buf;
		if(McASP==1)
		McASP1[SRCTL0+count]=buf;
		if(McASP==2)
		McASP2[SRCTL0+count]=buf;
	}
}

static void initMcASP_Pins(int func, int dir)
{
	McASP0[PFUNC]= McASP0[PFUNC] | func;
	McASP0[PDIR]= McASP0[PDIR] | dir;
}

static void initMcASP_stuff(int McASP, int DIT, int LOOP, int MUTE)
{
	if(McASP==0)
	{
		McASP0[DITCTL]= DIT; 		// DIT mode
		McASP0[DLBCTL]= LOOP; 		// Loopback
		McASP0[AMUTE]= MUTE; 		// AMUTE
	}
	if(McASP==1)
		{
			McASP1[DITCTL]= DIT; 		// DIT mode
			McASP1[DLBCTL]= LOOP; 		// Loopback
			McASP1[AMUTE]= MUTE; 		// AMUTE
		}
	if(McASP==2)
		{
			McASP2[DITCTL]= DIT; 		// DIT mode
			McASP2[DLBCTL]= LOOP; 		// Loopback
			McASP2[AMUTE]= MUTE; 		// AMUTE
		}
}

static void initMcASP_buffer(int ASP, int val)
{
	int j=0;
	for(j=0; j<15; j++)
	{
		if(ASP==0)
			McASP0[XBUF0 +j]= val;		// Sending val in the first transmission
		if(ASP==1)
			McASP1[XBUF0 +j]= val;
		if(ASP==2)
			McASP2[XBUF0 +j]= val;
	}
}

static void initMcASP_launch(int McASP)
{
	if(McASP==0)
	{
		McASP0[GBLCTL]= McASP0[GBLCTL] | 0x202; // Enable RHCLK and XHCLK
		while(!(McASP0[GBLCTL] & 0x202));
		delayCycles(1000);
		McASP0[GBLCTL]= McASP0[GBLCTL] | 0x101; // Enable RCLK and XCLK
		while(!(McASP0[GBLCTL] & 0x101));
		delayCycles(1000);
		McASP0[XSTAT]= 0xFFFF;		// Clear all status registers
		McASP0[RSTAT]= 0xFFFF;
		McASP0[GBLCTL]= McASP0[GBLCTL] | 0x404; // Enable Serializers
		while(!(McASP0[GBLCTL] & 0x404));
		delayCycles(1000);
		initMcASP_buffer(McASP, 0x5F0AF50A);
		McASP0[GBLCTL]= McASP0[GBLCTL] | 0x808; // Enable State Machines
		while(!(McASP0[GBLCTL] & 0x808));
		delayCycles(1000);
		McASP0[GBLCTL]= McASP0[GBLCTL] | 0x1010; // Enable Frame Syncs
		while(!(McASP0[GBLCTL] & 0x1010));
	}
	if(McASP==1)
	{
		McASP1[GBLCTL]= McASP1[GBLCTL] | 0x202; // Enable RHCLK and XHCLK
		while(!(McASP1[GBLCTL] & 0x202));
		delayCycles(1000);
		McASP1[GBLCTL]= McASP1[GBLCTL] | 0x101; // Enable RCLK and XCLK
		while(!(McASP1[GBLCTL] & 0x101));
		delayCycles(1000);
		McASP1[XSTAT]= 0xFFFF;		// Clear all status registers
		McASP1[RSTAT]= 0xFFFF;
		McASP1[GBLCTL]= McASP1[GBLCTL] | 0x404; // Enable Serializers
		while(!(McASP1[GBLCTL] & 0x404));
		delayCycles(1000);
		initMcASP_buffer(McASP, 0x5F0AF50A);
		McASP1[GBLCTL]= McASP1[GBLCTL] | 0x808; // Enable State Machines
		while(!(McASP1[GBLCTL] & 0x808));
		delayCycles(1000);
		McASP1[GBLCTL]= McASP1[GBLCTL] | 0x1010; // Enable Frame Syncs
		while(!(McASP1[GBLCTL] & 0x1010));
	}
	if(McASP==2)
	{
		McASP2[GBLCTL]= McASP2[GBLCTL] | 0x202; // Enable RHCLK and XHCLK
		while(!(McASP2[GBLCTL] & 0x202));
		delayCycles(1000);
		McASP2[GBLCTL]= McASP2[GBLCTL] | 0x101; // Enable RCLK and XCLK
		while(!(McASP2[GBLCTL] & 0x101));
		delayCycles(1000);
		McASP2[XSTAT]= 0xFFFF;		// Clear all status registers
		McASP2[RSTAT]= 0xFFFF;
		McASP2[GBLCTL]= McASP2[GBLCTL] | 0x404; // Enable Serializers
		while(!(McASP2[GBLCTL] & 0x404));
		delayCycles(1000);
		initMcASP_buffer(McASP, 0x5F0AF50A);
		McASP2[GBLCTL]= McASP2[GBLCTL] | 0x808; // Enable State Machines
		while(!(McASP2[GBLCTL] & 0x808));
		delayCycles(1000);
		McASP2[GBLCTL]= McASP2[GBLCTL] | 0x1010; // Enable Frame Syncs
		while(!(McASP2[GBLCTL] & 0x1010));
	}
}

static void initMcASP_I2S(int ASP) // transmitt I2S on Ser0
{
	initMcASP_beginn(ASP);
	initMcASP_RX(ASP, 0, 0xFFFFFFFF, 0x180F8, 0x112, 0x3F, 0x8000, 0x03, 0x0, 0xFF0005);
	initMcASP_Ser(ASP, 0, 1, 0, 0); //Ser0 is Transmitter, TRI-State
	initMcASP_Pins(0, 0x1E00000F);
	initMcASP_stuff(ASP, 0, 0, 0);
	initMcASP_launch(ASP);
}

static void initMcASP_I2S_Loopback(int ASP) // transmitt I2S on even Serializers, receive on odd
{
	initMcASP_beginn(ASP);
	initMcASP_RX(ASP, 0, 0xFFFFFFFF, 0x180F8, 0x112, 0x3F, 0x8000, 0x03, 0x0, 0xFF0005);
	initMcASP_RX(ASP, 1, 0xFFFFFFFF, 0x180F8, 0x112, 0x3F, 0x8000, 0x03, 0x0, 0xFF0005);
	initMcASP_Ser(ASP, 0xAAAA, 0x5555, 0, 0); //Even Ser Transmitter, odd receive, TRI-State
	initMcASP_Pins(0, 0xFF00FFFF);
	initMcASP_stuff(ASP, 0, 0x7, 0);
	initMcASP_launch(ASP);
}

static int checkLoop(int left, int right) // only for McASP0!
{
	int i=0;
	int error=0;
	while((McASP0[SRCTL0] & 0x00000010) != 0x00000010); // ready to transmit new data?
	if(McASP0[XSTAT] & 0x8) // even channel number? (left or right for I²S)
	{
		for(i=0; i<15; i++)
		{
			McASP0[XBUF0 +i]=left;
			i++;
		}
	}
	else
	{
		for(i=0; i<15; i++)
		{
			McASP0[XBUF0+i]=right;
			i++;
		}
	}
	int read=0;
	while((McASP0[SRCTL1] & 0x00000020) != 0x00000020); // new data available?
	for(i=1; i<15; i++)
	{
		read = McASP0[XBUF0 +i];
		if((read != left) && (read != right) && (read != 0x5F0AF50A))
			error=2; // set breakpoint here for error detection! ******************************************************************
		i++;
	}
	return error;
}

static void checkI2S(int left, int right)
{
		while((McASP0[SRCTL0] & 0x00000010) != 0x00000010); // ready to transmit new data?
		if(McASP0[XSTAT] & 0x8) // even channel number? (left or right for I²S)
			McASP0[XBUF0]=left;
		else
			McASP0[XBUF0]=right;
}
/*
static void initMcASP0(void) // example initialization with fixed values for I2S, not using the variable initialization methods
{
	McASP0[GBLCTL]=0x0;
	McASP0[PWRDEMU]=0x1;
	McASP0[XMASK]=0xFFFFFFFF; 	// No replacing of Bits
	McASP0[XFMT]= 0x180F8; 		// 01 delay, 1 MSB First, 0 Pad, 0 value, 0xF SlotSize 32, 1 Peripheral Bus, 000 no rotation
	McASP0[AFSXCTL]= 0x112; 	// 0x2 Slots, 00 reserved, 1 Word, 00 reserved, 1 internal, 0 rising edge
	McASP0[ACLKXCTL]= 0x3F;		// 0 rising edge, 0 Sync, 1 internal, 0x1F Divide by 32
	McASP0[AHCLKXCTL]= 0x8000;	// 1 internal, 0 rising edge, 00 reserved, 0 divide AUXCLK by 1
	McASP0[XTDM]= 0x3; 			// slots 0 and 1 active
	McASP0[XINTCTL]= 0x0; 		// no interrupts
	McASP0[XCLKCHK]= 0xFF0005; 	// 0xFF maximum, 0x00 minimum, 0 autoswitch disabled, 000 reserved, 0x5 prescaler 32
	McASP0[SRCTL0]= 0x1;		// 0 RRDY, 0 XRDY, 0 3-State, 01 Transmitter
	McASP0[PFUNC]= 0x0; 		// McASP occupies all Pins
	McASP0[PDIR]= McASP0[PDIR] | 0x1E00000F; 	// 1E00000F Frame Sync, HCLK, CLK, AMUTE AXR0-7 as Outputs for McASP0
	McASP0[DITCTL]= 0x0; 		// DIT mode disabled
	McASP0[DLBCTL]= 0x0; 		// Loopback disabled
	McASP0[AMUTE]= 0x0; 		// AMUTE disabled
	McASP0[GBLCTL]= McASP0[GBLCTL] | 0x202; // Enable RHCLK and XHCLK
	while(!(McASP0[GBLCTL] & 0x202));
	delayCycles(1000);
	McASP0[GBLCTL]= McASP0[GBLCTL] | 0x101; // Enable RCLK and XCLK
	while(!(McASP0[GBLCTL] & 0x101));
	delayCycles(1000);
	McASP0[XSTAT]= 0xFFFF;		// Clear all status registers
	McASP0[RSTAT]= 0xFFFF;
	McASP0[GBLCTL]= McASP0[GBLCTL] | 0x404; // Enable Serializers
	while(!(McASP0[GBLCTL] & 0x404));
	delayCycles(1000);
	McASP0[XBUF0]= 0x5F0AF50A;		// Sending AAAA in the first comand
	McASP0[GBLCTL]= McASP0[GBLCTL] | 0x808; // Enable State Machines
	while(!(McASP0[GBLCTL] & 0x808));
	delayCycles(1000);
	McASP0[GBLCTL]= McASP0[GBLCTL] | 0x1010; // Enable Frame Syncs
	while(!(McASP0[GBLCTL] & 0x1010));
}
*/