📄 pc side program to use a mailbox.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 + -