Quantcast
Channel: Processors forum - Recent Threads
Viewing all articles
Browse latest Browse all 17527

fault in Transfer Data between arm and dsp with CHNL and SIO in dsplink

$
0
0
Hi

i used below hardware :
1. omapl137evm ( rev g )
i used below software :

1. dsplink-1_61_03-prebuilt 

2. bios_setuplinux_5_33_05

3. ti_cgt_c6000_6.1.9_setup_linux_x86

4. xdctools_setuplinux_3_10_05_61

5. pspdrivers_01_30_00_05

6. OMAPL137_arm_setuplinux_1_00_00_11

7.kernel 2.6.18

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

i want used MSGQ and NOTIFY for transfer message and CHNL for transfer data between arm and dsp in omapl137evm with dsplink.

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

i used this code for armside.

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//	INCLUDES
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <dsplink.h>
#include <proc.h>
#include <chnl.h>
#include <msgq.h>
#include <pool.h>
#include <SDSP.h>
#include <system_os.h>
#include <stdio.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/delay.h>
#include <asm/segment.h>
#include <string.h>
#include <stdlib.h>
#include <dirent.h>
#include <assert.h>
#include <sys/mman.h>
#include <notify.h>
#include <signal.h>

#define DDRVNAME  "dsp"
#define IC_NAME(drvName)  drvName
#define OC_NAME(drvName)  drvName
#define IC IC_NAME(DDRVNAME)
#define OC OC_NAME(DDRVNAME)

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//	FOR POOLING
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define NUM_ARGS 2
#define ARG_SIZE 256
#define SAMPLE_POOL_ID  0
#define NUMMSGPOOLS     4
#define NUMMSGINPOOL0   2
#define NUMMSGINPOOL1   2
#define NUMMSGINPOOL2   1
#define NUMMSGINPOOL3   4
#define APP_BUFFER_SIZE DSPLINK_ALIGN (sizeof (ControlMsg), DSPLINK_BUF_ALIGN)

//////////////////////////////////////////////////////////////////

#define DATA_LEN	256

#define DATA_LEN_Byte  (DATA_LEN*4)

STATIC Uint32  SCALE_BufferSizeOut = DSPLINK_ALIGN (DATA_LEN_Byte,DSPLINK_BUF_ALIGN);
STATIC Uint32  SCALE_BufferSizeIn  = DSPLINK_ALIGN (DATA_LEN_Byte,DSPLINK_BUF_ALIGN);

STATIC Char8 * SCALE_BuffersIn [1] ;
STATIC Char8 * SCALE_BuffersOut[1] ;

STATIC ChannelIOInfo SCALE_IOReqIn,SCALE_IOReqOut;

#define CHNL_ID_OUTPUT     0

#define CHNL_ID_INPUT      1

//////////////////////////////////////////////////////////////////

static char notify_status = 0;
static char ReceiveFlag = 0;
static char mode = 0;

typedef struct ControlMsg 
{
    	MSGQ_MsgHeader header;
    	Uint16 command;
    	Char8 arg1[ARG_SIZE];
} ControlMsg;

ControlMsg *msg;
DSP_STATUS status = DSP_SOK;
Uint8 processorId = 0;

Uint16 msgId = 0;

char EndFlag1 = 0;
char EndFlag2 = 0;

Char8 arg1[ARG_SIZE];
Char8 printmessage[ARG_SIZE];
void sendControlMsg(Uint16 cmd,Char8 *arg1);
void signalHandler(int sig);

#define USERINPUTMAXNUMCHARS 70
#define DELIMITERS " "

#if defined ZCPY_LINK
#define SAMPLEMQT_CTRLMSG_SIZE  ZCPYMQT_CTRLMSG_SIZE
STATIC ZCPYMQT_Attrs mqtAttrs;
#endif


STATIC Uint32 SampleBufSizes[NUMMSGPOOLS] =
{
    APP_BUFFER_SIZE,
    SAMPLEMQT_CTRLMSG_SIZE,
    DSPLINK_ALIGN (sizeof(MSGQ_AsyncLocateMsg),DSPLINK_BUF_ALIGN),
    DSPLINK_ALIGN (DATA_LEN_Byte,DSPLINK_BUF_ALIGN)
};


STATIC Uint32 SampleNumBuffers[NUMMSGPOOLS] =
{
    NUMMSGINPOOL0,
    NUMMSGINPOOL1,
    NUMMSGINPOOL2,
    NUMMSGINPOOL3
};


#if defined ZCPY_LINK
STATIC SMAPOOL_Attrs SamplePoolAttrs =
{
    NUMMSGPOOLS,
    SampleBufSizes,
    SampleNumBuffers,
    FALSE 
};
#endif

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//	Message Naming
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
STATIC Char8 SampleGppMsgqName[DSP_MAX_STRLEN] = "GPPMSGQ1";
STATIC Char8 SampleDspMsgqName[DSP_MAX_STRLEN] = "DSPMSGQ";
STATIC MSGQ_Queue SampleGppMsgq = (Uint32) MSGQ_INVALIDMSGQ;
STATIC MSGQ_Queue SampleDspMsgq = (Uint32) MSGQ_INVALIDMSGQ;
Char8 dspMsgqName[DSP_MAX_STRLEN];

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//	FOR LOADING
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
extern LINKCFG_Object LINKCFG_config;

STATIC
NORMAL_API
Void
MP_LIST_Notify (IN     Uint32 eventNo,
                IN OPT Pvoid  arg,
                IN OPT Pvoid  info) ;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//						INITIALIZATION
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
NORMAL_API DSP_STATUS DSP_Create(IN Char8* dspExecutable, IN Char8* strNumIterations, IN Uint8 processorId)
{
    	Uint32 numArgs = NUM_ARGS;
    	MSGQ_LocateAttrs syncLocateAttrs;
    	Char8* args[NUM_ARGS];
	
	ChannelAttrs  chnlAttrInput ;
	ChannelAttrs  chnlAttrOutput ;
	
	SYSTEM_0Print("Entered DSP_Create ()\n");
	
	//////////////////////////////
	//PROC_attach
	//////////////////////////////
    	status = PROC_setup(NULL);
    	if (DSP_SUCCEEDED(status))
    	{
        	status = PROC_attach(processorId, NULL);
        	if (DSP_FAILED(status))
        	{
            		SYSTEM_1Print("PROC_attach () failed. Status = [0x%x]\n", status);
        	}
    	}
    	
	//////////////////////////////
	//POOL_open
	//////////////////////////////	
    	if (DSP_SUCCEEDED(status))
    	{
        	status = POOL_open(POOL_makePoolId(processorId, SAMPLE_POOL_ID), &SamplePoolAttrs);
        	if (DSP_FAILED(status))
        	{
            		SYSTEM_1Print("POOL_open () failed. Status = [0x%x]\n", status);
        	}
    	}
    	else
    	{
        	SYSTEM_1Print("PROC_setup () failed. Status = [0x%x]\n", status);
    	}
    	
	//////////////////////////////
	//MSGQ_open
	//////////////////////////////	
    	if (DSP_SUCCEEDED(status))
    	{
        	status = MSGQ_open(SampleGppMsgqName, &SampleGppMsgq, NULL);
        	if (DSP_FAILED(status))
        	{
            		SYSTEM_1Print("MSGQ_open () failed. Status = [0x%x]\n", status);
        	}
    	}
    	
	//////////////////////////////
	//MSGQ_setErrorHandler
	//////////////////////////////
    	if (DSP_SUCCEEDED(status))
    	{
       	 	status = MSGQ_setErrorHandler(SampleGppMsgq, POOL_makePoolId(processorId, SAMPLE_POOL_ID));
        	if (DSP_FAILED(status))
        	{
            	SYSTEM_1Print("MSGQ_setErrorHandler () failed. Status = [0x%x]\n", status);
        	}
    	}
    	
	//////////////////////////////
	//Set the notifier 
	//////////////////////////////
    	if (DSP_SUCCEEDED(status)) 
    	{
        	status = NOTIFY_register (processorId,
                                      		0,
                                      		5,
                                      		(FnNotifyCbck) MP_LIST_Notify,
                                      		0) ;
     		if (DSP_FAILED (status)) 
		{
                	SYSTEM_1Print ("NOTIFY_register() failed. Status = [0x%x]\n",
                                	status) ;
      		}
    	}
    	
	//////////////////////////////
	//PROC_load
	//////////////////////////////
    	if (DSP_SUCCEEDED(status))
    	{
        	args [0] = strNumIterations;
        	{
            		status = PROC_load(processorId, dspExecutable, numArgs, args);
        	}
        	if (DSP_FAILED(status))
        	{
            		SYSTEM_1Print("PROC_load () failed. Status = [0x%x]\n", status);
        	}
    	}
    	
	//////////////////////////////
	//Create a channel to DSP
	//////////////////////////////
	if (DSP_SUCCEEDED (status)) 
	{
		chnlAttrOutput.mode      = ChannelMode_Output     ;
		chnlAttrOutput.endianism = Endianism_Default      ;
		chnlAttrOutput.size      = ChannelDataSize_32bits ;

		status = CHNL_create (processorId, CHNL_ID_OUTPUT, &chnlAttrOutput);
		if (DSP_FAILED (status)) 
		{
			SYSTEM_1Print("CHNL_create (CHNL_ID_OUTPUT) failed. Status = [0x%x]\n", status) ;
		}
		else
		{
			SYSTEM_0Print("CHNL_create (CHNL_ID_OUTPUT) success.\n") ;
		}
	}

	//////////////////////////////
	//Create a channel from DSP
	//////////////////////////////
	if (DSP_SUCCEEDED (status)) 
	{
		chnlAttrInput.mode      = ChannelMode_Input      ;
		chnlAttrInput.endianism = Endianism_Default      ;
		chnlAttrInput.size      = ChannelDataSize_32bits ;

		status = CHNL_create (processorId, CHNL_ID_INPUT, &chnlAttrInput) ;
		if (DSP_FAILED (status)) 
		{
			SYSTEM_1Print("CHNL_create () failed. Status = [0x%x]\n", status) ;
		}
		else
		{
			SYSTEM_0Print("CHNL_create (CHNL_ID_INPUT) success.\n") ;
		}
	}

	///////////////////////////////////////////////////
	//Allocate buffer(s) for data transfer to DSP.
	///////////////////////////////////////////////////
	if (DSP_SUCCEEDED (status)) 
	{
		status = CHNL_allocateBuffer (	processorId,
						CHNL_ID_OUTPUT,
						SCALE_BuffersOut,     	//Pointer to receive array of allocated buffers
						SCALE_BufferSizeOut , 	//Size of each buffer
						1) ;		 	//Number of buffers to allocate
		if (DSP_FAILED (status)) 
		{
			SYSTEM_1Print("CHNL_allocateBuffer (1) failed. Status = [0x%x]\n",status);
		}
		else
		{
			SYSTEM_0Print("CHNL_allocateBuffer (1) success.\n");
		}
	}
	if (DSP_SUCCEEDED (status)) 
	{
        	status = CHNL_allocateBuffer (	processorId,
						CHNL_ID_INPUT,
						SCALE_BuffersIn,     	//Pointer to receive array of allocated buffers
						SCALE_BufferSizeIn , 	//Size of each buffer
						1) ;		 	//Number of buffers to allocate
		if (DSP_FAILED (status)) 
		{
			SYSTEM_1Print("CHNL_allocateBuffer (2) failed. Status = [0x%x]\n",status);
		}
		else
		{
			SYSTEM_0Print("CHNL_allocateBuffer (2) success.\n");
		}
	}
	
	//////////////////////////////
	//PROC_start 
	//////////////////////////////
    	if (DSP_SUCCEEDED(status))
    	{
        	status = PROC_start(processorId);
        	if (DSP_FAILED(status))
        	{
            		SYSTEM_1Print("PROC_start () failed. Status = [0x%x]\n", status);
        	}
        	else
		{
			SYSTEM_0Print("PROC_start () success.\n");
		}
    	}
    	
	//////////////////////////////
	//MSGQ_transportOpen
	//////////////////////////////	
    	if (DSP_SUCCEEDED(status))
    	{
        	mqtAttrs.poolId = POOL_makePoolId(processorId, SAMPLE_POOL_ID);
        	status = MSGQ_transportOpen(processorId, &mqtAttrs);
        	if (DSP_FAILED(status))
        	{
            		SYSTEM_1Print("MSGQ_transportOpen () failed. Status = [0x%x]\n", status);
        	}
        	else
		{
			SYSTEM_0Print("MSGQ_transportOpen () success.\n");
		}
     	}
     	
	//////////////////////////////
	//MSGQ_locate
	//////////////////////////////	
    	if (DSP_SUCCEEDED(status))
    	{
        	syncLocateAttrs.timeout = WAIT_FOREVER;
        	status = DSP_ENOTFOUND;
        	SYSTEM_2Sprint(dspMsgqName, "%s%d", (Uint32) SampleDspMsgqName, processorId);
        	while ((status == DSP_ENOTFOUND) || (status == DSP_ENOTREADY))
        	{
            		status = MSGQ_locate(dspMsgqName, &SampleDspMsgq, &syncLocateAttrs);
            		if ((status == DSP_ENOTFOUND) || (status == DSP_ENOTREADY))
            		{
				SYSTEM_0Print("DSP_ENOTFOUND || DSP_ENOTREADY.\n");
                		SYSTEM_Sleep(100000);
            		}
            		else if (DSP_FAILED(status))
            		{
                		SYSTEM_1Print("MSGQ_locate () failed. Status = [0x%x]\n", status);
            		}
        	}
    	}
    	
    	SYSTEM_0Print("Finish DSP_Create ()\n");

	return status;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//						EXECUTION
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
NORMAL_API DSP_STATUS DSP_Execute(IN Uint32 numIterations, Uint8 processorId)
{
	char *ptr;
	char inbuf[USERINPUTMAXNUMCHARS];
	int i;
	Uint32 AudioPtrSize;
	Int32 *AudioPtrBuff;
	
	SYSTEM_0Print("Entered DSP_Execute ()\n");
	
	sprintf(printmessage,"ARM :Wake UP\n");
	SYSTEM_0Print(printmessage);
	
	(void) signal(SIGINT, signalHandler);
	
	SYSTEM_0Print("Entered DSP_SUCCEEDED ()\n") ;
	if (DSP_SUCCEEDED (status)) 
	{
		SCALE_IOReqIn.buffer = SCALE_BuffersIn [0] ;
		SCALE_IOReqIn.size   = SCALE_BufferSizeIn;
		SCALE_IOReqOut.buffer= SCALE_BuffersOut [0] ;
		SCALE_IOReqOut.size  = SCALE_BufferSizeOut;
	}
	
	//////////////////////////////
	//Receive Message
	//////////////////////////////
        status = MSGQ_get(SampleGppMsgq,WAIT_FOREVER, (MsgqMsg *) &msg);
	
	if (DSP_FAILED(status))
	{
		SYSTEM_1Print("MSGQ_get () failed. Status = [0x%x]\n", status);
	}
	
	if (msg->command == 0x01)
	{
		SYSTEM_1Print("DSP :%s\n", (Uint32) msg->arg1);
		
		sprintf(arg1,"Blink");
		sprintf(printmessage,"ARM :BLINK_GPIO012\n");
		SYSTEM_0Print(printmessage);
		sendControlMsg(0x0a,arg1);
	}
	
	notify_status = 0;
	
	ReceiveFlag = 1;
	
	while ( EndFlag1 == 0 )
	{
		while ( EndFlag2 == 0 )
		{
			SYSTEM_0Print("ARM :Enter_Command = ");
			
			fgets( inbuf, USERINPUTMAXNUMCHARS, stdin );
			
			ptr = strtok( inbuf, DELIMITERS );
			
			usleep(1000);
					
			if ( EndFlag2 == 0 )
			{
				switch ( *ptr ) 
				{
					case 'a':
					{
						/////////////////////////////////////////////
						// Send Message
						/////////////////////////////////////////////
						sprintf(arg1,"GPIO_0_12");
						sprintf(printmessage,"ARM :BLINK_GPIO012\n");
						SYSTEM_0Print(printmessage);
						sendControlMsg(0x0a,arg1);
						
						*ptr = 0;
						
						break;
					}
					case 'b':
					{
					  	/////////////////////////////////////////////
						// Send Message
						/////////////////////////////////////////////
						sprintf(arg1,"GPIO_0_13");
						sprintf(printmessage,"ARM :BLINK_GPIO013\n");
						SYSTEM_0Print(printmessage);
						sendControlMsg(0x0b,arg1);
						
						*ptr = 0;
						
						break;
					}
					case 'c':
					{
						/////////////////////////////////////////////
						// Send Message
						/////////////////////////////////////////////
						sprintf(arg1,"GPIO_0_14");
						sprintf(printmessage,"ARM :BLINK_GPIO014\n");
						SYSTEM_0Print(printmessage);
						sendControlMsg(0x0c,arg1);
						
						*ptr = 0;
						
						break;
					}
					case 'd':
					{
					    /////////////////////////////////////////////
						// Send Message
						/////////////////////////////////////////////
						sprintf(arg1,"Data_transfer");
						sprintf(printmessage,"ARM :Data_transfer\n");
						SYSTEM_0Print(printmessage);
						sendControlMsg(0x0d,arg1);
						
						/////////////////////////////////////////////
						// Build Data
						/////////////////////////////////////////////
						AudioPtrBuff = (Int32 *) (SCALE_IOReqIn.buffer);
							
						for ( i=0 ; i<DATA_LEN ; i++ )
						{
							*AudioPtrBuff = 5;
							AudioPtrBuff++;
						}
							
						AudioPtrSize = (SCALE_IOReqIn.size);
							
						/////////////////////////////////////////////
						// Issue 'filled' buffer to the channel.
						/////////////////////////////////////////////
						status = CHNL_issue (processorId,CHNL_ID_OUTPUT,&SCALE_IOReqIn);
							
						if (DSP_FAILED (status)) 
						{
							SYSTEM_1Print ("CHNL_issue (CHNL_ID_OUTPUT) failed. Status = [0x%x]\n",status) ;
						}
							
						//////////////////////////////////////////////
						// Reclaim 'empty' buffer from the channel
						//////////////////////////////////////////////
						status = CHNL_reclaim (processorId,CHNL_ID_OUTPUT,2000,&SCALE_IOReqIn);
							
						if (DSP_FAILED (status)) 
						{
							SYSTEM_1Print ("CHNL_reclaim (CHNL_ID_OUTPUT) failed. Status = [0x%x]\n",status) ;
						}
							
						///////////////////////////////////////////////
						// Issue 'empty' buffer to the channel.
						///////////////////////////////////////////////
						status = CHNL_issue (processorId,CHNL_ID_INPUT,&SCALE_IOReqOut);
							
						if (DSP_FAILED (status)) 
						{
							SYSTEM_1Print ("CHNL_issue (CHNL_ID_INPUT) failed. Status = [0x%x]\n",status) ;
						}
						/////////////////////////////////////////////////
						// Reclaim 'filled' buffer from the channel
						/////////////////////////////////////////////////
						status = CHNL_reclaim (processorId,CHNL_ID_INPUT,2000,&SCALE_IOReqOut) ;
							
						if (DSP_FAILED (status)) 
						{
							SYSTEM_1Print ("CHNL_reclaim (CHNL_ID_INPUT) failed. Status = [0x%x]\n",status) ;
						}
						
						/////////////////////////////////////////////
						// Print 20 Receive Data
						/////////////////////////////////////////////
						AudioPtrBuff=(Int32 *)SCALE_IOReqOut.buffer;
						
						AudioPtrSize=(SCALE_IOReqOut.size);
						
						for ( i=0 ; i<20 ; i++ )
						{
						    SYSTEM_1Print("%d,\n", (Uint32)(*AudioPtrBuff));
						    AudioPtrBuff++;
						}
						
						////////////////////////////////////////////////////////
						
						status = DSP_SOK;
						
						*ptr = 0;
						
						break;
					}
					case 'e':
					{
						notify_status = 0;
						
						sprintf(arg1,"EXIT");
						sprintf(printmessage,"ARM :TURN OFF\n");
						SYSTEM_0Print(printmessage);
						sendControlMsg(0x0e,arg1);
						
						*ptr = 0;
						
						EndFlag2 = 1;
						
						break;
					}
				}
			}
		}
		
		if ( notify_status == 1 )
		{
			notify_status = 0;
			
			ReceiveFlag = 0;
			
			EndFlag1 = 1;
			
			if (mode == 0x02)
			{
				SYSTEM_1Print("DSP :%s\n", (Uint32) msg->arg1);
			}
		}
	}
	
	usleep(1000);
	
	SYSTEM_0Print("Finish DSP_Create ()\n");
		
	return status;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//						FINALIZATION
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
NORMAL_API Void DSP_Delete(Uint8 processorId)
{
    	DSP_STATUS tmpStatus = DSP_SOK;
	
	SYSTEM_0Print("Entered DSP_Delete ()\n");
	
	//////////////////////////////
	//MSGQ_release
	//////////////////////////////
    	status = MSGQ_release(SampleDspMsgq);
    	if (DSP_FAILED(status))
    	{
        	SYSTEM_1Print("MSGQ_release () failed. Status = [0x%x]\n", status);
    	}

	//////////////////////////////
	//MSGQ_transportClose
	//////////////////////////////
    	tmpStatus = MSGQ_transportClose(processorId);
    	if (DSP_SUCCEEDED(status) && DSP_FAILED(tmpStatus))
    	{
        	status = tmpStatus;
        	SYSTEM_1Print("MSGQ_transportClose () failed. Status = [0x%x]\n", status);
    	}
	//////////////////////////////
	//PROC_stop
	//////////////////////////////
    	tmpStatus = PROC_stop(processorId);
    	if (DSP_SUCCEEDED(status) && DSP_FAILED(tmpStatus))
    	{
       	 	status = tmpStatus;
        	SYSTEM_1Print("PROC_stop () failed. Status = [0x%x]\n", status);
    	}

	//////////////////////////////
	//Unregister notification 
	//////////////////////////////
    	tmpStatus = NOTIFY_unregister (processorId,
                                   	0,
                                   	5,
                                   	(FnNotifyCbck) MP_LIST_Notify,
                                   	0) ;
    	if (DSP_SUCCEEDED (status) && DSP_FAILED (tmpStatus)) 
    	{
        	status = tmpStatus ;
        	SYSTEM_1Print ("NOTIFY_unregister () failed. Status = [0x%x]\n",
                        	status) ;
    	}
	//////////////////////////////
	//MSGQ_setErrorHandler
	//////////////////////////////
    	tmpStatus = MSGQ_setErrorHandler(MSGQ_INVALIDMSGQ, MSGQ_INVALIDMSGQ);
    	if (DSP_SUCCEEDED(status) && DSP_FAILED(tmpStatus))
    	{
        	status = tmpStatus;
        	SYSTEM_1Print("MSGQ_setErrorHandler () failed. Status = [0x%x]\n", status);
    	}

	//////////////////////////////
	//MSGQ_close
	//////////////////////////////
    	tmpStatus = MSGQ_close(SampleGppMsgq);
    	if (DSP_SUCCEEDED(status) && DSP_FAILED(tmpStatus))
    	{
        	status = tmpStatus;
        	SYSTEM_1Print("MSGQ_close () failed. Status = [0x%x]\n", status);
    	}

	//////////////////////////////
	//POOL_close
	//////////////////////////////
    	tmpStatus = POOL_close(POOL_makePoolId(processorId, SAMPLE_POOL_ID));
    	if (DSP_SUCCEEDED(status) && DSP_FAILED(tmpStatus))
    	{
       	 	status = tmpStatus;
        	SYSTEM_1Print("POOL_close () failed. Status = [0x%x]\n", status);
    	}
	
	//////////////////////////////
	//PROC_detach
	//////////////////////////////
    	tmpStatus = PROC_detach(processorId);
    	if (DSP_SUCCEEDED(status) && DSP_FAILED(tmpStatus))
    	{
        	status = tmpStatus;
        	SYSTEM_1Print("PROC_detach () failed. Status = [0x%x]\n", status);
    	}

	//////////////////////////////
	//PROC_destroy
	//////////////////////////////	
    	tmpStatus = PROC_destroy();
    	if (DSP_SUCCEEDED(status) && DSP_FAILED(tmpStatus))
    	{
        	status = tmpStatus;
        	SYSTEM_1Print("PROC_destroy () failed. Status = [0x%x]\n", status);
    	}
    	
    	SYSTEM_0Print("Finish DSP_Delete ()\n");
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//						MAIN
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
NORMAL_API Void DSP_Main(IN Char8* dspExecutable, IN Char8* strNumIterations, IN Char8* strProcessorId)
{
  	Uint32 numIterations = 0;
  	Uint8 processorId = 0;

  	if (LINKCFG_config.dspConfigs[processorId]->dspObject->doDspCtrl == DSP_BootMode_Boot_Pwr)
  	{
		SYSTEM_0Print("DSP_BootMode_Boot_Pwr\n");
  	}
  	else if ( LINKCFG_config.dspConfigs[processorId]->dspObject->doDspCtrl == DSP_BootMode_NoBoot)
  	{
		SYSTEM_0Print("DSP_BootMode_NoBoot\n");
  	} 

  	if ((dspExecutable != NULL) && (strNumIterations != NULL))
  	{
    		numIterations = SYSTEM_Atoi(strNumIterations);

    		if (numIterations > 0xFFFF)
    		{
        		status = DSP_EINVALIDARG;
        		SYSTEM_1Print("ERROR! Invalid arguments specified.\n Max iterations = %d\n", 0xFFFF);
    		}
    		else
    		{
      			processorId = SYSTEM_Atoi(strProcessorId);

      			if (processorId >= MAX_DSPS)
      			{
        			SYSTEM_1Print("== Error: Invalid processor id %d specified ==\n", processorId);
        			status = DSP_EFAIL;
      			}

      			if (DSP_SUCCEEDED(status))
      			{
          			status = DSP_Create(dspExecutable, strNumIterations, processorId);

          			if (DSP_SUCCEEDED(status))
          			{
              				status = DSP_Execute(numIterations, processorId);
          			}

          			DSP_Delete(processorId);
      			}
    		}
  	}
  	else
  	{
      		status = DSP_EINVALIDARG;
      		SYSTEM_0Print("ERROR! Invalid arguments specified for DSP application\n");
  	}
}

////////////////////////////////////////////////////////////////////////////////////////////////

STATIC
NORMAL_API
Void
MP_LIST_Notify (IN Uint32 eventNo,IN OPT Pvoid arg,IN OPT Pvoid info)
{
	notify_status = 1;
	
	if ( ReceiveFlag == 1 )
	{
		//////////////////////////////
		//Receive Message
		//////////////////////////////
		status = MSGQ_get(SampleGppMsgq,WAIT_FOREVER,(MsgqMsg *)&msg);
		
		if (DSP_FAILED(status))
		{
			SYSTEM_1Print("MSGQ_get () failed. Status = [0x%x]\n",status);
		}
		else
		{
			mode = msg->command;
		}
	}
	
	return;
}

void sendControlMsg( unsigned short int cmd,Char8 *arg1)
{
	//////////////////////////////
	//send message
	//////////////////////////////
	if (DSP_SUCCEEDED(status))
        {
               	msgId = MSGQ_getMsgId(msg);
                MSGQ_setMsgId(msg, msgId);
		msg->command = cmd;
		sprintf(msg->arg1,arg1);
                status = MSGQ_put(SampleDspMsgq,(MsgqMsg) msg);
                if (DSP_FAILED(status))
                {
                   	MSGQ_free((MsgqMsg) msg);
                    	SYSTEM_1Print("MSGQ_put () failed. Status = [0x%x]\n", status);
                }
        }
    	if (DSP_SUCCEEDED (status)) 
    	{
		status = NOTIFY_notify (processorId,0,5,(Uint32) 0);
		if (DSP_FAILED (status)) 
		{
                    	SYSTEM_1Print ("NOTIFY_notify () failed."" Status = [0x%x]\n",status) ;
      		}
    	}
    	
    	return;
}

void signalHandler(int sig)
{
	sprintf(arg1,"EXIT");
	sprintf(printmessage,"ARM :TURN OFF\n");
	SYSTEM_0Print(printmessage);
	sendControlMsg(0x0e,arg1);
	EndFlag2 = 1;
	usleep(1000);
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   i used below code for dspside :

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//						INCLUDES
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include "SDSPcfg.h"
#include <gbl.h>
#include <sys.h>
#include <sem.h>
#include <msgq.h>
#include <pool.h>
#include <notify.h>
#include <dsplink.h>
#include <platform.h>
#include <failure.h>
#include "SDSP_config.h"
#include "tskMessage.h"
#include <stdio.h>
#include <string.h>
#include <std.h> 
#include <sio.h>
#include <gio.h>
#include <iom.h>
#include <sys.h>
#include <tsk.h>
#include <idl.h>
#include <ecm.h>
#include <mem.h>
#include <log.h>
#include <c64.h>
#include <c6x.h>        
#include <ti/pspiom/cslr/cslr_gpio.h>
#include <ti/pspiom/cslr/soc_OMAPL137.h> 
#include <ti/pspiom/gpio/Gpio.h>

#include <dio.h>
#include <iom.h>

extern TSKMESSAGE_TransferInfo* info;

ControlMsg* msg;

Char arg1[ARG_SIZE];

Int sendControlMsg( Uint16 cmd,Char *arg1,TSKMESSAGE_TransferInfo* info);

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//						DSPLINK PARAMETERS
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
volatile char notify_flag = 0;
volatile char mode = 0;

#define FILEID  FID_APP_C
Uint8 dspMsgQName[DSP_MAX_STRLEN];
extern Uint16 numTransfers;
static Void TSKMPLIST_notify (Uint32 eventNo, Ptr arg, Ptr notifyinfo) ;

///////////////////// GPIO CONFIGURATION //////////////////////////////

#define LOW 		0x0
#define HIGH 		0x1

#define GPIO_BANK_1 	0x00

#define GPIO0_12_PIN    13
#define GPIO0_13_PIN    14
#define GPIO0_14_PIN    15
#define GPIO0_15_PIN    16

extern Gpio_Handle gpio;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#define DSPLINK_DRVNAME  "/dio_dsplink"
#define INPUT_CHNL_NAME(drvName)  drvName ## "0"
#define OUTPUT_CHNL_NAME(drvName)  drvName ## "1"
#define INPUT_CHANNEL	INPUT_CHNL_NAME(DSPLINK_DRVNAME)
#define OUTPUT_CHANNEL	OUTPUT_CHNL_NAME(DSPLINK_DRVNAME)

SIO_Handle inputStream,outputStream ;

#define DATA_LEN	256
#define DATA_LEN_Byte	(DATA_LEN*4)

Uint32 bufferSize = DATA_LEN_Byte;
Uint32 numBuffers = 1;
Char * buffer1 ;
Char * buffer2 ;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//						 GPIO CONFIGURATION FUNCTION
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Int GpioConfiguration(Void)
{
	Int status = SYS_OK;
	 
	Gpio_PinCmdArg UserPinCmdArg;
	
	UserPinCmdArg.pin = GPIO0_12_PIN;
	UserPinCmdArg.value = Gpio_Direction_Output;
	Gpio_setPinDir(gpio,&UserPinCmdArg);
	
	UserPinCmdArg.pin = GPIO0_12_PIN;
	UserPinCmdArg.value = HIGH;
	Gpio_setPinVal(gpio,&UserPinCmdArg);
	
	UserPinCmdArg.pin = GPIO0_13_PIN;
	UserPinCmdArg.value = Gpio_Direction_Output;
	Gpio_setPinDir(gpio,&UserPinCmdArg);
	
	UserPinCmdArg.pin = GPIO0_13_PIN;
	UserPinCmdArg.value = HIGH;
	Gpio_setPinVal(gpio,&UserPinCmdArg);
	
	UserPinCmdArg.pin = GPIO0_14_PIN;
	UserPinCmdArg.value = Gpio_Direction_Output;
	Gpio_setPinDir(gpio,&UserPinCmdArg);
	
	UserPinCmdArg.pin = GPIO0_14_PIN;
	UserPinCmdArg.value = HIGH;
	Gpio_setPinVal(gpio,&UserPinCmdArg);
	
	UserPinCmdArg.pin = GPIO0_15_PIN;
	UserPinCmdArg.value = Gpio_Direction_Output;
	Gpio_setPinDir(gpio,&UserPinCmdArg);
	
	UserPinCmdArg.pin = GPIO0_15_PIN;
	UserPinCmdArg.value = HIGH;
	Gpio_setPinVal(gpio,&UserPinCmdArg);
	
	return status; 
}  

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//						INITIALIZATION
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Int TSKMESSAGE_create(Void)
{
	Int status = SYS_OK;
	
	SIO_Attrs attrs = SIO_ATTRS;
	
	MSGQ_Attrs msgqAttrs = MSGQ_ATTRS;
	MSGQ_LocateAttrs syncLocateAttrs;
	
	//////////////////////////////
	//message allocating
	//////////////////////////////
    	info = MEM_calloc(DSPLINK_SEGID, sizeof(TSKMESSAGE_TransferInfo), DSPLINK_BUF_ALIGN);
    	if (info == NULL)
    	{
        	status = SYS_EALLOC;
        	SET_FAILURE_REASON(status);
    	}
    	else
    	{
        	info->numTransfers = numTransfers;
        	info->localMsgq = MSGQ_INVALIDMSGQ;
        	info->locatedMsgq = MSGQ_INVALIDMSGQ;
    	}
	//////////////////////////////////////////////////
	//Register notification for the event callback
	/////////////////////////////////////////////////
    	if (status == SYS_OK) 
	{
        	status = NOTIFY_register (ID_GPP,
                                  	0,
                                  	5,
                                  	(FnNotifyCbck) TSKMPLIST_notify,
                                  	info) ;
        	if (status != SYS_OK) 
		{
            		SET_FAILURE_REASON (status) ;
        	}
    	}
    	
    	////////////////////////////////////////
	//Create Input and Output Streams
	///////////////////////////////////////
    	if (status == SYS_OK) 
	{
		attrs.nbufs   = numBuffers;
		attrs.segid   = DSPLINK_SEGID;
		attrs.align   = DSPLINK_BUF_ALIGN;
		attrs.flush   = TRUE ;
		attrs.model   = SIO_ISSUERECLAIM;
		attrs.timeout = 2000;

		inputStream = SIO_create (INPUT_CHANNEL,SIO_INPUT,bufferSize,&attrs);
		
		outputStream = SIO_create (OUTPUT_CHANNEL,SIO_OUTPUT,bufferSize,&attrs);

		if ((inputStream == NULL) || (outputStream == NULL)) 
		{
			status = SYS_EALLOC ;
			SET_FAILURE_REASON (status) ;
		}
	}

	////////////////////////////////////////
	//Allocating Buffers
	///////////////////////////////////////
	if (status == SYS_OK) 
	{
		status = POOL_alloc (SAMPLE_POOL_ID,(Ptr *) &buffer1,bufferSize) ;
		if (status != SYS_OK) 
		{
			SET_FAILURE_REASON (status) ;
		}
	}
	if (status == SYS_OK) 
	{
		status = POOL_alloc (SAMPLE_POOL_ID,(Ptr *) &buffer2,bufferSize) ;
		if (status != SYS_OK) 
		{
			SET_FAILURE_REASON (status) ;
		}
	}

    	if (status == SYS_OK)
    	{

        	SEM_new(&(info->notifySemObj), 0);

        	msgqAttrs.notifyHandle = &(info->notifySemObj);
        	msgqAttrs.pend = (MSGQ_Pend) SEM_pendBinary;
        	msgqAttrs.post = (MSGQ_Post) SEM_postBinary;

        	SYS_sprintf((Char *)dspMsgQName, "%s%d", DSP_MSGQNAME, GBL_getProcId());

		//////////////////////////////
		//message open
		//////////////////////////////
        	status = MSGQ_open((String)dspMsgQName, &info->localMsgq, &msgqAttrs);
       	 	if (status != SYS_OK)
        	{
            		SET_FAILURE_REASON(status);
        	}
        	else
        	{
			//////////////////////////////
			//MSGQ_setErrorHandler
			//////////////////////////////
            		MSGQ_setErrorHandler(info->localMsgq, SAMPLE_POOL_ID);

            		status = SYS_ENOTFOUND;
            		while ((status == SYS_ENOTFOUND) || (status == SYS_ENODEV))
            		{
                		syncLocateAttrs.timeout = SYS_FOREVER;
				//////////////////////////////
				//MSGQ_locate
				//////////////////////////////
                		status = MSGQ_locate(GPP_MSGQNAME, &info->locatedMsgq, &syncLocateAttrs);
                		if ((status == SYS_ENOTFOUND) || (status == SYS_ENODEV))
                		{
                    			TSK_sleep(1000);
                		}
            		}
        	}

        	info->sequenceNumber = 0;
	}
	
    	return status;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//						EXECUTION
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Int TSKMESSAGE_execute(Void)
{
	Int status = SYS_OK;
	
	Char * Audio_In  = (Char *) buffer1;
	Char * Audio_Out = (Char *) buffer2;
	Arg arg = 0;
	Int nmadus;
	Int receivedSize;
	int i;
	Gpio_PinCmdArg UserPinCmdArg;
	char EndFlag1 = 0;
	char EndFlag2 = 0;
	char EndFlag3 = 0;
	char EndFlag4 = 0;
	char EndFlag5 = 0;
	
	/////////////////////////////
	//allocating message
	////////////////////////////
    	status = MSGQ_alloc(SAMPLE_POOL_ID, (MSGQ_Msg*) &msg, APP_BUFFER_SIZE);

	//////////////////////////////
	//send message
	//////////////////////////////
    	if (status == SYS_OK)
    	{
		SYS_sprintf(arg1,"Wake UP");
		sendControlMsg(0x01,arg1,info);
    	}
    
	//////////////////////////////
    	//GPIO CONFIGURATION
	//////////////////////////////
	GpioConfiguration();
	
	if (status == SYS_OK)
	{
		while ( EndFlag1 == 0 )
		{
			switch (mode)
			{
				case 0x0a:
				{
					while ( EndFlag2 == 0 )
					{
						UserPinCmdArg.pin = GPIO0_12_PIN;
						UserPinCmdArg.value = LOW;
						Gpio_setPinVal(gpio,&UserPinCmdArg);
						TSK_sleep(1000);
						
						UserPinCmdArg.pin = GPIO0_12_PIN;
						UserPinCmdArg.value = HIGH;
						Gpio_setPinVal(gpio,&UserPinCmdArg);
						TSK_sleep(1000);
						
						if ( notify_flag == 1 )
						{
							if (status == SYS_OK)
							{
								switch (mode)
								{
									case 0x0b:
									{
										EndFlag2 = 1;
										
										break;
									}
									case 0x0c:
									{
										EndFlag2 = 1;
										
										break;
									}
									case 0x0d:
									{
										EndFlag2 = 1;
										
										break;
									}
									case 0x0e:
									{
										EndFlag1 = 1;
										EndFlag2 = 1;
									
										SYS_sprintf(arg1,"TURN OFF");
										sendControlMsg(0x02,arg1,info);
										
										break;
									}
								}
							}
							else
							{
								SET_FAILURE_REASON (status);
							}
							
							notify_flag = 0;
						}
					}
					
					EndFlag2 = 0;
					
					break;
				}
				case 0x0b:
				{
					while ( EndFlag3 == 0 )
					{
						UserPinCmdArg.pin = GPIO0_13_PIN;
						UserPinCmdArg.value = LOW;
						Gpio_setPinVal(gpio,&UserPinCmdArg);
						TSK_sleep(1000);
				
						UserPinCmdArg.pin = GPIO0_13_PIN;
						UserPinCmdArg.value = HIGH;
						Gpio_setPinVal(gpio,&UserPinCmdArg);
						TSK_sleep(1000);
						
						if ( notify_flag == 1 )
						{
							if (status == SYS_OK)
							{
								switch (mode)
								{
									case 0x0a:
									{
										EndFlag3 = 1;
										
										break;
									}
									case 0x0c:
									{
										EndFlag3 = 1;
										
										break;
									}
									case 0x0d:
									{
										EndFlag3 = 1;
										
										break;
									}
									case 0x0e:
									{
										EndFlag1 = 1;
										EndFlag3 = 1;
									
										SYS_sprintf(arg1,"TURN OFF");
										sendControlMsg(0x02,arg1,info);
										
										break;
									}
								}
							}
							else
							{
								SET_FAILURE_REASON (status);
							}
							
							notify_flag = 0;
						}
					}
					
					EndFlag3 = 0;
					
					break;
				}
				case 0x0c:
				{
					while ( EndFlag4 == 0 )
					{
						UserPinCmdArg.pin = GPIO0_14_PIN;
						UserPinCmdArg.value = LOW;
						Gpio_setPinVal(gpio,&UserPinCmdArg);
						TSK_sleep(1000);
				
						UserPinCmdArg.pin = GPIO0_14_PIN;
						UserPinCmdArg.value = HIGH;
						Gpio_setPinVal(gpio,&UserPinCmdArg);
						TSK_sleep(1000);
						
						if ( notify_flag == 1 )
						{
							if (status == SYS_OK)
							{
								switch (mode)
								{
									case 0x0a:
									{
										EndFlag4 = 1;
										
										break;
									}
									case 0x0b:
									{
										EndFlag4 = 1;
										
										break;
									}
									case 0x0d:
									{
										EndFlag4 = 1;
										
										break;
									}
									case 0x0e:
									{
										EndFlag1 = 1;
										EndFlag4 = 1;
									
										SYS_sprintf(arg1,"TURN OFF");
										sendControlMsg(0x02,arg1,info);
										
										break;
									}
								}
							}
							else
							{
								SET_FAILURE_REASON (status);
							}
							
							notify_flag = 0;
						}
					}
					
					EndFlag4 = 0;
					
					break;
				}
				case 0x0d:
				{
					while ( EndFlag5 == 0 )
					{
						///////////////////////////////////////////////
						// Issue 'empty' buffer to the channel.
						///////////////////////////////////////////////
						status = SIO_issue (inputStream,Audio_In,bufferSize,arg);
							
						if (status == SYS_OK) 
						{
							/////////////////////////////////////////////////
							// Reclaim 'filled' buffer from the channel
							/////////////////////////////////////////////////
							nmadus = SIO_reclaim (inputStream,(Ptr *) &Audio_In,&arg);
							
							receivedSize = nmadus;
						}
						
						/////////////////////////////////////////////
						// Processing Data
						/////////////////////////////////////////////
						for ( i=0 ;i<DATA_LEN ; i++ )
						{
							Audio_Out[i] = 2 * Audio_In[i];
						}

						///////////////////////////////////////////////
						// Issue 'filled' buffer to the channel.
						///////////////////////////////////////////////
						status = SIO_issue (outputStream,Audio_Out,receivedSize,arg);
							
						if (status == SYS_OK) 
						{
							/////////////////////////////////////////////////
							// Reclaim 'empty' buffer from the channel
							/////////////////////////////////////////////////
							SIO_reclaim (outputStream,(Ptr *)&(Audio_Out),&arg);
						}
						
						status = SYS_OK;
						
					
						if ( notify_flag == 1 )
						{
							if (status == SYS_OK)
							{
								switch (mode)
								{
									case 0x0a:
									{
										EndFlag5 = 1;
										
										break;
									}
									case 0x0b:
									{
										EndFlag5 = 1;
										
										break;
									}
									case 0x0c:
									{
										EndFlag5 = 1;
										
										break;
									}
									case 0x0e:
									{
										EndFlag1 = 1;
										EndFlag5 = 1;
									
										SYS_sprintf(arg1,"TURN OFF");
										sendControlMsg(0x02,arg1,info);
										
										break;
									}
								}
							}
							else
							{
								SET_FAILURE_REASON (status);
							}
							
							notify_flag = 0;
						}
					}
					
					EndFlag5 = 0;
					
					break;
				}
			}
		}
		
		UserPinCmdArg.pin = GPIO0_12_PIN;
		UserPinCmdArg.value = HIGH;
		Gpio_setPinVal(gpio,&UserPinCmdArg);
		
		UserPinCmdArg.pin = GPIO0_13_PIN;
		UserPinCmdArg.value = HIGH;
		Gpio_setPinVal(gpio,&UserPinCmdArg);
		
		UserPinCmdArg.pin = GPIO0_14_PIN;
		UserPinCmdArg.value = HIGH;
		Gpio_setPinVal(gpio,&UserPinCmdArg);
		
		UserPinCmdArg.pin = GPIO0_15_PIN;
		UserPinCmdArg.value = HIGH;
		Gpio_setPinVal(gpio,&UserPinCmdArg);
		
		TSK_sleep(100);
	}
	else
	{
		SET_FAILURE_REASON (status);
	}
	
	return status;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//						FINALIZATION
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Int TSKMESSAGE_delete(Void)
{
	Int status = SYS_OK;
    	Int tmpStatus = SYS_OK;
    	Bool freeStatus = FALSE;
	
	//////////////////////////////
	//MSGQ_release
	//////////////////////////////
    	if (info->locatedMsgq != MSGQ_INVALIDMSGQ)
    	{
        	status = MSGQ_release(info->locatedMsgq);
        	if (status != SYS_OK)
        	{
            		SET_FAILURE_REASON(status);
        	}
    	}
	//////////////////////////////
	//MSGQ_setErrorHandler
	//////////////////////////////
    	MSGQ_setErrorHandler(MSGQ_INVALIDMSGQ, POOL_INVALIDID);

	//////////////////////////////
	//MSGQ_close
	//////////////////////////////
    	if (info->localMsgq != MSGQ_INVALIDMSGQ)
    	{
        	tmpStatus = MSGQ_close(info->localMsgq);
        	if ((status == SYS_OK) && (tmpStatus != SYS_OK))
        	{
            	status = tmpStatus;
            	SET_FAILURE_REASON(status);
        	}
    	}
	//////////////////////////////
	//Unregister notification 
	//////////////////////////////
    	status = NOTIFY_unregister (ID_GPP,0,5,(FnNotifyCbck) TSKMPLIST_notify,info) ;
	
    	if (status != SYS_OK) 
    	{
    		SET_FAILURE_REASON (status) ;
    	}

	//////////////////////////////
	//MEM_free
	//////////////////////////////
    	freeStatus = MEM_free(DSPLINK_SEGID, info, sizeof(TSKMESSAGE_TransferInfo));
    	if ((status == SYS_OK) && (freeStatus != TRUE))
    	{
        	status = SYS_EFREE;
        	SET_FAILURE_REASON(status);
    	}
    	
    	return status;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//						NOTIFICATION
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static
Void
TSKMPLIST_notify (Uint32 eventNo, Ptr arg, Ptr notifyinfo)
{
	(Void) eventNo ;
	(Void) notifyinfo ;
	(Void) arg ;
	
	notify_flag = 1;
	
	MSGQ_get(info->localMsgq,(MSGQ_Msg*) &msg,SYS_FOREVER);
		
	mode = msg->command;
		
	TSK_sleep(10);

	return;
}

Int sendControlMsg( Uint16 cmd,Char *arg1,TSKMESSAGE_TransferInfo* info)
{
	 Int status = SYS_OK;
	 
	//////////////////////////////
	//send message
	//////////////////////////////
	msg->command = cmd;
	SYS_sprintf(msg->arg1,arg1);
	info->sequenceNumber++;
	if (info->sequenceNumber == MSGQ_INTERNALIDSSTART)
	{
		info->sequenceNumber = 0;
	}
	MSGQ_setMsgId((MSGQ_Msg) msg, info->sequenceNumber);
	MSGQ_setSrcQueue((MSGQ_Msg) msg, info->localMsgq);
	status = MSGQ_put(info->locatedMsgq,(MSGQ_Msg) msg);
	if (status != SYS_OK)
	{
		SET_FAILURE_REASON(status);
	}
	else
	{
		NOTIFY_notify (ID_GPP,0,5,(Uint32) 0);
	}
	
	return status;
}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


when we run the code, we can see below message :

"ARM :Enter_Command = "

//////////////////////////////////////////////////////////////////////////////////////////////////////////
if i put "a" => dsp do blinking gpio_0_12  
        i can see the user led 1 on the omapl137 evm start blinking and every thing is ok.
if i put "b" => dsp do blinking gpio_0_13
       i can see the user led 2 on the omapl137 evm start blinking and every thing is ok.
if i put "c" => dsp do blinking gpio_0_14
      i can see the user led 3 on the omapl137 evm start blinking and every thing is ok.

if i put "d" => arm transfer 256 word to dsp with CHNL function, then dsp do process data and transfer 256 word to arm with SIO function,
       i see below errors :

      "CHNL_reclaim (CHNL_ID_OUTPUT) failed."

      "CHNL_reclaim(CHNL_ID_INPUT) failed."

 then arm print receive data that is wrong!!!!! 
///////////////////////////////////////////////////////////////////////////////////////////////////////
in my code MSGQ and NOTIFY is ok but i cant transfer data with CHNL. i don't know which is wrong in my code. please help to fix this problem.



Thank you

Regards,

Mahdi








Viewing all articles
Browse latest Browse all 17527

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>