亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dma_test.c

?? 三星 s3c6400測試代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/**************************************************************************************
* 
*	Project Name : S3C6400 Validation
*
*	Copyright 2006 by Samsung Electronics, Inc.
*	All rights reserved.
*
*	Project Description :
*		This software is only for validating functions of the S3C6400.
*		Anybody can use this software without our permission.
*  
*--------------------------------------------------------------------------------------
* 
*	File Name : DMA_test.c
*  
*	File Description : This file implements the functons for DMA controller test.
*
*	Author : Wonjoon Jang
*	Dept. : AP Development Team
*	Created Date : 2007/01/02
*	Version : 0.1 
* 
*	History
*	- Created(wonjoon.jang 2007/01/02)
*  
**************************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#include "def.h"
#include "option.h"
#include "library.h"
#include "sfr6400.h"
#include "system.h"
#include "sysc.h"
#include "dma.h"
#include "intc.h"
#include "gpio.h"

#include "timer.h"

static void DMAT_MemtoMem(void);
static void DMAT_MemtoMemLLI(void);
void Test_DMA(void);

volatile int g_DmaDone;
volatile int g_DmaDone0, g_DmaDone1, g_DmaDone2, g_DmaDone3;
volatile int g_TSize = 0x100000;

// SMDK6400 _DRAM_BaseAddress + 0x800_0000;
u32	uLLIBaseAddr = _DRAM_BaseAddress + 0x00100000;

u32 uTxBuffAddr = _DRAM_BaseAddress + 0x1000000;
u32 uRxBuffAddr = _DRAM_BaseAddress + 0x4000000;

#define uRxBuffAddr0 _DRAM_BaseAddress + 0x4000000
#define uRxBuffAddr1 uRxBuffAddr0 + 0x00800000
#define uRxBuffAddr2 uRxBuffAddr0 + 0x01000000
#define uRxBuffAddr3 uRxBuffAddr0 + 0x01800000

#define DMAC0TxSize		0x400
#define DMAC1TxSize		0xf0000
#define SDMAC0TxSize	0xf0000
#define SDMAC1TxSize	0xf0000

u32 uDataCnts=50000;

static DMAC oDmac0, oDmac1, oDmac2, oDmac3;


// Temp. function
void MemoryDump( u32 *DumpAddress, u32 line)
{
	u32 i,j;
	
	for(i=0;i<line;i++) {
		printf("%08x : ",(u32)DumpAddress);
		for(j=0;j<8;j++) {
			printf("%08x ",*DumpAddress++);
		}
		putchar('\n');
	}
	putchar('\n');
}


void Mem_dump (void)
{

	int ch;
	
	
	 while(1)
    {
    	printf("dump address, '-1' to Exit \n");
    	//ch = Uart_getc();
    	ch = GetIntNum();
    		if(ch==-1)
    	{
    		break;
    	}
    	else
    	{
    	    	
    	MemoryDump( ((u32 *)(ch)), 40);
    	}

    }

}

bool CompareDMA(u32 a0, u32 a1, DATA_SIZE eDataSize, u32 uDataCnt)
{
	u32* pD0 = (u32 *)a0;
	u32* pD1 = (u32 *)a1;
	u32	uSrcData = 0;
	u32	uDstData = 0;
	bool ret = true;
	u32	uLoopCnt = 0;
	u32	uTotDataCnt = uDataCnt * eDataSize;		// Bytes
//	u32	uTotLoopCnt = uTotDataCnt/4 + 1;
	u32	uTotLoopCnt = uTotDataCnt/4;

	DelayfrTimer(micro, 1);
	for (uLoopCnt=0; uLoopCnt< uTotLoopCnt; uLoopCnt++)		// 4Byte 竄困 厚背 
	{
		uSrcData = *pD0;
		uDstData = *pD1;
		if (uSrcData != uDstData) 
		{
			ret = false;
			Disp(" %08x=%08x <-> %08x=%08x\n", pD0, uSrcData, pD1, uDstData);
			Getc();
		}
		pD0++;
		pD1++;
	}

	if (ret == false)
		Disp("\n");

	return ret;
}


bool Compare32(u32 a0, u32 a1, u32 words)
{
	u32* pD0 = (u32 *)a0;
	u32* pD1 = (u32 *)a1;
	bool ret = true;
	u32  ecnt = 0;
	u32 i;

	for (i=0; i<words; i++)
	{
		if (*pD0 != *pD1) 
		{
			ret = false;
			Disp(" %08x=%08x <-> %08x=%08x\n", pD0, *pD0, pD1, *pD1);
			ecnt++;
		}
		pD0++;
		pD1++;
	}

	if (ret == false)
		Disp("\n");

	return ret;
}

//////////
// Function Name : DmaxDone
// Function Description : DMA ISR Routine
// Input : 	None
// Output :	None 
// Version : v0.1
void __irq Dma0Done(void)
{
    
  	DMACH_ClearIntPending(&oDmac0);
 	//rDMAC0IntTCClear = 0xff;
	printf ("DMA ISR %d\n", g_DmaDone);
	g_DmaDone=1;
	g_DmaDone++;
	INTC_ClearVectAddr();
       //Write_VECTADDR(0x0);
}

void __irq Dma1Done(void)
{
//	printf("Current TC1 : %x\n",rDMAC1C0Control);

	DMACH_ClearIntPending(&oDmac1);
	//rDMAC1IntTCClear = 0xff;
	printf ("DMA ISR %d\n", g_DmaDone);
	g_DmaDone=1;
	g_DmaDone++;
	INTC_ClearVectAddr();
}

void __irq Sdma0Done(void)
{
	DMACH_ClearIntPending(&oDmac2);
	//rDMAC1IntTCClear = 0xff;
	printf ("DMA ISR %d\n", g_DmaDone);
	g_DmaDone=1;
	g_DmaDone++;
	INTC_ClearVectAddr();
}

void __irq Sdma1Done(void)
{
	DMACH_ClearIntPending(&oDmac3);
	//rDMAC1IntTCClear = 0xff;
	printf ("DMA ISR %d\n", g_DmaDone);
	g_DmaDone=1;
	g_DmaDone++;
	INTC_ClearVectAddr();
}

//////////
// Function Name : DmaxDoneW
// Function Description : DMA ISR Routine
// Input : 	None
// Output :	None 
// Version : v0.1
void __irq Dma0DoneW(void)
{
   	DMACH_ClearIntPending(&oDmac0);	
//	Disp("DMA0 ISR %d\n", g_DmaDone0);

	if ( g_DmaDone0 < (g_TSize/DMAC0TxSize) )
	{
		DMACH_SetTransferSize(DMAC0TxSize,&oDmac0);					// set TransferSize
		DMACH_Start(&oDmac0);			
	}
	else
	{
		INTC_Disable(NUM_DMA0);
	}
	g_DmaDone0++;
	INTC_ClearVectAddr();
}

void __irq Dma1DoneW(void)
{
   	DMACH_ClearIntPending(&oDmac1);	
//	Disp("DMA1 ISR %d\n", g_DmaDone1);

	if ( g_DmaDone1 < (g_TSize/DMAC1TxSize) )
	{
		DMACH_SetTransferSize(DMAC1TxSize,&oDmac1);					// set TransferSize
		DMACH_Start(&oDmac1);			
	}
	else
	{
		INTC_Disable(NUM_DMA1);
	}
	g_DmaDone1++;
	INTC_ClearVectAddr();
}

void __irq Sdma0DoneW(void)
{
   	DMACH_ClearIntPending(&oDmac2);	
//	Disp ("SDMA0 ISR %d\n", g_DmaDone2);

	if ( g_DmaDone2 < (g_TSize/SDMAC0TxSize) )
	{
		DMACH_SetTransferSize(SDMAC0TxSize,&oDmac2);					// set TransferSize
		DMACH_Start(&oDmac2);			
	}
	else
	{
		INTC_Disable(NUM_SDMA0);
	}
	g_DmaDone2++;
	INTC_ClearVectAddr();
}

void __irq Sdma1DoneW(void)
{
   	DMACH_ClearIntPending(&oDmac3);	
//	Disp ("SDMA1 ISR %d\n", g_DmaDone3);

	if ( g_DmaDone3 < (g_TSize/SDMAC1TxSize) )
	{
		DMACH_SetTransferSize(SDMAC1TxSize,&oDmac3);					// set TransferSize
		DMACH_Start(&oDmac3);			
	}
	else
	{
		INTC_Disable(NUM_SDMA1);
	}
	g_DmaDone3++;
	INTC_ClearVectAddr();

}

//////////
// Function Name : DMAT_MemtoMem
// Function Description : Memory to Memory Transfer Test
// Input : 	None
// Output :	None 
// Version : v0.1
static void DMAT_MemtoMem(void)
{
	u32 i, csel, usel;
	u32 uTsize, uBurst, uCh;

	Disp("\nSelect DMA Controller : 0:DMA0, 1:DMA1, 2:SDMA0, 3:SDMA1	: ");
	csel=GetIntNum();
	Disp("\n");

	switch(csel)
	{
		case 0: 
				Disp("Selected DMAC 0 ..... \n");
			     	DMAC_InitCh(DMA0, DMA_ALL, &oDmac0);
				INTC_SetVectAddr(NUM_DMA0,  Dma0Done);
				INTC_Enable(NUM_DMA0);
			     	break;
               
		case 1: 
				Disp("Selected DMAC 1 ..... \n");
			     	DMAC_InitCh(DMA1, DMA_ALL, &oDmac1);
				INTC_SetVectAddr(NUM_DMA1,  Dma1Done);
				INTC_Enable(NUM_DMA1);
			     	break;
		case 2: 
				Disp("Selected SDMAC 0 ..... \n");
			     	DMAC_InitCh(SDMA0, DMA_ALL, &oDmac2);
				INTC_SetVectAddr(NUM_SDMA0, Sdma0Done );
				INTC_Enable(NUM_SDMA0);
			     	break;
		case 3: 
				Disp("Selected SDMAC 1 ..... \n");
			     	DMAC_InitCh(SDMA1, DMA_ALL, &oDmac3);
				INTC_SetVectAddr(NUM_SDMA1, Sdma1Done);
				INTC_Enable(NUM_SDMA1);
			     	break;
			     	
		default : Assert(0);
	}
       

       Disp("\nSelect Channel : 0:CH0, 1:CH1, 2:CH2, 3:CH3, 4:CH4, 5:CH5, 6:CH6, 7:CH7	: ");
	usel=GetIntNum();
	Disp("\n");

	switch(usel)
	{
		case 0: 
				uCh= DMA_A;
			     	break;             
		case 1: 
				uCh= DMA_B;
			     	break;
		case 2: 
				uCh= DMA_C;
			     	break;
		case 3: 
				uCh = DMA_D;
			     	break;	     	
		case 4: 
				uCh = DMA_E;
			     	break;
		case 5: 
				uCh = DMA_F;
			     	break;
		case 6: 
				uCh = DMA_G;
			     	break;
		case 7: 
				uCh = DMA_H;
			     	break;				
			     	
		default : Assert(0);
	}



	Disp("\nSelect Transfer Width : 0:BYTE, 1:HWORD, 2:WORD	: ");
	usel=GetIntNum();
	Disp("\n");

       switch(usel)
	{
		case 0: 
				uTsize = BYTE;
			     	break;
               
		case 1: 
				uTsize = HWORD;
			     	break;
		case 2: 
				uTsize = WORD;
			     	break;
					     	
		default : Assert(0);
	}

       Disp("\nSelect Burst Size : 0:SINGLE, 1:BURST4, 2:BURST8, 3:BURST16, 4:BURST32, 5:BURST64, 6:BURST128, 7:BURST256	: ");
	usel=GetIntNum();
	Disp("\n");

	switch(usel)
	{
		case 0: 
				uBurst = SINGLE;
			     	break;             
		case 1: 
				uBurst = BURST4;
			     	break;
		case 2: 
				uBurst = BURST8;
			     	break;
		case 3: 
				uBurst = BURST16;
			     	break;	     	
		case 4: 
				uBurst = BURST32;
			     	break;
		case 5: 
				uBurst = BURST64;
			     	break;
		case 6: 
				uBurst = BURST128;
			     	break;
		case 7: 
				uBurst = BURST256;
			     	break;				
			     	
		default : Assert(0);
	}
  
       Disp("\nSelect Transfer Size [1~0x200_0000] :   ");
	uDataCnts=GetIntNum();
	Disp("\n");

	// 0. Clear the rx/tx buf.
	for (i = 0; i<(uDataCnts*uTsize+16); i++)
	{
		*(u8 *)(uRxBuffAddr+i) = 0;
		*(u8 *)(uTxBuffAddr+i) = 0;
	}
	
	// 1. Set up the tx buf.
	for (i = 0; i<uDataCnts*uTsize; i++)
		*(u8 *)(uTxBuffAddr+i) = (u8)(i+2)%0xff;

	switch(csel)
	{
		case 0 :
		        // Channel, LLI_Address, SrcAddr, Src Type, DstAddr, Dst Type, Transfer Width, Transfer Size, OpMode(DEMAND), Src Req, Dst Req, Burst
			DMACH_Setup((DMA_CH)uCh, 0x0, uTxBuffAddr, 0, uRxBuffAddr, 0, (DATA_SIZE)uTsize, uDataCnts, DEMAND, MEM, MEM, (BURST_MODE)uBurst, &oDmac0);
	       	DMACH_Start(&oDmac0);
			break;
		case 1 :
		        // Channel, LLI_Address, SrcAddr, Src Type, DstAddr, Dst Type, Transfer Width, Transfer Size, OpMode(DEMAND), Src Req, Dst Req, Burst
			DMACH_Setup((DMA_CH)uCh, 0x0, uTxBuffAddr, 0, uRxBuffAddr, 0, (DATA_SIZE)uTsize, uDataCnts, DEMAND, MEM, MEM, (BURST_MODE)uBurst, &oDmac1);
	       	DMACH_Start(&oDmac1);
			break;
		case 2 :
		        // Channel, LLI_Address, SrcAddr, Src Type, DstAddr, Dst Type, Transfer Width, Transfer Size, OpMode(DEMAND), Src Req, Dst Req, Burst
			DMACH_Setup((DMA_CH)uCh, 0x0, uTxBuffAddr, 0, uRxBuffAddr, 0, (DATA_SIZE)uTsize, uDataCnts, DEMAND, MEM, MEM, (BURST_MODE)uBurst, &oDmac2);
	       	DMACH_Start(&oDmac2);
			break;
		case 3 :
		        // Channel, LLI_Address, SrcAddr, Src Type, DstAddr, Dst Type, Transfer Width, Transfer Size, OpMode(DEMAND), Src Req, Dst Req, Burst
			DMACH_Setup((DMA_CH)uCh, 0x0, uTxBuffAddr, 0, uRxBuffAddr, 0, (DATA_SIZE)uTsize, uDataCnts, DEMAND, MEM, MEM, (BURST_MODE)uBurst, &oDmac3);
	       	DMACH_Start(&oDmac3);
			break;
		default :
			Assert(0);
	}

	while(g_DmaDone==0);								// Int.
	//while (!DMAC_IsTransferDone(&oDmac0));			// Polling

	if (CompareDMA(uTxBuffAddr, uRxBuffAddr, (DATA_SIZE)uTsize, uDataCnts))
		Disp(" >> Test Tx&Rx -> Ok << \n");
	else
	{
		Disp(" >>*** Tx-data & Rx-data mismatch ***<< \n");
	}


	switch(csel)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
caoporen国产精品视频| 亚洲综合视频在线观看| 在线播放中文字幕一区| 日本精品一区二区三区四区的功能| 国产精品911| 国产精品白丝jk白祙喷水网站| 激情成人综合网| 九九国产精品视频| 国产成+人+日韩+欧美+亚洲| 成人午夜在线播放| 91亚洲精品久久久蜜桃网站| www.av亚洲| 91精品办公室少妇高潮对白| 在线视频你懂得一区| 欧美视频你懂的| 日韩午夜激情av| 精品久久久久久久久久久院品网| 久久女同互慰一区二区三区| 精品日韩一区二区三区免费视频| 久久嫩草精品久久久久| 亚洲欧洲另类国产综合| 亚洲一区二区三区激情| 免费观看在线综合色| 琪琪久久久久日韩精品| 国产精品一区二区三区四区| 91麻豆精东视频| 日韩欧美激情一区| 国产精品丝袜久久久久久app| 一区二区三区高清| 久久机这里只有精品| 99久久99久久免费精品蜜臀| 欧美精品色一区二区三区| 国产情人综合久久777777| 亚洲在线视频网站| 国产麻豆日韩欧美久久| 欧美在线影院一区二区| 久久免费看少妇高潮| 亚洲欧美激情小说另类| 久久99精品久久久久久| 色婷婷精品大视频在线蜜桃视频| 91精品国产综合久久精品性色| 久久精品一区二区三区不卡| 亚洲国产一二三| 国产999精品久久| 欧美肥妇毛茸茸| 中文字幕一区二区不卡| 久久精品久久久精品美女| 一本色道久久综合狠狠躁的推荐| 欧美mv日韩mv亚洲| 午夜精品一区二区三区免费视频 | 一区免费观看视频| 日本sm残虐另类| 欧美中文一区二区三区| 中文字幕一区二区三区不卡在线| 国内精品在线播放| 91精品国产欧美一区二区成人| 成人免费在线视频观看| 国产盗摄一区二区三区| 欧美一二三区在线观看| 三级亚洲高清视频| 欧美伊人精品成人久久综合97| 国产精品不卡一区| 高清不卡在线观看| 久久这里只有精品6| 久久激情综合网| 欧美一区二区在线不卡| 偷拍亚洲欧洲综合| 欧美日韩黄视频| 亚洲国产日日夜夜| 欧美在线|欧美| 亚洲精品国产高清久久伦理二区 | 一二三四社区欧美黄| 成人app在线| 国产精品每日更新在线播放网址| 国产一区二区三区观看| 精品国产一二三| 国产精品一卡二卡| 久久久五月婷婷| 国产成人综合网| 中文字幕的久久| 99久久精品免费观看| 国产精品大尺度| 日本高清不卡一区| 亚洲无人区一区| 欧美日韩久久久一区| 秋霞成人午夜伦在线观看| 91精品国产色综合久久ai换脸| 美女视频黄久久| 国产视频视频一区| 色呦呦一区二区三区| 亚洲国产视频直播| 欧美成人激情免费网| 国产一区二三区好的| 国产精品网站在线| 欧美在线观看视频在线| 另类调教123区 | 欧美亚洲另类激情小说| 亚洲国产精品久久人人爱蜜臀| 欧美精品第1页| 麻豆91精品视频| 国产精品美女久久福利网站 | 亚洲一区电影777| 欧美v国产在线一区二区三区| 国产一区三区三区| 亚洲免费大片在线观看| 91精品国模一区二区三区| 国产一区二区精品久久91| 亚洲四区在线观看| 欧美成人aa大片| 99久久精品国产网站| 日本欧美韩国一区三区| 亚洲国产激情av| 欧美另类videos死尸| 国产精品一区二区在线播放| 亚洲一区日韩精品中文字幕| 337p日本欧洲亚洲大胆精品| 91国偷自产一区二区三区成为亚洲经典| 石原莉奈一区二区三区在线观看| 欧美激情一区二区三区蜜桃视频 | 久久精品人人做人人爽97| 欧美亚一区二区| 久久av资源网| 亚洲一区二区在线免费看| 国产亚洲va综合人人澡精品| 91精品一区二区三区在线观看| 成人一区二区在线观看| 激情欧美日韩一区二区| 亚洲va中文字幕| 国产精品久久久久7777按摩 | 亚洲乱码中文字幕| 国产亚洲欧洲997久久综合 | 国产午夜精品一区二区三区四区| 欧美区视频在线观看| 色综合久久久久久久久| 国产成人免费视频网站| 精品一区二区三区免费播放 | 国产毛片精品视频| 美女免费视频一区| 丝袜国产日韩另类美女| 一区二区三区欧美| 亚洲欧美日韩人成在线播放| 国产精品理论在线观看| 中文字幕av免费专区久久| 欧美videossexotv100| 制服丝袜一区二区三区| 欧美日韩国产综合草草| 欧美三区免费完整视频在线观看| aaa欧美大片| 91亚洲永久精品| 97精品视频在线观看自产线路二| 成人av午夜电影| 91污片在线观看| 在线一区二区三区| 欧美又粗又大又爽| 在线观看成人小视频| 欧美三级三级三级爽爽爽| 欧美精品在线一区二区| 日韩三级电影网址| 欧美精品一区二区三| 久久久91精品国产一区二区精品| 国产丝袜在线精品| 国产精品国产三级国产| 又紧又大又爽精品一区二区| 亚洲国产精品一区二区久久恐怖片| 亚洲国产日韩在线一区模特| 天堂一区二区在线免费观看| 麻豆精品视频在线观看| 懂色av一区二区三区蜜臀| 不卡一区二区在线| 在线看不卡av| 精品精品国产高清一毛片一天堂| 久久久精品影视| √…a在线天堂一区| 亚洲成a人在线观看| 久久99久国产精品黄毛片色诱| 国产成人综合亚洲91猫咪| 色婷婷激情一区二区三区| 日韩欧美一级特黄在线播放| 国产视频一区在线播放| 亚洲综合在线免费观看| 美女精品自拍一二三四| 成人app软件下载大全免费| 在线中文字幕不卡| 日韩你懂的在线观看| 国产精品初高中害羞小美女文| 五月婷婷激情综合| 成人免费黄色在线| 7777精品伊人久久久大香线蕉超级流畅| 精品久久久久久久久久久久久久久| 欧美韩国日本一区| 视频一区在线播放| 国产成人精品亚洲日本在线桃色| 欧美做爰猛烈大尺度电影无法无天| 91精品国产黑色紧身裤美女| 国产精品久久久久四虎| 久久精品久久99精品久久| 欧美最新大片在线看| 中文字幕 久热精品 视频在线| 麻豆一区二区三区| 91老司机福利 在线|