📄 dma_test.c
字号:
/*****************************************************************************
* dmatest.c: main C entry file for NXP LPC23xx/24xx Family Microprocessors
*
* Copyright(C) 2006, NXP Semiconductor
* All rights reserved.
*
* History
* 2006.07.20 ver 1.00 Prelimnary version, first Release
*
******************************************************************************/
#include "LPC2468.h" /* LPC23xx/24xx definitions */
#include "target.h"
#include "type.h"
#include "irq.h"
#include "timer.h"
#include "uart0.h"
#include "ex_sdram.h"
#include "dma.h"
#define DMA_SRC 0xa0000000 // 片外SDRAM
#define DMA_DST 0xa1000000
#define BUF_SIZE 0x1000000
extern volatile DWORD DMATCCount, DMAErrCount;
/******************************************************************************
** Main Function main()
******************************************************************************/
int main (void)
{
DWORD i;
DWORD *src_addr, *dest_addr, counter;
TargetResetInit();
UART0Init(9600);
SDRAMInit();
src_addr = (DWORD *)DMA_SRC;
dest_addr = (DWORD *)DMA_DST;
for ( i = 0; i < BUF_SIZE/4; i++ ) // 数据初始化
{
*src_addr = i;
*dest_addr = 0;
src_addr++;
dest_addr++;
}
reset_timer(0);
enable_timer(0);
DMA_Init( );
src_addr = (DWORD *)DMA_SRC;
dest_addr = (DWORD *)DMA_DST;
for(i=0;i<BUF_SIZE;i+=DMA_SIZE)
{
GPDMA_CH0_SRC = (unsigned long)src_addr;
GPDMA_CH0_DEST = (unsigned long)dest_addr;
GPDMA_CH0_CTRL = (DMA_SIZE & 0x0FFF) | (0x04 << 12) | (0x04 << 15)
| (0x02 << 18) | (0x02 << 21) | (1 << 26) | (1 << 27) | 0x80000000;
GPDMA_CH0_CFG |= 0x08001; /* 使能通道 */
while(GPDMA_CH0_CFG & (0x01 << 17)); /* 等待结束 */
src_addr += DMA_SIZE;
dest_addr += DMA_SIZE;
}
disable_timer(0);
counter = T0TC/(Fpclk/1000000);
UART0_puts("The DMA mode use time : ");
UART0_PrintNum(counter,10);
UART0_puts(" us.\r\n");
/* 校验结果 */
src_addr = (DWORD *)DMA_SRC;
dest_addr = (DWORD *)DMA_DST;
for ( i = 0; i < BUF_SIZE/4; i++ )
{
if ( *src_addr != *dest_addr )
{
UART0_puts("found a fatal error!\r\n"); /* fatal error */
return 0;
}
src_addr++;
dest_addr++;
}
UART0_puts("The DMA test successed!\r\n");
/* 直接写SDRAM测试 */
reset_timer(0);
enable_timer(0);
src_addr = (DWORD *)DMA_SRC;
dest_addr = (DWORD *)DMA_DST;
for ( i = 0; i < BUF_SIZE/4; i++ )*src_addr++ = *dest_addr++;
disable_timer(0);
counter = T0TC/(Fpclk/1000000);
UART0_puts("The memory_copy mode use time : ");
UART0_PrintNum(counter,10);
UART0_puts(" us.\r\n");
}
/******************************************************************************
** End Of File
******************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -