⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pc side program to use a mailbox.c

📁 利用Mailbox实现运行在PC上的主机程序与运行在DSP EVM上的客户端程序间的数据交换。包括PC端源码和DSP端源码。
💻 C
字号:
PC side program to use a mailbox
// This is the PC side program (written in C language in Microsoft Visual C++ Version 6.0) 
// This program is taken from Dahnoun, Naim: "Digital Signal Processing Implementation 
// Using the TM320C6000 DSP Platform"
#include "stdafx.h"
#include <windows.h>
#include <evm6xdll.h>	// Tools -> Options -> Directories add 
						// c:\ti\c6000\evm6x\dsp\include  and   
						//c:\ti\c6000\evm6x\include
#include <stdio.h>
#include <conio.h>
#include <process.h>

#define LOAD_DSP_CODE
HANDLE hBoard;
HANDLE hEvent;
int n_board_index;
#define DSP_OTHERS	-1
#define DSP_DIRECT	0x00
BOOL DspBoardInit(void)
{
	unsigned long dummy;
	#ifdef LOAD_DSP_CODE
		evm6x_reset_dsp(hBoard, HPI_BOOT);
		evm6x_init_emif(hBoard, NULL);
		if (!evm6x_coff_load(hBoard, NULL, "D:\\Personal\\MASAKI~1\\Titools\\mailbox_hpi\\fifo_dsp.out", FALSE, FALSE, FALSE))
		{
			evm6x_unreset_dsp(hBoard);
			return FALSE;
		}
		evm6x_unreset_dsp(hBoard);
	#endif
	evm6x_retrieve_message(hBoard, &dummy);
	return TRUE;
}
BOOL DspDriverInit(void)
{
	char str[80];
	hBoard = evm6x_open(n_board_index, FALSE);
	if (hBoard == INVALID_HANDLE_VALUE)
	{
		printf("unable to open EVM\n");
		return FALSE;
	}
	evm6x_set_timeout(hBoard, 1000);
	evm6x_abort_write(hBoard);
	evm6x_clear_message_event(hBoard);
	sprintf(str, "%s%d", EVM6X_GLOBAL_MESSAGE_EVENT_BASE_NAME, n_board_index);
	hEvent = OpenEvent(SYNCHRONIZE, FALSE, str);
	if (hEvent == NULL)
	{
		evm6x_close(hBoard);
		return FALSE;
	}
	
	return TRUE;
}
void DspDriverClose(void)
{
	CloseHandle(hEvent);
	evm6x_reset_dsp(hBoard, HPI_BOOT);
	evm6x_close(hBoard);
	return;
}
int main(void)
{
	EVM6XDLL_MESSAGE msg, dummy;
	int wait_ms = 3000;
	int i;
	printf("Initialize Evm6x\n");
	if (!DspDriverInit())
	{
		printf("Error Initializing Evm6x driver\n");
		DspDriverClose();
		return -1;
	}
/*	if (!DspBoardInit())
	{
		printf("Error Initializing Evm6x board\n");
		DspDriverClose();
		return -2;
	}*/
	printf("Send message 11 to DSP\n");
	// Send a mailbox message to DSP
	msg = 11;
	if (!evm6x_send_message(hBoard, &msg))
	{
		printf("Error sending a message to DSP1\n");
		DspDriverClose();
		return -9;
	}
	msg = 0;
	
	do
	{
		printf("Wait for message from DSP\n");
		// Wait for an initial mailbox message from DSP
		while(!WaitForSingleObject(hEvent, 1))
		{
			wait_ms--;
			if (wait_ms == 0)
			{
				printf("Error receiving a message from DSP\n");
				DspDriverClose();
				return -3;
			}
		}
		// Retrieve a mailbox message
		evm6x_retrieve_message(hBoard, &msg);
		printf("Receive message from DSP msg=%u\n", msg);
	}while(msg != 12);
	printf("Send message 13 to DSP 2\n");
	// Send a mailbox message to DSP
	msg = 13;
	if (!evm6x_send_message(hBoard, &msg))
	{
		printf("Error sending a message to DSP\n");
		DspDriverClose();
		return -6;
	}
	msg = 0;
	do
	{
		printf("Wait for message from DSP 2\n");
		// Wait for an initial mailbox message from DSP
		while(!WaitForSingleObject(hEvent, 1))
		{
			wait_ms--;
			if (wait_ms == 0)
			{
				printf("Error receiving a message from DSP\n");
				DspDriverClose();
				return -3;
			}
		}
		// Retrieve a mailbox message
		evm6x_retrieve_message(hBoard, &msg);
		printf("Receive message from DSP 2 msg=%x\n", msg);
	}while(msg == 0);
	DspDriverClose();
	return 0;
}
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -