Other Parts Discussed in Thread: TMS320C6455
Hello, I've create a project based on the rapidioMQT example(MQT1.21).In my project I enabled L1 and L2Cache, and I 've alread build the MQT lib with cache enabled.
I have verified success on a platform that connect two TMS320C6455 with 4 ports SRIO, but our new project use a different platform, which connect two TMS320C6455 with port 2 and port 3 ,while port 0 and port1 connected to a FPGA, I just change the the portID from 1 to 3 with the changed code bellow:
/*
* Configuration to the MQT instance. Some fields are filled in the
* global init function (appConfigTransports()) which is called before
* DSP/BIOS initialization.
*
* This structure needs to be persistent during DSP/BIOS initialization.
*/
RAPIDIOMQT_Params rapidMQTParams = {
3, // max num of outstanding out of order msgs
NUMBUFDESCS, // numTxBuffers
0, // dstDevId - initialized in appConfigTransports()
TRUE, // dstDevId16Bit
0, // txMbox
0, // txCppiQueueId
1, // txCppiQueueWeight
3, // portId
0, // retries 0 -> infinite
0xe // ssize 0xe -> 4096byte max size messages.
};
when I run the program, I found the dspA(another called dspB) which runs boss thread just print one log:"Boss going to sleep"
this log is printed at bellow:
locateAttrs.timeout = 1000;
while (MSGQ_locate(WORKERNAME, &dstMsgQueue, &locateAttrs) != SYS_OK) {
LOG_printf(&trace, "Boss going to sleep");
......
I'm sure the SRIO is initialized success,because I have tested that the Direct IO can write and read data successful, but why the message can't successful tranceive.
and I have made another test ,if I insert an breakpoint at the code bellow:
while (MSGQ_locate(WORKERNAME, &dstMsgQueue, &locateAttrs) != SYS_OK) {
and I start the program on two DSP , after the dspA stopped at the breakpoint , I run the program step by step , it can send and receive right message,and then I made another test , I comment the code bellow:
locateAttrs.timeout = 1000;
while (MSGQ_locate(WORKERNAME, &dstMsgQueue, &locateAttrs) != SYS_OK) {
LOG_printf(&trace, "Boss going to sleep");
//TSK_sleep(500);
LOG_printf(&trace, "Boss is awake");
}
I found the program can run successfull at the first time I powered on the board, but after that ,it can't output right result.
I doubt that the code "TSK_sleep(500);" caused the BIOS scheduler can't work well, but I'm not sure how the MSGQ_locate works , does anyone give me some advice,thanks!