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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? dma.c

?? 在沒(méi)有系統(tǒng)的情況下
?? C
字號(hào):
#undef	__DEBUG_VERSION
#include "def.h"
#include "2410addr.h"
#include "2410lib.h"
#include "2410slib.h"
#include "DMAAdmin.h"

#define	DMA_CHECK_ATTR	1

typedef struct{						//can't use __packed???
    volatile U32 DISRC;	    //0x0
    volatile U32 DISRCC;    //0x4
    volatile U32 DIDST;	    //0x8
    volatile U32 DIDSTC;    //0xc
    volatile U32 DCON;	    //0x10
    volatile U32 DSTAT;	    //0x14
    volatile U32 DCSRC;	    //0x18
    volatile U32 DCDST;	    //0x1c
    volatile U32 DMASKTRIG; //0x20
}DMAReg;

static struct{
	U16 used;
	U16 DevID;
	DMAReg *pDMA;
}
DMAChannel[MAX_DMA_CHANNEL];

/********************************************************/
//attr高16位為設(shè)備ID,低16位的高8位為DMA傳送源,目的屬性(AHP/APB,INCREASE/FIX)
//低8位為請(qǐng)求源,返回值失敗為REQUEST_DMA_FAIL,成功高16位為設(shè)備ID,低8位為申請(qǐng)到的通道
U32 RequestDMASW(U32 attr, U32 mode)
{
	U16 channel;
	U32 ret;
	
	attr &= ~0xff;
	mode &= ~HW_TRIG;
	
	for(channel=0; channel<(MAX_DMA_CHANNEL*0x10); channel+=0x10)
	{
		ret = RequestDMA(attr|channel, mode);
		if(ret!=REQUEST_DMA_FAIL)
			break;
	}
	return ret;			
}

U32 RequestDMA(U32 attr, U32 mode)
{
	U16 DevID, ReqSrc, ch;
	U32 ret=REQUEST_DMA_FAIL, r;
	
	DevID   = attr>>16;	
	ReqSrc  = attr&0xff;	
	
	if(((ReqSrc>>4)>=MAX_DMA_CHANNEL)||((ReqSrc&0xf)>4))
		return ret;
		
	EnterCritical(&r);
		
	if(DMAChannel[ReqSrc>>4].used!=DMA_IS_FREE)
	{
		U8 src = ReqSrc;			
		
		if(src==REQ_IISDI)
		{		
			if(DMAChannel[2].used!=DMA_IS_FREE)
				goto RequestDmaExit;
			else							
				ReqSrc = 0x21;											
		}
		else if(src==REQ_SDI)
		{
			if(DMAChannel[2].used!=DMA_IS_FREE)
			{
				if(DMAChannel[3].used!=DMA_IS_FREE)
					goto RequestDmaExit;
				else
					ReqSrc = 0x31;				
			}
			else
				ReqSrc = 0x22;					
		}
		else if(src==REQ_SPI)
		{
			if(DMAChannel[3].used!=DMA_IS_FREE)
				goto RequestDmaExit;
			else				
				ReqSrc = 0x32;				
		}
		else if(src==REQ_TIMER)
		{
			if(DMAChannel[2].used!=DMA_IS_FREE)
			{
				if(DMAChannel[3].used!=DMA_IS_FREE)
					goto RequestDmaExit;
				else				
					ReqSrc = 0x33;				
			}
			else				
				ReqSrc = 0x23;					
		}
		else
			goto RequestDmaExit;		
	}	
			
	ch = ReqSrc>>4;
	if(mode&HW_TRIG)
		DMAChannel[ch].used  = DMA_IS_HWTRIG;
	else
		DMAChannel[ch].used  = DMA_IS_SWTRIG;	
	DMAChannel[ch].DevID = DevID;
	DMAChannel[ch].pDMA  = (DMAReg *)(0x4b000000+(ch)*0x40);	
	DMAChannel[ch].pDMA->DMASKTRIG = 1<<2;	//stop dma
	DMAChannel[ch].pDMA->DISRCC = (attr>>8)&3;	
	DMAChannel[ch].pDMA->DIDSTC = (attr>>12)&3;	
	mode &= ~0x07000000;
	mode |= (ReqSrc&0x7)<<24;
	DMAChannel[ch].pDMA->DCON	= mode;	

//	DbgOut("Request DMA %x success\n", ReqSrc);
	ret = (DevID<<16)|ReqSrc;
	
RequestDmaExit:
	ExitCritical(&r);	
	return ret;			
}

U16 ReleaseDMA(U32 attr)
{
	U16 DevID, ReqSrc, ch;	
	
	DevID  = attr>>16;
	ReqSrc = attr&0xf;
	ch     = (attr&0xf0)>>4;
	
#if	DMA_CHECK_ATTR					
	if((ch>=MAX_DMA_CHANNEL)||(ReqSrc>4))
		return 1;
	if((DMAChannel[ch].used==DMA_IS_FREE)||(DMAChannel[ch].DevID!=DevID))
		return 1;
#endif	
		
	DMAChannel[ch].pDMA->DMASKTRIG = 0;//4;	//stop dma and channel off 
	DMAChannel[ch].used = DMA_IS_FREE;
	
	return 0;					
}

U16 StartDMA(U32 attr)
{
	U16 DevID, ReqSrc, ch;	
	
	DevID  = attr>>16;
	ReqSrc = attr&0xf;
	ch     = (attr&0xf0)>>4;		
#if	DMA_CHECK_ATTR		
	if((ch>=MAX_DMA_CHANNEL)||(ReqSrc>4))
		return 1;
	if((DMAChannel[ch].used==DMA_IS_FREE)||(DMAChannel[ch].DevID!=DevID))
		return 1;
#endif
	
	if(DMAChannel[ch].used==DMA_IS_HWTRIG)
		DMAChannel[ch].pDMA->DMASKTRIG = 2;		//channel on
	if(DMAChannel[ch].used==DMA_IS_SWTRIG)
		DMAChannel[ch].pDMA->DMASKTRIG = 3;		//sw_trig
		
	return 0;	
}

U16 StopDMA(U32 attr)
{
	U16 DevID, ReqSrc, ch;
	
	DevID  = attr>>16;
	ReqSrc = attr&0xf;
	ch     = (attr&0xf0)>>4;		
#if	DMA_CHECK_ATTR		
	if((ch>=MAX_DMA_CHANNEL)||(ReqSrc>4))
		return 1;
	if((DMAChannel[ch].used==DMA_IS_FREE)||(DMAChannel[ch].DevID!=DevID))
		return 1;
#endif	

	DMAChannel[ch].pDMA->DMASKTRIG = 1<<2;	//channel off	
		
	return 0;
}

U16 SetDMARun(U32 attr, U32 src_addr, U32 dst_addr, U32 len)
{
	U16 DevID, ReqSrc, ch;	
	
	DevID  = attr>>16;
	ReqSrc = attr&0xf;
	ch     = (attr&0xf0)>>4;		
#if	DMA_CHECK_ATTR		
	if((ch>=MAX_DMA_CHANNEL)||(ReqSrc>4))
		return 1;
	if((DMAChannel[ch].used==DMA_IS_FREE)||(DMAChannel[ch].DevID!=DevID))
		return 1;
#endif
	DMAChannel[ch].pDMA->DISRC = src_addr;
	DMAChannel[ch].pDMA->DIDST = dst_addr;
	DMAChannel[ch].pDMA->DCON &= ~0xfffff;
	DMAChannel[ch].pDMA->DCON |= len&0xfffff;
	
	if(attr&DMA_START)
	{
		if(DMAChannel[ch].used==DMA_IS_HWTRIG)
			DMAChannel[ch].pDMA->DMASKTRIG = 2;		//channel on
		if(DMAChannel[ch].used==DMA_IS_SWTRIG)
			DMAChannel[ch].pDMA->DMASKTRIG = 3;		//sw_trig
	}
	
	return 0;
}

U32 QueryDMAStat(U32 attr)
{
	U16 DevID, ReqSrc, ch;
	
	DevID  = attr>>16;
	ReqSrc = attr&0xf;
	ch     = (attr&0xf0)>>4;		
#if	DMA_CHECK_ATTR		
	if((ch>=MAX_DMA_CHANNEL)||(ReqSrc>4))
		return -1;
	if((DMAChannel[ch].used==DMA_IS_FREE)||(DMAChannel[ch].DevID!=DevID))
		return -1;
#endif	

	return DMAChannel[ch].pDMA->DSTAT;	//STAT[21:20], CURR_TC[19:0] 
}

U32 QueryDMASrc(U32 attr)
{
	U16 DevID, ReqSrc, ch;
	
	DevID  = attr>>16;
	ReqSrc = attr&0xf;
	ch     = (attr&0xf0)>>4;		
#if	DMA_CHECK_ATTR		
	if((ch>=MAX_DMA_CHANNEL)||(ReqSrc>4))
		return -1;
	if((DMAChannel[ch].used==DMA_IS_FREE)||(DMAChannel[ch].DevID!=DevID))
		return -1;
#endif	

	return DMAChannel[ch].pDMA->DCSRC;
}

U32 QueryDMADst(U32 attr)
{
	U16 DevID, ReqSrc, ch;
	
	DevID  = attr>>16;
	ReqSrc = attr&0xf;
	ch     = (attr&0xf0)>>4;		
#if	DMA_CHECK_ATTR		
	if((ch>=MAX_DMA_CHANNEL)||(ReqSrc>4))
		return -1;
	if((DMAChannel[ch].used==DMA_IS_FREE)||(DMAChannel[ch].DevID!=DevID))
		return -1;
#endif	

	return DMAChannel[ch].pDMA->DCDST;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产aⅴ成人精品无吗| 国产成人丝袜美腿| 久久色.com| 一本大道久久a久久精二百| 日韩在线一区二区| 国产精品你懂的在线欣赏| 欧美精品在线一区二区三区| a4yy欧美一区二区三区| 精品亚洲免费视频| 亚洲va韩国va欧美va| 欧美韩国一区二区| 欧美videos中文字幕| 欧美在线免费观看亚洲| voyeur盗摄精品| 国产一区二区在线视频| 日本不卡视频一二三区| 一卡二卡三卡日韩欧美| 国产精品国产自产拍在线| 亚洲精品一线二线三线| 91精品国产综合久久久蜜臀粉嫩| 91蜜桃在线观看| 成人小视频免费观看| 精品亚洲aⅴ乱码一区二区三区| 亚洲午夜电影网| 亚洲欧美日韩国产综合在线| 国产精品三级av在线播放| 欧美精品一区视频| 欧美电影免费观看高清完整版在线观看| 色8久久精品久久久久久蜜| 99精品国产一区二区三区不卡| 国产精品一区二区在线看| 久草精品在线观看| 麻豆精品蜜桃视频网站| 日本va欧美va瓶| 蜜臀精品久久久久久蜜臀| 午夜电影网一区| 亚洲一区二区在线免费观看视频| 亚洲色图欧美在线| 亚洲美女免费在线| 亚洲综合成人在线| 亚洲午夜激情网页| 日欧美一区二区| 青青青爽久久午夜综合久久午夜| 五月婷婷色综合| 日韩激情视频网站| 青青草精品视频| 久久99热这里只有精品| 激情综合亚洲精品| 国产传媒日韩欧美成人| 成人激情电影免费在线观看| 99久久精品国产精品久久| 色欲综合视频天天天| 欧美体内she精视频| 欧美另类videos死尸| 日韩欧美三级在线| 久久久久国产精品厨房| 国产精品夫妻自拍| 亚洲国产精品久久不卡毛片| 亚洲大片精品永久免费| 麻豆91在线播放免费| 国产精品中文字幕日韩精品| www.在线成人| 欧美揉bbbbb揉bbbbb| 日韩免费高清视频| 欧美国产激情二区三区 | 一区二区三区电影在线播| 亚洲18影院在线观看| 日韩成人精品在线观看| 国产乱码精品一区二区三区av| 国产成人精品亚洲777人妖| 91麻豆免费在线观看| 欧美日韩国产中文| 久久久三级国产网站| 亚洲女同女同女同女同女同69| 亚洲午夜久久久| 国产一区二区不卡| 一本色道久久综合精品竹菊| 欧美一区日本一区韩国一区| 国产亚洲精品aa午夜观看| 亚洲码国产岛国毛片在线| 免费观看日韩av| 99久久国产综合精品麻豆| 欧美猛男超大videosgay| 久久久久久黄色| 亚洲国产欧美一区二区三区丁香婷| 麻豆国产精品一区二区三区 | 色一情一乱一乱一91av| 欧美一区二区高清| 国产精品三级av| 免费在线成人网| 99热在这里有精品免费| 欧美一级一区二区| 亚洲视频你懂的| 激情六月婷婷久久| 欧美午夜电影在线播放| 国产亚洲欧洲997久久综合| 亚洲va在线va天堂| 成人av资源站| 亚洲精品一区在线观看| 亚洲123区在线观看| 成人精品在线视频观看| 日韩手机在线导航| 亚洲一区二区三区在线| 春色校园综合激情亚洲| 日韩欧美国产成人一区二区| 亚洲另类在线制服丝袜| 国产精品亚洲专一区二区三区| 精品视频123区在线观看| 国产精品电影一区二区| 国产精品亚洲综合一区在线观看| 在线不卡的av| 亚洲在线成人精品| 91丨九色丨尤物| 国产精品国模大尺度视频| 国产一区久久久| 精品国产一区二区三区久久久蜜月| 亚洲国产一区二区视频| 色呦呦网站一区| 中文字幕色av一区二区三区| 国产成人综合亚洲91猫咪| 日韩精品一区二区三区三区免费| 午夜在线成人av| 欧美性色aⅴ视频一区日韩精品| 亚洲欧美中日韩| 高清久久久久久| 久久久91精品国产一区二区三区| 极品美女销魂一区二区三区免费| 欧美大度的电影原声| 日韩电影网1区2区| 欧美精品第1页| 丝袜亚洲精品中文字幕一区| 精品视频一区三区九区| 亚洲精品日韩综合观看成人91| 99re成人精品视频| 中文字幕制服丝袜成人av| www.亚洲人| 亚洲欧美日韩国产另类专区| 色综合久久九月婷婷色综合| 亚洲人被黑人高潮完整版| 91免费在线视频观看| 亚洲欧美激情插 | 久久毛片高清国产| 国产一区二三区| 国产亚洲短视频| 大胆亚洲人体视频| 亚洲色图一区二区三区| 色欧美片视频在线观看 | 一区二区三区免费网站| 欧美伊人久久久久久久久影院 | 亚洲综合一区二区| 欧美日韩视频在线观看一区二区三区| 亚洲小少妇裸体bbw| 欧美肥妇bbw| 黄网站免费久久| 中文字幕精品在线不卡| 97se狠狠狠综合亚洲狠狠| 亚洲一区欧美一区| 日韩一区二区三区高清免费看看| 美女看a上一区| 国产欧美在线观看一区| 91麻豆6部合集magnet| 亚洲一区二区影院| 久久日一线二线三线suv| 风间由美一区二区三区在线观看| 最新日韩在线视频| 91.成人天堂一区| 国产激情视频一区二区三区欧美| 中文字幕日韩欧美一区二区三区| 欧美三级欧美一级| 国内精品免费在线观看| 综合分类小说区另类春色亚洲小说欧美 | 日韩一区二区电影在线| 国产乱码精品1区2区3区| 亚洲精品综合在线| 日韩精品最新网址| av一区二区三区黑人| 日本欧美大码aⅴ在线播放| 国产日韩精品久久久| 欧美日韩日日夜夜| 国产成人精品免费| 天堂在线一区二区| 国产精品女同一区二区三区| 91精品欧美福利在线观看| 成人免费观看av| 蜜桃av一区二区三区电影| 中文字幕亚洲欧美在线不卡| 欧美日韩精品三区| 成人av资源在线| 极品少妇xxxx精品少妇偷拍 | 国产一区二区调教| 亚洲福利一二三区| 中文字幕欧美日韩一区| 91麻豆精品国产91久久久使用方法 | 亚洲午夜视频在线观看| 国产欧美日韩麻豆91| 91精品国产91综合久久蜜臀| 99精品久久只有精品| 国产成人综合在线观看| 麻豆精品久久精品色综合| 亚洲福利一区二区|