232 lines
7.2 KiB
C
232 lines
7.2 KiB
C
#include "system/includes.h"
|
|
#include "os/os_api.h"
|
|
#include "asm/crc16.h"
|
|
#include "http/http_cli.h"
|
|
#include "fs/fs.h"
|
|
#include "app_config.h"
|
|
#include "system/init.h"
|
|
#include "device/device.h"
|
|
|
|
#define DMA_COPY_TEST 1 //打开DMAcopy测试
|
|
#define DMA_COPY_TEST_SDRAM_TO_SDRAM_EN 1 //sdram --> sdram
|
|
#define DMA_COPY_TEST_SDRAM_TO_SDRAM_NOCACH_EN 1 //sdram nocach --> sdram nocach
|
|
#define DMA_COPY_TEST_SDRAM_TO_SRAM_EN 1 //sdram --> sram
|
|
#define DMA_COPY_TEST_SRAM_TO_SDRAM_EN 1 //sram --> sdram
|
|
#define DMA_COPY_TEST_SRAM_TO_SDRAM_NOCACH_EN 1 //sram --> sdram nocach
|
|
#define DMA_COPY_TEST_SRAM_TO_SRAM_EN 1 //sram --> sram
|
|
|
|
/*#define SRAM_DMA_TEST_BUF_SIZE (120 * 1024)*/
|
|
#define SDRAM_DMA_TEST_BUF_SIZE (3 * 1024 * 1024)
|
|
#define SRAM_DMA_TEST_BUF_SIZE (60 * 1024)
|
|
/*#define SDRAM_DMA_TEST_BUF_SIZE (SRAM_DMA_TEST_BUF_SIZE * 6)*/
|
|
|
|
/********************DMA COPY TEST*****************************/
|
|
|
|
#if DMA_COPY_TEST
|
|
static u8 dma_tx_buf_sdram[SDRAM_DMA_TEST_BUF_SIZE] ALIGNE(32);
|
|
static u8 dma_rx_buf_sdram[SDRAM_DMA_TEST_BUF_SIZE] ALIGNE(32);
|
|
static u8 dma_tx_buf_ram[SRAM_DMA_TEST_BUF_SIZE] SEC_USED(.sram) ALIGNE(32);
|
|
static u8 dma_rx_buf_ram[SRAM_DMA_TEST_BUF_SIZE] SEC_USED(.sram) ALIGNE(32);
|
|
|
|
static void dma_sdram_to_sdram(void)
|
|
{
|
|
int ret = 0;
|
|
|
|
for (int i = 0; i < sizeof(dma_tx_buf_sdram) - 2; i++) {
|
|
dma_tx_buf_sdram[i] = (u8)JL_RAND->R64H;
|
|
}
|
|
ret = CRC16(dma_tx_buf_sdram, sizeof(dma_tx_buf_sdram) - 2);
|
|
dma_tx_buf_sdram[sizeof(dma_tx_buf_sdram) - 2] = (ret >> 8 & 0x00ff);
|
|
dma_tx_buf_sdram[sizeof(dma_tx_buf_sdram) - 1] = (ret & 0x00ff);
|
|
|
|
memset(dma_rx_buf_sdram, 0, sizeof(dma_rx_buf_sdram));
|
|
dma_copy(dma_rx_buf_sdram, dma_tx_buf_sdram, sizeof(dma_tx_buf_sdram));
|
|
ret = CRC16(dma_rx_buf_sdram, sizeof(dma_tx_buf_sdram));
|
|
if (ret) {
|
|
printf("dma_sdram_to_sdram\n");
|
|
printf("dma_tx_buf_sdram = 0x%x, ret = 0x%x\n", (u32)dma_tx_buf_sdram, ret);
|
|
printf("dma_rx_buf_sdram = 0x%x, ret = 0x%x\n", (u32)dma_rx_buf_sdram, ret);
|
|
ASSERT(0);
|
|
}
|
|
}
|
|
static void dma_ram0_to_ram0(void)
|
|
{
|
|
int ret = 0;
|
|
|
|
for (int i = 0; i < sizeof(dma_tx_buf_ram) - 2; i++) {
|
|
dma_tx_buf_ram[i] = (u8)JL_RAND->R64L;
|
|
}
|
|
ret = CRC16(dma_tx_buf_ram, sizeof(dma_tx_buf_ram) - 2);
|
|
dma_tx_buf_ram[sizeof(dma_tx_buf_ram) - 2] = (ret >> 8 & 0x00ff);
|
|
dma_tx_buf_ram[sizeof(dma_tx_buf_ram) - 1] = (ret & 0x00ff);
|
|
memset(dma_rx_buf_ram, 0, sizeof(dma_rx_buf_ram));
|
|
dma_copy(dma_rx_buf_ram, dma_tx_buf_ram, sizeof(dma_tx_buf_ram));
|
|
ret = CRC16(dma_rx_buf_ram, sizeof(dma_tx_buf_ram));
|
|
if (ret) {
|
|
printf("dma_ram0_to_ram0 ret = 0x%x \n", ret);
|
|
ASSERT(0);
|
|
}
|
|
}
|
|
|
|
static void dma_ram0_to_sdram(void)
|
|
{
|
|
int ret = 0;
|
|
int size = MIN(sizeof(dma_tx_buf_ram), sizeof(dma_rx_buf_sdram));
|
|
for (int i = 0; i < size - 2; i++) {
|
|
dma_tx_buf_ram[i] = (u8)JL_RAND->R64L;
|
|
}
|
|
ret = CRC16(dma_tx_buf_ram, size - 2);
|
|
dma_tx_buf_ram[size - 2] = (ret >> 8 & 0x00ff);
|
|
dma_tx_buf_ram[size - 1] = (ret & 0x00ff);
|
|
|
|
memset(dma_rx_buf_sdram, 0, size);
|
|
dma_copy(dma_rx_buf_sdram, dma_tx_buf_ram, size);
|
|
ret = CRC16(dma_rx_buf_sdram, size);
|
|
if (ret) {
|
|
printf("dma_ram0_to_sdram ret = 0x%x \n", ret);
|
|
}
|
|
}
|
|
|
|
static void dma_sdram_to_ram0(void)
|
|
{
|
|
int ret = 0;
|
|
int size = MIN(sizeof(dma_tx_buf_sdram), sizeof(dma_rx_buf_ram));
|
|
for (int i = 0; i < size - 2; i++) {
|
|
dma_tx_buf_sdram[i] = (u8)JL_RAND->R64H;
|
|
}
|
|
ret = CRC16(dma_tx_buf_sdram, size - 2);
|
|
dma_tx_buf_sdram[size - 2] = (ret >> 8 & 0x00ff);
|
|
dma_tx_buf_sdram[size - 1] = (ret & 0x00ff);
|
|
|
|
memset(dma_rx_buf_ram, 0, size);
|
|
dma_copy(dma_rx_buf_ram, dma_tx_buf_sdram, size);
|
|
ret = CRC16(dma_rx_buf_ram, size);
|
|
if (ret) {
|
|
printf("dma_sdram_to_ram0 ret = 0x%x \n", ret);
|
|
ASSERT(0);
|
|
}
|
|
}
|
|
|
|
static void dma_sdram_to_sdram_nocache(void)
|
|
{
|
|
int ret = 0;
|
|
|
|
for (int i = 0; i < sizeof(dma_tx_buf_sdram) - 2; i++) {
|
|
dma_tx_buf_sdram[i] = (u8)JL_RAND->R64H;
|
|
}
|
|
ret = CRC16(dma_tx_buf_sdram, sizeof(dma_tx_buf_sdram) - 2);
|
|
dma_tx_buf_sdram[sizeof(dma_tx_buf_sdram) - 2] = (ret >> 8 & 0x00ff);
|
|
dma_tx_buf_sdram[sizeof(dma_tx_buf_sdram) - 1] = (ret & 0x00ff);
|
|
|
|
memset(dma_rx_buf_sdram, 0, sizeof(dma_rx_buf_sdram));
|
|
|
|
flush_dcache(dma_tx_buf_sdram, sizeof(dma_tx_buf_sdram));
|
|
flushinv_dcache(dma_rx_buf_sdram, sizeof(dma_rx_buf_sdram));
|
|
dma_copy((void *)NO_CACHE_ADDR(dma_rx_buf_sdram), (void *)NO_CACHE_ADDR(dma_tx_buf_sdram), sizeof(dma_tx_buf_sdram));
|
|
|
|
ret = CRC16(dma_rx_buf_sdram, sizeof(dma_rx_buf_sdram));
|
|
if (ret) {
|
|
printf("dma_sdram_to_sdram_nocache\n");
|
|
printf("dma_tx_buf_sdram = 0x%x, ret = 0x%x\n", (u32)dma_tx_buf_sdram, ret);
|
|
printf("dma_rx_buf_sdram = 0x%x, ret = 0x%x\n", (u32)dma_rx_buf_sdram, ret);
|
|
put_buf(dma_tx_buf_sdram, sizeof(dma_tx_buf_sdram));
|
|
put_buf(dma_rx_buf_sdram, sizeof(dma_rx_buf_sdram));
|
|
ASSERT(0);
|
|
}
|
|
}
|
|
|
|
static void dma_ram0_to_sdram_nocache(void)
|
|
{
|
|
int ret = 0;
|
|
int size = MIN(sizeof(dma_tx_buf_ram), sizeof(dma_rx_buf_sdram));
|
|
|
|
for (int i = 0; i < size - 2; i++) {
|
|
dma_tx_buf_ram[i] = (u8)JL_RAND->R64L;
|
|
}
|
|
ret = CRC16(dma_tx_buf_ram, size - 2);
|
|
dma_tx_buf_ram[size - 2] = (ret >> 8 & 0x00ff);
|
|
dma_tx_buf_ram[size - 1] = (ret & 0x00ff);
|
|
|
|
memset(dma_rx_buf_sdram, 0, size);
|
|
|
|
flushinv_dcache(dma_rx_buf_sdram, size);
|
|
dma_copy((void *)NO_CACHE_ADDR(dma_rx_buf_sdram), dma_tx_buf_ram, size);
|
|
|
|
ret = CRC16(dma_rx_buf_sdram, size);
|
|
if (ret) {
|
|
printf("dma_ram0_to_sdram_nocache ret = 0x%x \n", ret);
|
|
}
|
|
}
|
|
|
|
static void dma_sdram_to_ram0_nocache(void)
|
|
{
|
|
int ret = 0;
|
|
int size = MIN(sizeof(dma_tx_buf_sdram), sizeof(dma_rx_buf_ram));
|
|
|
|
for (int i = 0; i < size - 2; i++) {
|
|
dma_tx_buf_sdram[i] = (u8)JL_RAND->R64H;
|
|
}
|
|
ret = CRC16(dma_tx_buf_sdram, size - 2);
|
|
dma_tx_buf_sdram[size - 2] = (ret >> 8 & 0x00ff);
|
|
dma_tx_buf_sdram[size - 1] = (ret & 0x00ff);
|
|
|
|
memset(dma_rx_buf_ram, 0, size);
|
|
|
|
flush_dcache(dma_tx_buf_sdram, size);
|
|
dma_copy(dma_rx_buf_ram, (void *)NO_CACHE_ADDR(dma_tx_buf_sdram), size);
|
|
|
|
ret = CRC16(dma_rx_buf_ram, size);
|
|
if (ret) {
|
|
printf("dma_sdram_to_ram0_nocache ret = 0x%x \n", ret);
|
|
ASSERT(0);
|
|
}
|
|
}
|
|
#endif
|
|
|
|
static void sdram_test_task(void *p)
|
|
{
|
|
u32 cnt = 0;
|
|
int res;
|
|
int msg[32];
|
|
struct intent it = {0};
|
|
|
|
os_time_dly(500);
|
|
|
|
/* 1 DMA COPY test */
|
|
printf("........................ DMA COPY test ........................ \n\n");
|
|
while (1) {
|
|
printf("DMA COPY test cnt:%d\n", cnt++);
|
|
#if DMA_COPY_TEST
|
|
#if DMA_COPY_TEST_SDRAM_TO_SDRAM_EN
|
|
dma_sdram_to_sdram();
|
|
#endif
|
|
#if DMA_COPY_TEST_SDRAM_TO_SDRAM_NOCACH_EN
|
|
dma_sdram_to_sdram_nocache();
|
|
#endif
|
|
#if DMA_COPY_TEST_SDRAM_TO_SRAM_EN
|
|
dma_sdram_to_ram0();
|
|
dma_sdram_to_ram0_nocache();
|
|
#endif
|
|
#if DMA_COPY_TEST_SRAM_TO_SRAM_EN
|
|
dma_ram0_to_ram0();
|
|
#endif
|
|
#if DMA_COPY_TEST_SRAM_TO_SDRAM_EN
|
|
dma_ram0_to_sdram();
|
|
#endif
|
|
#if DMA_COPY_TEST_SRAM_TO_SDRAM_NOCACH_EN
|
|
dma_ram0_to_sdram_nocache();
|
|
#endif
|
|
#endif
|
|
os_time_dly(1);
|
|
}
|
|
}
|
|
|
|
static int sdram_test_init()
|
|
{
|
|
return thread_fork("sdram_test", 15, 1500, 64, 0, sdram_test_task, NULL);
|
|
}
|
|
#if DMA_COPY_TEST
|
|
late_initcall(sdram_test_init);
|
|
#endif
|
|
|