doubao_chat/apps/common/system/sdram_test.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