📄 dma_test_misc2.c
字号:
* #define DMA_API_MIN2 (0xFFE00000)
* #define DMA_API_MAX2 (0xFFE00001)
* Address mapping RHEA (strobe 0)
* #define DMA_RHEA_MIN1 (0xFFFE0000)
* #define DMA_RHEA_MAX1 (0xFFFEFFFF)
* Address mapping RHEA (strobe 1)
* #define DMA_RHEA_MIN2 (0xFFFF0000)
* #define DMA_RHEA_MAX2 (0xFFFFFFFF)
*/
/* set the default values */
dma_test_set_default_parameters(&dma_channel_parameters);
/* Dest. adress plus data to be transferred is out of range */
dma_channel_parameters.destination_address = DMA_TEST_SDRAM_DST_BUFFER+3;
if (dma_set_channel_parameters (DMA_MIN_CHANNEL, &dma_channel_parameters) != RV_OK)
{
DMA_TEST_SEND_TRACE("DMA TEST immediate return NOT OK ",\
DMA_TRACE_LEVEL);
rtest_send_result (TEST_FAILED);
return;
}
msg_p = (T_DMA_STATUS_RSP_MSG *) rtest_wait_for_message (DMA_STATUS_RSP_MSG);
if (msg_p->result.status == DMA_INVALID_PARAMETER)
{
DMA_TEST_SEND_TRACE ("DMA TEST result OK, INVALID parameter returned ",\
DMA_TRACE_LEVEL);
rtest_send_result (TEST_PASSED);
}
else
{
DMA_TEST_SEND_TRACE
("DMA TEST result NOT OK, INVALID parameter NOT returned ",\
DMA_TRACE_LEVEL);
rtest_send_result (TEST_FAILED);
}
rvf_free_buf (msg_p);
return;
}
/**
* This test will reservate a channel and then provide it with
* information.
* For the source adress a value is choosen in API memory and the burst
* option is choosen. This combiantion is not allowed
*
* An INVALID parameter indication should be returned
*/
void dma_test_misc_220 (void)
{
UINT8 n=0;
T_RV_RETURN_PATH dma_test_path;
T_DMA_STATUS_RSP_MSG *msg_p;
T_DMA_CHANNEL_PARAMETERS dma_channel_parameters;
/* reset all parameters needed */
dma_test_init();
/* Sets message forwarding */
dma_test_path.addr_id = rtest_get_addr_id();
dma_test_path.callback_func = NULL;
if (dma_reserve_channel (DMA_CHAN_ANY,DMA_MIN_CHANNEL, DMA_QUEUE_DISABLE,
SW_PRIORITY_NORMAL, dma_test_path) != RV_OK)
{
DMA_TEST_SEND_TRACE("DMA TEST immediate return NOT OK ",\
DMA_TRACE_LEVEL);
rtest_send_result (TEST_FAILED);
return;
}
msg_p = (T_DMA_STATUS_RSP_MSG *) rtest_wait_for_message (DMA_STATUS_RSP_MSG);
/* msg_p not checked as it is assumed to be ok (because of reset)*/
rvf_free_buf (msg_p);
/* Adress mapping. The given adress should be out of the defined
* range to receive an error
* #define DMA_IMIF_MIN (0x08000000)
* #define DMA_IMIF_MAX (0x0FFFFFFF)
* Address mapping API RAM
* #define DMA_API_MIN1 (0xFFD00000)
* #define DMA_API_MAX1 (0xFFD03FFF)
* Address mapping API CTRL
* #define DMA_API_MIN2 (0xFFE00000)
* #define DMA_API_MAX2 (0xFFE00001)
* Address mapping RHEA (strobe 0)
* #define DMA_RHEA_MIN1 (0xFFFE0000)
* #define DMA_RHEA_MAX1 (0xFFFEFFFF)
* Address mapping RHEA (strobe 1)
* #define DMA_RHEA_MIN2 (0xFFFF0000)
* #define DMA_RHEA_MAX2 (0xFFFFFFFF)
*/
/* set the default values */
dma_test_set_default_parameters(&dma_channel_parameters);
/* Dest. adress plus data to be transferred is out of range */
dma_channel_parameters.source_address = DMA_API_MIN1;
dma_channel_parameters.source_burst = DMA_BURST_ENABLED;
if (dma_set_channel_parameters (DMA_MIN_CHANNEL, &dma_channel_parameters) != RV_OK)
{
DMA_TEST_SEND_TRACE("DMA TEST immediate return NOT OK ",\
DMA_TRACE_LEVEL);
rtest_send_result (TEST_FAILED);
return;
}
msg_p = (T_DMA_STATUS_RSP_MSG *) rtest_wait_for_message (DMA_STATUS_RSP_MSG);
if (msg_p->result.status == DMA_INVALID_PARAMETER)
{
DMA_TEST_SEND_TRACE ("DMA TEST result OK, INVALID parameter returned ",\
DMA_TRACE_LEVEL);
rtest_send_result (TEST_PASSED);
}
else
{
DMA_TEST_SEND_TRACE
("DMA TEST result NOT OK, INVALID parameter NOT returned ",\
DMA_TRACE_LEVEL);
rtest_send_result (TEST_FAILED);
}
rvf_free_buf (msg_p);
return;
}
/**
*
* This test will test the contention mechanism
*/
void dma_test_misc_221 (void)
{
UINT8 n=0,p;
T_RV_RETURN_PATH dma_test_path;
T_DMA_STATUS_RSP_MSG *msg_p;
UINT8 test_result = DMA_TRUE;
/* reset all parameters needed */
dma_test_init();
/* Sets message forwarding */
dma_test_path.addr_id = rtest_get_addr_id();
dma_test_path.callback_func = NULL;
/* Reserve 10 channels with increasing software priority */
/* last 4 reservatinos are queued */
for (n=10; n>0; n--)
{
p= n+10;
if (dma_reserve_channel (DMA_CHAN_ANY,0, DMA_QUEUE_ENABLE,
p, dma_test_path) != RV_OK)
{
DMA_TEST_SEND_TRACE("DMA TEST immediate return NOT OK ",\
DMA_TRACE_LEVEL);
rtest_send_result (TEST_FAILED);
return;
}
msg_p = (T_DMA_STATUS_RSP_MSG *) rtest_wait_for_message (DMA_STATUS_RSP_MSG);
if ((msg_p->result.status != DMA_RESERVE_OK) &&
(msg_p->result.status != DMA_QUEUED))
{
test_result = DMA_ZERO;
}
rvf_free_buf (msg_p);
}
/* make an extra reservation with the highest priority and a specific channel */
if (dma_reserve_channel (DMA_CHAN_SPECIFIC,4, DMA_QUEUE_ENABLE,
0, dma_test_path) != RV_OK)
{
DMA_TEST_SEND_TRACE("DMA TEST immediate return NOT OK ",\
DMA_TRACE_LEVEL);
rtest_send_result (TEST_FAILED);
return;
}
msg_p = (T_DMA_STATUS_RSP_MSG *) rtest_wait_for_message (DMA_STATUS_RSP_MSG);
if ((msg_p->result.status != DMA_RESERVE_OK) &&
(msg_p->result.status != DMA_QUEUED))
{
test_result = DMA_ZERO;
}
rvf_free_buf (msg_p);
/* Free channel 4. Now the queued reservation with
the highest priority has to be granted */
/* free channel 4 */
if (dma_release_channel (4) != RV_OK)
{
DMA_TEST_SEND_TRACE("DMA TEST immediate return NOT OK ",\
DMA_TRACE_LEVEL);
rtest_send_result (TEST_FAILED);
return;
}
/* wait for message that a channel is free (virtual client A) */
msg_p = (T_DMA_STATUS_RSP_MSG *) rtest_wait_for_message (DMA_STATUS_RSP_MSG);
if ((msg_p->result.status != DMA_CHANNEL_RELEASED) ||
(msg_p->result.channel != 4))
{
DMA_TEST_SEND_TRACE_PARAM("DMA released WRONG channel number:" ,\
msg_p->result.channel,\
DMA_TRACE_LEVEL);
rtest_send_result (TEST_FAILED);
test_result = DMA_ZERO;
}
rvf_free_buf (msg_p);
/* wait for message that a channel is free (virtual client B) */
msg_p = (T_DMA_STATUS_RSP_MSG *) rtest_wait_for_message (DMA_STATUS_RSP_MSG);
if ((msg_p->result.status != DMA_QUEUE_PROC) || ((msg_p->result.channel &0x7) != 4))
{
DMA_TEST_SEND_TRACE_PARAM
("WRONG queued reservation (shoot be 4) has been processed: " ,\
msg_p->result.channel,\
DMA_TRACE_LEVEL);
rtest_send_result (TEST_FAILED);
test_result = DMA_ZERO;
}
rvf_free_buf (msg_p);
if (test_result == DMA_TRUE)
{
rtest_send_result (TEST_PASSED);
}
else
{
rtest_send_result (TEST_PASSED);
}
return;
}
/**
* Main function multiplexing the different demos to process.
*
* This function returns the result of the test.
*
* @param test_number Number of the test to process
* @return Result of the test.
*/
T_RV_MISC_RET dma_test_misc2 (T_RV_MISC_TEST_NBR test_number)
{
T_RV_TEST_RET test_verdict;
switch (test_number)
{
case ICT_TEST1:
RV_TEST_TRACE_WARNING("*** DMA MISC 201 BEGINS");
test_verdict = rtest_start_test(dma_test_misc_201);
rtest_trace_test_verdict(test_verdict);
return test_verdict;
case ICT_TEST2:
RV_TEST_TRACE_WARNING("*** DMA MISC 202 BEGINS");
test_verdict = rtest_start_test(dma_test_misc_202);
rtest_trace_test_verdict(test_verdict);
return test_verdict;
case ICT_TEST3:
RV_TEST_TRACE_WARNING("*** DMA MISC 203 BEGINS");
test_verdict = rtest_start_test(dma_test_misc_203);
rtest_trace_test_verdict(test_verdict);
return test_verdict;
case ICT_TEST4:
RV_TEST_TRACE_WARNING("*** DMA MISC 204 BEGINS");
test_verdict = rtest_start_test(dma_test_misc_204);
rtest_trace_test_verdict(test_verdict);
return test_verdict;
case ICT_TEST5:
RV_TEST_TRACE_WARNING("*** DMA MISC 205 BEGINS");
test_verdict = rtest_start_test(dma_test_misc_205);
rtest_trace_test_verdict(test_verdict);
return test_verdict;
case ICT_TEST6:
RV_TEST_TRACE_WARNING("*** DMA MISC 206 BEGINS");
test_verdict = rtest_start_test(dma_test_misc_206);
rtest_trace_test_verdict(test_verdict);
return test_verdict;
case ICT_TEST7:
RV_TEST_TRACE_WARNING("*** DMA MISC 207 BEGINS");
test_verdict = rtest_start_test(dma_test_misc_207);
rtest_trace_test_verdict(test_verdict);
return test_verdict;
case ICT_TEST10:
RV_TEST_TRACE_WARNING("*** DMA MISC 210 BEGINS");
test_verdict = rtest_start_test(dma_test_misc_210);
rtest_trace_test_verdict(test_verdict);
return test_verdict;
case ICT_TEST11:
RV_TEST_TRACE_WARNING("*** DMA MISC 211 BEGINS");
test_verdict = rtest_start_test(dma_test_misc_211);
rtest_trace_test_verdict(test_verdict);
return test_verdict;
case ICT_TEST12:
RV_TEST_TRACE_WARNING("*** DMA MISC 212 BEGINS");
test_verdict = rtest_start_test(dma_test_misc_212);
rtest_trace_test_verdict(test_verdict);
return test_verdict;
case ICT_TEST13:
RV_TEST_TRACE_WARNING("*** DMA MISC 213 BEGINS");
test_verdict = rtest_start_test(dma_test_misc_213);
rtest_trace_test_verdict(test_verdict);
return test_verdict;
//#ifndef _WINDOWS
case ICT_TEST15:
RV_TEST_TRACE_WARNING("*** DMA MISC 215 BEGINS");
test_verdict = rtest_start_test(dma_test_misc_215);
rtest_trace_test_verdict(test_verdict);
return test_verdict;
//#endif // _WINDOWS
case ICT_TEST18:
RV_TEST_TRACE_WARNING("*** DMA MISC 218 BEGINS");
test_verdict = rtest_start_test(dma_test_misc_218);
rtest_trace_test_verdict(test_verdict);
return test_verdict;
case ICT_TEST19:
RV_TEST_TRACE_WARNING("*** DMA MISC 219 BEGINS");
test_verdict = rtest_start_test(dma_test_misc_219);
rtest_trace_test_verdict(test_verdict);
return test_verdict;
#ifndef _WINDOWS
case ICT_TEST20:
RV_TEST_TRACE_WARNING("*** DMA MISC 220 BEGINS");
test_verdict = rtest_start_test(dma_test_misc_220);
rtest_trace_test_verdict(test_verdict);
return test_verdict;
#endif //_WINDOWS
case ICT_TEST21:
RV_TEST_TRACE_WARNING("*** DMA MISC 221 BEGINS");
test_verdict = rtest_start_test(dma_test_misc_221);
rtest_trace_test_verdict(test_verdict);
return test_verdict;
default:
RV_TEST_TRACE_WARNING("DMA Test: Wrong test number");
return TEST_IRRECOVERABLY_FAILED;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -