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

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

?? dma1.c

?? uboot for twarm board
?? C
?? 第 1 頁 / 共 2 頁
字號:
   if ( DMA_Get_Stat( host, eumbbar, channel, &stat ) != DMASUCCESS )   {		   return DMAINVALID;   }   if ( stat.cb == 1 )   {	   /* DMA is not free */	   return DMACHNBUSY;   }   mode = load_runtime_reg( eumbbar, dma_reg_tb[host][channel*NUM_DMA_REG + DMA_MR_REG] );   /* clear DMA_MR(CS) */   mode &= 0xfffffffe;   store_runtime_reg( eumbbar, dma_reg_tb[host][channel*NUM_DMA_REG + DMA_MR_REG], mode );   /* set DMA_MR(CS) */   mode |= CS;   store_runtime_reg( eumbbar, dma_reg_tb[host][channel*NUM_DMA_REG + DMA_MR_REG], mode );   return DMASUCCESS;}/*********************************************************** * function: DMA_Halt * * description: halt the current dma transaction on the specified *              channel. *              return DMASUCCESS if success otherwise return DMAINVALID * * note: if the specified DMA channel is idle, nothing happens *************************************************************/staticDMAStatus DMA_Halt( LOCATION host, unsigned int eumbbar, unsigned int channel ){   unsigned int mode;   if ( channel != 0 && channel != 1 )   {	   return DMAINVALID;   }   mode = load_runtime_reg( eumbbar, dma_reg_tb[host][channel*NUM_DMA_REG + DMA_MR_REG]);   /* clear DMA_MR(CS) */   mode &= 0xfffffffe;   store_runtime_reg(eumbbar, dma_reg_tb[host][channel*NUM_DMA_REG + DMA_MR_REG], mode );   return DMASUCCESS;}/************************************************************* * function: DMA_Chn_Cnt * * description: set the DMA_MR(CC) bit for a given channel *              that is in chaining mode. *              return DMASUCCESS if successfule, otherwise return *              DMAINVALID. * * note: if the given channel is not in chaining mode, nothing *       happen. * *************************************************************/staticDMAStatus DMA_Chn_Cnt( LOCATION host, unsigned int eumbbar, unsigned int channel ){	DMA_MR mode;	if ( channel != 0 && channel != 1 )	{		return DMAINVALID;	}	if ( DMA_Get_Mode( host, eumbbar, channel, &mode ) != DMASUCCESS )	{			return DMAINVALID;	}	if ( mode.ctm == 0 )	{		/* either illegal mode or not chaining mode */		return DMAINVALID;	}	mode.cc = 1;	return DMA_Set_Mode( host, eumbbar, channel, mode );}/************************************************************** * function: DMA_Bld_Desp * * description: set current descriptor address register *              according to the desp for a given channel * *              if the given channel is busy return DMACHNBUSY *              and no change made, otherwise return DMASUCCESS. * * note: **************************************************************/staticDMAStatus DMA_Bld_Desp( LOCATION host,						   unsigned int eumbbar,						   unsigned int channel,						   DMA_CDAR     desp ){	DMA_SR status;	unsigned int temp;	if ( channel != 0 && channel != 1 )	{		/* channel number out of range */		return DMAINVALID;	}	if ( DMA_Get_Stat( host, eumbbar, channel, &status ) != DMASUCCESS )	{			return DMAINVALID;	}	if ( status.cb == 1 )	{		/* channel busy */		return DMACHNBUSY;	}	temp = ( desp.cda & 0x7ffffff ) << 5;	temp |= (( desp.snen & 0x1 ) << 4 );	temp |= (( desp.eosie & 0x1 ) << 3 );	temp |= (( desp.ctt   & 0x3 ) << 1 );    temp |= ( desp.eotd  & 0x1 );    store_runtime_reg( eumbbar, dma_reg_tb[host][channel*NUM_DMA_REG+DMA_CDAR_REG], temp );#ifdef DMADBG0   PRINT( "%s(%d): %s DMA %d (0x%08x) cdar := 0x%08x\n", __FILE__, __LINE__,		  ( host == LOCAL ? "local" : "remote" ), channel, dma_reg_tb[host][channel*NUM_DMA_REG+DMA_CDAR_REG], temp );#endif	return DMASUCCESS;}/************************************************************** * function: DMA_Poke_Desp * * description: poke the current descriptor address register *              for a given channel * *              return DMASUCCESS if no error * * note: Due to the undeterministic parallellism of DMA operation, *       the value returned by this function shall be taken as *       the most recently used descriptor when the last time *       DMA starts a chaining mode operation. **************************************************************/staticDMAStatus DMA_Poke_Desp( LOCATION host,						    unsigned int eumbbar,						    unsigned int channel,						    DMA_CDAR     *desp ){	unsigned int cdar;	if ( channel != 0 && channel != 1 || desp == 0 )	{			return DMAINVALID;	}    cdar = load_runtime_reg( eumbbar, dma_reg_tb[host][channel*NUM_DMA_REG+DMA_CDAR_REG] );#ifdef DMADBG0   PRINT( "%s(%d): %s DMA %d (0x%08x) cdar : 0x%08x\n", __FILE__, __LINE__,		  ( host == LOCAL ? "local" : "remote" ), channel, dma_reg_tb[host][channel*NUM_DMA_REG+DMA_CDAR_REG], cdar );#endif	desp->cda   = ( cdar & 0xffffffe0 ) >> 5;	desp->snen  = ( cdar & 0x00000010 ) >> 4;	desp->eosie = ( cdar & 0x00000008 ) >> 3;	desp->ctt   = ( cdar & 0x00000006 ) >> 1;	desp->eotd  = ( cdar & 0x00000001 );	return DMASUCCESS;}/************************************************************** * function: DMA_Bld_Curr * * description: set current src, dest, byte count registers *              according to the desp for a given channel *              return DMASUCCESS if no error. * * note: **************************************************************/staticDMAStatus DMA_Bld_Curr( LOCATION host,					   unsigned int eumbbar,					   unsigned int channel,					   DMA_CURR     desp ){	DMA_SR status;	if ( channel != 0 && channel != 1 )	{		/* channel number out of range */		return DMAINVALID;	}	if ( DMA_Get_Stat( host, eumbbar, channel, &status ) != DMASUCCESS )	{		 return DMAINVALID;	}	if ( status.cb == 1  )	{		/* channel busy */		return DMACHNBUSY;	}	desp.byte_cnt &= 0x03ffffff; /* upper 6-bits are 0s */    store_runtime_reg( eumbbar, dma_reg_tb[host][channel*NUM_DMA_REG+DMA_SAR_REG], desp.src_addr );#ifdef DMADBG0   PRINT( "%s(%d): %s DMA %d (0x%08x) src := 0x%08x\n", __FILE__, __LINE__,		  ( host == LOCAL ? "local" : "remote" ), channel, dma_reg_tb[host][channel*NUM_DMA_REG+DMA_CDAR_REG], desp.src_addr );#endif    store_runtime_reg( eumbbar, dma_reg_tb[host][channel*NUM_DMA_REG+DMA_DAR_REG], desp.dest_addr );#ifdef DMADBG0   PRINT( "%s(%d): %s DMA %d (0x%08x) dest := 0x%08x\n", __FILE__, __LINE__,		  ( host == LOCAL ? "local" : "remote" ), channel, dma_reg_tb[host][channel*NUM_DMA_REG+DMA_CDAR_REG], desp.dest_addr );#endif    store_runtime_reg( eumbbar, dma_reg_tb[host][channel*NUM_DMA_REG+DMA_BCR_REG], desp.byte_cnt );#ifdef DMADBG0   PRINT( "%s(%d): %s DMA %d (0x%08x) count := 0x%08x\n", __FILE__, __LINE__,		  ( host == LOCAL ? "local" : "remote" ), channel, dma_reg_tb[host][channel*NUM_DMA_REG+DMA_CDAR_REG], desp.byte_cnt );#endif	return DMASUCCESS;}/************************************************************** * function: DMA_Poke_Curr * * description: poke the current src, dest, byte count registers *              for a given channel. * *              return DMASUCCESS if no error * * note:        Due to the undeterministic parallelism, in chaining *              mode, the value returned by this function shall *              be taken as reference when the query is made rather *              than the absolute snapshot when the value is returned. **************************************************************/staticDMAStatus DMA_Poke_Curr( LOCATION host,					    unsigned int eumbbar,					    unsigned int channel,					    DMA_CURR*    desp ){	if ( channel != 0 && channel != 1 || desp == 0 )	{			return DMAINVALID;	}	desp->src_addr = load_runtime_reg( eumbbar, dma_reg_tb[host][channel*NUM_DMA_REG+DMA_SAR_REG] );#ifdef DMADBG0   PRINT( "%s(%d): %s DMA %d (0x%08x) src : 0x%08x\n", __FILE__, __LINE__,		  ( host == LOCAL ? "local" : "remote" ), channel, dma_reg_tb[host][channel*NUM_DMA_REG+DMA_CDAR_REG], desp->src_addr );#endif	desp->dest_addr = load_runtime_reg( eumbbar, dma_reg_tb[host][channel*NUM_DMA_REG+DMA_DAR_REG] );#ifdef DMADBG0   PRINT( "%s(%d): %s DMA %d (0x%08x) dest : 0x%08x\n", __FILE__, __LINE__,		  ( host == LOCAL ? "local" : "remote" ), channel, dma_reg_tb[host][channel*NUM_DMA_REG+DMA_CDAR_REG], desp->dest_addr );#endif    desp->byte_cnt = load_runtime_reg( eumbbar, dma_reg_tb[host][channel*NUM_DMA_REG+DMA_BCR_REG] );#ifdef DMADBG0   PRINT( "%s(%d): %s DMA %d (0x%08x) count : 0x%08x\n", __FILE__, __LINE__,		  ( host == LOCAL ? "local" : "remote" ), channel, dma_reg_tb[host][channel*NUM_DMA_REG+DMA_CDAR_REG], desp->byte_cnt );#endif	return DMASUCCESS;}/***************************************************************** * function: dma_error_func * * description: display the error information * * note: This seems like a highly convoluted way to handle messages, * but I'll leave it as it was in device.c when I moved it into the * DMA library source. ****************************************************************/staticDMAStatus dma_error_func( unsigned int eumbbar, unsigned int chn, DMAStatus err){	unsigned char *msg[] =		{			"Local Memory Error",			"PCI Error",			"Channel Busy",			"End-of-Segment Interrupt",			"End-of-Chain/Direct Interrupt",		};	   if ( err >= DMALMERROR && err <= DMAEOCAINT )	   {	     PRINT( "DMA Status: channel %d  %s\n", chn, msg[err-DMASUCCESS-1] );	   }	   return err;}/************************************************************* * function: DMA_ISR * * description: DMA interrupt service routine *              return DMAStatus value based on *              the status * *************************************************************/staticDMAStatus DMA_ISR( unsigned int eumbbar,				  unsigned int channel,				  DMAStatus (*lme_func)( unsigned int, unsigned int, DMAStatus ),				  DMAStatus (*pe_func) ( unsigned int, unsigned int, DMAStatus ),				  DMAStatus (*eosi_func)( unsigned int, unsigned int, DMAStatus ),				  DMAStatus (*eocai_func)(unsigned int, unsigned int, DMAStatus )){	DMA_SR stat;	DMAStatus rval = DMANOEVENT;    unsigned int temp;	if ( channel != 0 && channel != 1 )	{		return DMAINVALID;	}	if ( DMA_Get_Stat( LOCAL, eumbbar, channel, &stat ) != DMASUCCESS )	{			return DMAINVALID;	}	if ( stat.lme == 1 )	{		/* local memory error */		rval = DMALMERROR;		if ( lme_func != 0 )		{		  rval = (*lme_func)(eumbbar, channel, DMALMERROR );	    }	}	else if ( stat.pe == 1 )	{	/* PCI error */		rval = DMAPERROR;		if ( pe_func != 0 )		{		  rval = (*pe_func)(eumbbar, channel, DMAPERROR );	    }	}	else if ( stat.eosi == 1 )	{		/* end-of-segment interrupt */		rval = DMAEOSINT;		if ( eosi_func != 0 )		{		  rval = (*eosi_func)(eumbbar, channel, DMAEOSINT );	    }	}	else	{		/* End-of-chain/direct interrupt */		rval = DMAEOCAINT;		if ( eocai_func != 0 )		{		  rval = (*eocai_func)(eumbbar, channel, DMAEOCAINT );	    }	}    temp = ( stat.reserved0 & 0xffffff ) << 8;	temp |= ( ( stat.lme       & 0x1 ) << 7 );  /* write one to clear */	temp |= ( ( stat.reserved1 & 0x3 ) << 5 );    temp |= ( ( stat.pe        & 0x1 ) << 4 );  /* write one to clear */    temp |= ( ( stat.reserved2 & 0x1 ) << 3 );	temp |= ( ( stat.cb        & 0x1 ) << 2 );  /* write one to clear */    temp |= ( ( stat.eosi      & 0x1 ) << 1 );  /* write one to clear */    temp |= ( stat.eocai & 0x1 );               /* write one to clear */    store_runtime_reg( eumbbar, dma_reg_tb[LOCAL][channel*NUM_DMA_REG + DMA_SR_REG], temp );#ifdef DMADBG0	PRINT( "%s(%d): DMA channel %d SR := 0x%08x\n", __FILE__, __LINE__, channel, temp );#endif	return rval;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲va综合人人澡精品| 日韩你懂的在线播放| xf在线a精品一区二区视频网站| 日韩av在线发布| 欧美大片在线观看一区二区| 另类人妖一区二区av| 精品国产一区二区三区不卡 | 国产不卡在线一区| 日本一区二区高清| 色婷婷久久综合| 亚洲一区在线观看免费观看电影高清| 91老师片黄在线观看| 亚洲午夜在线观看视频在线| 欧美一区二区三区免费视频| 国产成a人亚洲精品| 亚洲伦在线观看| 日韩欧美亚洲国产精品字幕久久久| 精品一区二区三区影院在线午夜| 日本一区二区电影| 欧美色国产精品| 国产精品乡下勾搭老头1| 国产精品久久看| 精品视频在线免费| 国产一区二区三区蝌蚪| 亚洲欧美aⅴ...| 日韩午夜中文字幕| 9色porny自拍视频一区二区| 亚洲福利国产精品| 久久久久久久久久久99999| av影院午夜一区| 日本伊人色综合网| 成人欧美一区二区三区在线播放| 91精品久久久久久久久99蜜臂| 国产成人亚洲精品青草天美| 夜夜嗨av一区二区三区| 欧美精品一区二| 欧美日韩国产精选| 国产成人精品影视| 日韩国产欧美在线观看| 国产精品传媒视频| 日韩一区二区三区观看| kk眼镜猥琐国模调教系列一区二区 | 精品va天堂亚洲国产| 色婷婷综合久久久| 国产久卡久卡久卡久卡视频精品| 亚洲影院免费观看| 欧美国产日韩精品免费观看| 日韩美女一区二区三区| 在线亚洲一区二区| 成人黄色国产精品网站大全在线免费观看 | 欧美视频一二三区| 成人晚上爱看视频| 国产做a爰片久久毛片 | 蜜桃久久久久久| 一区二区三区四区国产精品| 国产欧美一区二区精品久导航| 91精品蜜臀在线一区尤物| 欧美午夜不卡视频| 97国产一区二区| 成人中文字幕合集| 国产一区二区在线影院| 蜜乳av一区二区| 青青草原综合久久大伊人精品| 亚洲一区二区精品视频| 亚洲乱码一区二区三区在线观看| 欧美激情一区二区三区四区 | 欧美一区二区三区视频在线观看| 91麻豆免费看| 99久久99久久精品免费看蜜桃 | 欧洲一区在线观看| 91在线视频在线| 福利一区二区在线| 懂色av一区二区夜夜嗨| 国产成人免费视频一区| 国产一区 二区 三区一级| 久久av老司机精品网站导航| 蜜桃一区二区三区在线观看| 日韩av电影免费观看高清完整版| 午夜婷婷国产麻豆精品| 偷拍一区二区三区| 日韩福利视频网| 日一区二区三区| 秋霞国产午夜精品免费视频| 天堂久久一区二区三区| 男女男精品视频| 国产一区二区三区免费播放| 国产资源在线一区| 国产成人在线免费观看| 成人av电影在线观看| 色欧美乱欧美15图片| 91久久精品一区二区二区| 色欧美88888久久久久久影院| 色欧美日韩亚洲| 欧美久久久久久蜜桃| 日韩免费观看高清完整版| 久久久电影一区二区三区| 欧美激情一区不卡| 亚洲精品国产无天堂网2021| 午夜激情一区二区| 国产精一区二区三区| 色综合久久久久综合| 欧美日韩一级二级三级| 日韩精品资源二区在线| 国产精品无遮挡| 一区二区三区中文字幕电影| 日韩电影免费在线观看网站| 国产美女视频一区| 色美美综合视频| 欧美人与性动xxxx| 国产亚洲欧美中文| 亚洲乱码国产乱码精品精可以看| 午夜久久久影院| 国产盗摄一区二区| 色婷婷久久久亚洲一区二区三区| 日韩一区二区在线观看| 国产精品灌醉下药二区| 亚洲二区在线视频| 国产精品系列在线观看| 欧美日韩亚州综合| 日本一区二区三区免费乱视频| 亚洲最大的成人av| 国产精品1024| 欧美日韩日日摸| 国产精品视频免费看| 偷拍一区二区三区| 99热99精品| 精品日产卡一卡二卡麻豆| 综合色天天鬼久久鬼色| 韩国v欧美v亚洲v日本v| 欧美日韩午夜在线视频| 欧美激情一区二区三区| 美女诱惑一区二区| 亚洲女爱视频在线| 国产综合色视频| 欧美日韩在线免费视频| 中文字幕巨乱亚洲| 丝袜美腿一区二区三区| 91亚洲精品一区二区乱码| 精品裸体舞一区二区三区| 亚洲色图都市小说| 国产精品一区二区果冻传媒| 欧美日韩国产片| 一区二区三区蜜桃| www.亚洲精品| 欧美激情一区二区| 久久精品国产亚洲aⅴ| 欧美日韩一区二区在线观看视频 | 国产欧美日韩久久| 久久9热精品视频| 欧美一区日韩一区| 亚洲国产精品尤物yw在线观看| 99re热视频这里只精品| 中文字幕精品—区二区四季| 国产精一区二区三区| 2021久久国产精品不只是精品| 日本一不卡视频| 7777精品久久久大香线蕉| 亚洲国产一区二区三区| 日本高清不卡视频| 亚洲免费视频中文字幕| 成人精品在线视频观看| 欧美激情在线观看视频免费| 国产福利精品导航| 久久九九99视频| 国产精品一区二区三区网站| 精品免费国产一区二区三区四区| 日韩影院精彩在线| 日韩一区二区三| 免费高清在线视频一区·| 555www色欧美视频| 亚洲成人资源网| 欧美日韩电影在线播放| 亚洲国产欧美在线人成| 欧美日韩一区二区三区视频| 亚洲成人动漫在线观看| 91.麻豆视频| 蜜桃视频在线观看一区二区| 欧美成人精品高清在线播放 | 午夜成人免费视频| 欧美一区二区三区免费视频| 精品一区二区三区免费| 久久久噜噜噜久噜久久综合| 成人蜜臀av电影| 一区二区三区日韩欧美精品| 欧美在线观看一区| 青娱乐精品视频| 久久久久国产精品厨房| 99久久99久久精品免费看蜜桃| 亚洲最大色网站| 精品国产a毛片| 顶级嫩模精品视频在线看| 亚洲欧美日韩在线播放| 欧美理论片在线| 久久99精品久久久久| 国产精品区一区二区三区| 色综合色综合色综合| 视频一区视频二区中文字幕| 欧美精品一区二区在线播放| 国产成人精品网址| 樱桃国产成人精品视频|