⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dma_test.c

📁 IARSOURCECODE是基于LPC2478嵌入式软件IAR EWARM V4.42的应用实例代码
💻 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);
  counter = T0TC/28;
  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/28;
  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 + -