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

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

?? dma1.c

?? AT9260的BOOTLOADER,還有幾個版本的,需要的我再放
?? 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一区二区三区免费野_久草精品视频
99久久精品国产导航| 国产激情视频一区二区三区欧美| 日韩一区二区高清| 日本国产一区二区| 91黄色在线观看| 欧日韩精品视频| 欧美伦理影视网| 欧美日韩一区二区三区视频| 欧美日韩在线观看一区二区 | 亚洲欧美电影院| 2017欧美狠狠色| 欧美v日韩v国产v| 欧美成人福利视频| 日韩视频国产视频| 久久久精品免费观看| 中文字幕av资源一区| 国产精品理论片在线观看| 中文字幕在线一区二区三区| 亚洲欧洲中文日韩久久av乱码| 中文字幕日韩一区二区| 亚洲特级片在线| 亚洲国产精品久久不卡毛片 | 欧美一级欧美三级| 久久蜜桃av一区二区天堂| 欧美极品少妇xxxxⅹ高跟鞋 | 亚洲综合激情网| 一级做a爱片久久| 亚洲第一激情av| 久久精品国产99国产精品| 另类的小说在线视频另类成人小视频在线| 日本不卡在线视频| 床上的激情91.| 欧美日韩高清一区二区三区| 日韩欧美亚洲另类制服综合在线| 久久日韩精品一区二区五区| 亚洲欧美一区二区视频| 日韩黄色小视频| 国产成人在线网站| 欧美视频一区二区三区四区| 日韩免费观看高清完整版在线观看| 国产网站一区二区| 亚洲一区二区三区小说| 精品亚洲porn| 在线亚洲一区观看| 国产欧美精品国产国产专区| 亚洲va韩国va欧美va精品| 国模冰冰炮一区二区| 一本大道久久精品懂色aⅴ| 日韩你懂的在线播放| 亚洲欧美另类久久久精品| 精品一区在线看| 欧美日韩另类一区| 国产精品电影一区二区三区| 蜜臀a∨国产成人精品| 99久精品国产| 久久久久久久久久久久久女国产乱| 亚洲高清视频中文字幕| 成人午夜av在线| 欧美一区二区福利视频| 亚洲尤物视频在线| 成人在线视频一区| 久久久99免费| 美女精品一区二区| 欧美精品自拍偷拍| 亚洲综合视频网| 色呦呦国产精品| 成人欧美一区二区三区小说 | 日韩综合在线视频| 日本久久精品电影| 亚洲免费看黄网站| av资源网一区| 国产精品嫩草久久久久| 国产精品66部| 国产日韩欧美综合在线| 精品一区二区免费看| 日韩一区二区三区电影| 日韩avvvv在线播放| 3atv一区二区三区| 日韩精品电影一区亚洲| 在线播放91灌醉迷j高跟美女| 一区二区三区国产| 91成人在线免费观看| 一区二区三区日本| 欧美三级资源在线| 日韩福利视频网| 欧美一二区视频| 国内国产精品久久| 日本一区二区在线不卡| 成人免费高清在线| 亚洲视频一区在线| 欧美性xxxxx极品少妇| 亚洲成人久久影院| 日韩视频在线观看一区二区| 美女一区二区三区在线观看| 久久人人97超碰com| 成人高清在线视频| 亚洲综合网站在线观看| 欧美一区二区三区色| 九色综合狠狠综合久久| 日本一区二区视频在线| 色天使久久综合网天天| 日韩电影免费在线观看网站| 精品久久久久香蕉网| 福利电影一区二区三区| 亚洲男人的天堂在线观看| 欧美另类高清zo欧美| 九九九久久久精品| 一区在线观看视频| 日韩一区二区在线播放| 成人av午夜影院| 亚洲h在线观看| 久久久99久久精品欧美| 在线观看欧美黄色| 经典一区二区三区| 亚洲精品v日韩精品| 欧美一区二区精品| 本田岬高潮一区二区三区| 亚洲亚洲精品在线观看| 精品国产乱码久久久久久蜜臀| 北条麻妃国产九九精品视频| 日韩制服丝袜先锋影音| 国产精品亲子伦对白| 欧美日韩www| 色哟哟在线观看一区二区三区| 久久国产人妖系列| 亚洲最色的网站| 中文字幕va一区二区三区| 91精品国产综合久久久久久久 | 26uuu色噜噜精品一区二区| 色综合久久天天| 国产很黄免费观看久久| 视频精品一区二区| 亚洲女同ⅹxx女同tv| 国产日产欧美一区二区视频| 欧美日本国产视频| 91色九色蝌蚪| av激情亚洲男人天堂| 国产一区二区免费视频| 日韩精品免费专区| 亚洲影视资源网| 亚洲欧美视频一区| 国产精品女主播在线观看| 久久精品一区蜜桃臀影院| 欧美大白屁股肥臀xxxxxx| 欧美日韩一区小说| 在线观看国产91| 色婷婷av一区二区三区软件 | 不卡视频免费播放| 国产精品自拍在线| 国内精品写真在线观看| 青青草成人在线观看| 午夜一区二区三区在线观看| 亚洲欧洲综合另类在线 | 欧美日韩国产首页| 欧洲视频一区二区| 在线观看国产一区二区| 91官网在线观看| 色综合久久久久久久久| 91网上在线视频| 91免费在线看| 欧美色综合久久| 91精品国产品国语在线不卡| 555www色欧美视频| 欧美一级免费大片| 精品久久久久久无| 久久久久久久久久久99999| 国产午夜精品一区二区三区四区| 久久久久久亚洲综合影院红桃 | 2024国产精品| 欧美精品高清视频| 91精品国产欧美一区二区18| 久久夜色精品国产欧美乱极品| 国产日韩欧美电影| 伊人一区二区三区| 蜜臀精品一区二区三区在线观看 | 久久伊99综合婷婷久久伊| 国产欧美日韩另类视频免费观看| 国产精品午夜电影| 性做久久久久久久久| 美女精品一区二区| 91在线丨porny丨国产| 欧美人牲a欧美精品| 久久伊人中文字幕| 亚洲自拍偷拍综合| 国产专区欧美精品| 欧美午夜一区二区三区| www国产成人| 亚洲午夜激情网页| 精品一区二区av| 成人福利电影精品一区二区在线观看| 国产麻豆一精品一av一免费| 美女视频网站久久| 欧美性一二三区| 欧美在线观看一二区| 欧洲国产伦久久久久久久| 欧美色窝79yyyycom| 国产精品麻豆久久久| 最新成人av在线| 亚洲主播在线播放| 亚洲精品第1页|