本人现在使用bf609的ezkit,现想用mcapi中的scalar通道进行双核间数据传输,目前可以在两个核中分别创建数据和命令end point(end point create),并能从core0中读取core1中的end point(end point get),但不能讲两 end point 连接( mcapi_sclchan_connect_i),现贴上程序,请各高手指点。
// core 0 as gpp
#include <ccblkfn.h>
#include "adi_initialize.h"
#include <mcapi.h>
#include <stdio.h>
#include <stdlib.h> /* for malloc */
#include <string.h>
#define NUM_SIZES 4
#define DOMAIN 0
#define gpp_node 0
#define dsp_node 1
#define data_port 0
#define cmd_port 1
void main(void)
{
adi_core_1_enable();
mcapi_status_t
status;
mcapi_request_t
request;
mcapi_param_t
parms;
mcapi_endpoint_t
data_ep,remote_data_ep,cmd_ep, remote_cmd_ep;
mcapi_sclchan_send_hndl_t
s1;
mcapi_sclchan_recv_hndl_t r1;
mcapi_info_t
version;
mcapi_node_attributes_t
node0_attributes;
mcapi_node_init_attributes(&node0_attributes,
&status);
/* create a
node */
mcapi_initialize(DOMAIN,gpp_node,NULL,&parms,&version,&status);
if (status !=
MCAPI_SUCCESS)
{
printf("wrong");}
printf("mcapi
initialized \n");
/* create
endpoints */
data_ep =
mcapi_endpoint_create(data_port,&status);
if (status !=
MCAPI_SUCCESS) { printf("endpoint creat failure");}
cmd_ep =
mcapi_endpoint_create(cmd_port,&status);
if (status !=
MCAPI_SUCCESS) { printf("endpoint creat failure");}
remote_data_ep
= mcapi_endpoint_get (DOMAIN,dsp_node,data_port,MCA_INFINITE,&status);
if (status !=
MCAPI_SUCCESS) { printf("endpoint get failure");}
//if (status
!= MCAPI_SUCCESS) { WRONG }
remote_cmd_ep = mcapi_endpoint_get
(DOMAIN,dsp_node,cmd_port,MCA_INFINITE,&status);
if (status !=
MCAPI_SUCCESS) { printf("endpoint get failure");}
mcapi_sclchan_connect_i(data_ep,remote_data_ep,&request,&status);
if (status !=
MCAPI_SUCCESS) { printf("endpoint connect failure");}
mcapi_finalize(&status);
}
//core 1 as dsp
#include <mcapi.h>
//#include <mcapi_test.h>
#include <stdio.h>
#include <stdlib.h> /* for malloc */
#include <string.h>
#define NUM_SIZES 4
#define DOMAIN 0
#define gpp_node 0
#define dsp_node 1
#define data_port 0
#define cmd_port 1
int main(void)
{
mcapi_status_t
status;
mcapi_request_t
request;
mcapi_param_t
parms;
mcapi_info_t
version;
mcapi_endpoint_t
data_get_ep,cmd_get_ep,data_recv_ep,cmd_recv_ep;
mcapi_node_attributes_t
mcapi_node1_attributes;
mcapi_node_init_attributes(&mcapi_node1_attributes,
&status);
mcapi_initialize(DOMAIN,dsp_node,NULL,&parms,&version,&status);
if (status !=
MCAPI_SUCCESS)
{
printf("wrong");}
printf("mcapi
initialized \n");
int da=0;
/* Initialize
managed drivers and/or services */
data_recv_ep
= mcapi_endpoint_create(data_port, &status);
if
(MCAPI_SUCCESS != status) {
printf("endpoint creat
failure");
}
cmd_recv_ep =
mcapi_endpoint_create(cmd_port, &status);
if
(MCAPI_SUCCESS != status) {
printf("endpoint creat
failure");
}
data_get_ep =
mcapi_endpoint_get (DOMAIN,gpp_node,data_port,MCA_INFINITE,&status);
if
(status != MCAPI_SUCCESS) { printf("endpoint get failure");}
//if
(status != MCAPI_SUCCESS) { WRONG }
cmd_get_ep =
mcapi_endpoint_get (DOMAIN,gpp_node,cmd_port,MCA_INFINITE,&status);
if
(status != MCAPI_SUCCESS) { printf("endpoint get failure");}
//
mcapi_sclchan_connect_i(data_get_ep,data_ep,&request,&status);
//
if (status != MCAPI_SUCCESS) { printf("wrong\n");}
//
printf("get sclchan done \n");
//
while(1);
//return 0;
}