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

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

?? dma.c

?? Samsung ARM for 2440
?? C
字號:
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h" 
#include "dma.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位為設備ID,低16位的高8位為DMA傳送源,目的屬性(AHP/APB,INCREASE/FIX)
//低8位為請求源,返回值失敗為REQUEST_DMA_FAIL,成功高16位為設備ID,低8位為申請到的通道
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;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲1区2区3区视频| 在线精品亚洲一区二区不卡| www.亚洲在线| 91麻豆精品国产91久久久资源速度| 国产成人综合在线观看| 性做久久久久久久久| 欧美三级日韩三级| 青青草伊人久久| 亚洲欧美一区二区三区久本道91| 日精品一区二区三区| 99久久夜色精品国产网站| 日韩欧美国产成人一区二区| 亚洲综合色成人| 99精品久久免费看蜜臀剧情介绍| 久久久噜噜噜久久人人看 | 久久国产日韩欧美精品| 在线精品视频免费播放| 亚洲欧洲无码一区二区三区| 国产剧情一区在线| 精品电影一区二区| 免费久久精品视频| 欧美一级淫片007| 天天综合网天天综合色| 欧美影片第一页| 亚洲一区在线观看免费| 色偷偷成人一区二区三区91| 中文字幕一区免费在线观看| 99综合影院在线| 亚洲欧洲性图库| 91麻豆国产福利在线观看| 中文天堂在线一区| 成人福利视频在线| 自拍偷拍国产亚洲| 色综合中文字幕国产| 国产精品国产a级| 91在线无精精品入口| 亚洲免费av在线| 欧美亚一区二区| 日韩精品91亚洲二区在线观看 | 91老师国产黑色丝袜在线| 亚洲日穴在线视频| 欧美亚洲免费在线一区| 亚洲成av人片在www色猫咪| 欧美日韩电影在线播放| 奇米777欧美一区二区| 欧美成人女星排行榜| 国产一区视频在线看| 国产精品剧情在线亚洲| 91福利区一区二区三区| 视频一区中文字幕| 欧美tickling网站挠脚心| 国产一区二区免费视频| 亚洲欧洲99久久| 欧美绝品在线观看成人午夜影视| 美女性感视频久久| 国产精品美女久久久久av爽李琼| 91蝌蚪porny九色| 午夜精品久久久久久久 | 成人免费视频在线观看| 欧美在线啊v一区| 日韩成人精品在线观看| 2024国产精品视频| 99re热视频精品| 日本成人中文字幕| 中文字幕不卡在线| 欧美高清dvd| 粉嫩aⅴ一区二区三区四区五区| 自拍偷拍国产精品| 日韩一区二区在线观看| 福利一区在线观看| 香蕉av福利精品导航| 久久久国产精华| 欧美日韩国产小视频| 国产成人高清在线| 国产精品入口麻豆原神| 欧美一区二区三级| 99re这里只有精品首页| 激情偷乱视频一区二区三区| 亚洲欧美日韩人成在线播放| 欧美一级理论性理论a| av不卡免费在线观看| 久久国产免费看| 一区二区三区在线视频播放| 久久久久久免费毛片精品| 欧美三级韩国三级日本三斤| 成人激情动漫在线观看| 久久精品国产999大香线蕉| 亚洲激情五月婷婷| 国产欧美日本一区视频| 欧美精品在线一区二区三区| a亚洲天堂av| 国产麻豆精品theporn| 日本成人在线一区| 亚洲成国产人片在线观看| 一区二区三区在线免费视频| 国产日韩欧美一区二区三区乱码| 777xxx欧美| 欧美日韩一级视频| 在线视频综合导航| 91理论电影在线观看| 成人天堂资源www在线| 久久精品国产亚洲一区二区三区| 亚洲成人高清在线| 亚洲美女淫视频| 日韩理论电影院| 国产精品伦一区| 国产精品国产馆在线真实露脸 | 欧美本精品男人aⅴ天堂| 欧美日韩国产天堂| 欧美日韩一区二区在线视频| 色94色欧美sute亚洲线路二| 91丝袜高跟美女视频| 99re这里都是精品| 91久久奴性调教| 在线精品视频小说1| 欧美亚洲综合网| 欧美日韩一区二区三区在线| 欧美日韩精品一区视频| 欧美一区二区三区在线观看| 3d动漫精品啪啪| 精品日本一线二线三线不卡| 亚洲精品一区二区三区福利| 亚洲精品一线二线三线无人区| 日韩丝袜情趣美女图片| 欧美成人r级一区二区三区| 欧美成人福利视频| 久久精品一区八戒影视| 国产精品久久久久一区二区三区| 国产精品毛片久久久久久| 亚洲摸摸操操av| 亚洲第一福利一区| 免费观看日韩电影| 国产乱理伦片在线观看夜一区| 国产福利精品导航| 9l国产精品久久久久麻豆| 欧美亚男人的天堂| 精品人在线二区三区| 国产精品国产三级国产普通话三级| 亚洲视频免费观看| 亚洲电影视频在线| 国产专区欧美精品| 9久草视频在线视频精品| 欧美人与禽zozo性伦| 欧美不卡激情三级在线观看| 国产精品久久久久久久久动漫| 亚洲女女做受ⅹxx高潮| 日本成人在线网站| 成人丝袜视频网| 欧美日韩中文精品| 久久久亚洲午夜电影| 一区二区三区欧美在线观看| 男女性色大片免费观看一区二区 | 有坂深雪av一区二区精品| 日韩精品电影一区亚洲| 成人激情免费视频| 日韩一级完整毛片| 国产精品天天看| 日韩av电影天堂| 成人午夜电影小说| 91精品国产高清一区二区三区| 国产亚洲一区二区三区四区| 一区二区三区久久久| 国产精品乡下勾搭老头1| 欧日韩精品视频| 亚洲国产精品99久久久久久久久 | 日韩一区在线免费观看| 久久精品国产成人一区二区三区| 91丨porny丨最新| 欧美r级电影在线观看| 一区二区三区欧美在线观看| 国产一区二区女| 日韩一区二区在线看| 亚洲激情自拍偷拍| 成人美女视频在线观看18| 日韩欧美国产精品| 天天综合色天天综合色h| 91丨porny丨国产| 国产欧美精品日韩区二区麻豆天美| 亚洲18女电影在线观看| 一本色道久久加勒比精品| 久久精品夜色噜噜亚洲aⅴ| 日韩av不卡在线观看| 欧美视频一区二区三区四区| 亚洲男人天堂一区| 成人免费av网站| 国产偷v国产偷v亚洲高清| 麻豆传媒一区二区三区| 欧美喷潮久久久xxxxx| 一区二区在线观看视频| 福利一区二区在线| 久久久久国产免费免费| 韩国精品免费视频| 欧美成人伊人久久综合网| 丝袜a∨在线一区二区三区不卡| 色欧美88888久久久久久影院| 亚洲欧美自拍偷拍| 91影院在线免费观看| 亚洲色图欧洲色图| 色婷婷综合激情| 亚洲国产色一区|