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

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

?? ad1836.c

?? 所用板ADSP-BF561 EZ-KIT Lite
?? C
字號:
//--------------------------------------------------------------------------//
// Header files																//
//--------------------------------------------------------------------------//
#include <sys\exception.h>
#include <cdefBF561.h>
#include <ccblkfn.h>
#include <sysreg.h>

#include "..\include\TDMchannels.h"
#include "..\include\AD1836defaults.h"
#include "..\include\sport0_isr.h"

//--------------------------------------------------------------------------//
// Symbolic constants used in the initialization routines					//
//--------------------------------------------------------------------------//
// AD1836 reset PF15
#define AD1836_RESET_bit 15

// SPI transfer mode
#define TIMOD_DMA_TX 0x0003

// SPORT0 word length
#define SLEN_32	0x001f

// DMA flow mode
#define FLOW_1	0x1000

//--------------------------------------------------------------------------//
// Variables																//
//																			//
// Description:	The global variables  iADCnC contain the data coming from	//
//				the codec AD1836.  The (processed) playback data are written//
//				into the variables iDACnC, which are then sent back to the	//
//				codec in the SPORT0 ISR.							  		//
//																			//
//				The values in the array sAD1836TxRegs can be modified to 	//
//				set up the codec in different configurations according to   //
//				the AD1836 data sheet.										//
//--------------------------------------------------------------------------//
// global integers (32bit) for access to the ADC/DAC samples by the application code
int iADC1L, iADC1R, iADC2L, iADC2R;
int iDAC1L, iDAC1R, iDAC2L, iDAC2R, iDAC3L, iDAC3R;

// global adress of the SPI transfer array for codec register value transfer
// The values will be set to default values in AD1836default.h so that no
// initialisation with the SET__AD1836_* macros is necessary for a default
// configuration of the codec.

// size of array sAD1836TxRegs
#define AD1836_REGS_LENGTH	11

volatile unsigned short sAD1836TxRegs[AD1836_REGS_LENGTH] =
{									
	(DAC_CONTROL_1_ADR << 0xC ) | DAC_CONTROL_1_FCT,
	(DAC_CONTROL_2_ADR << 0xC ) | DAC_CONTROL_2_FCT,
	(DAC1L_VOLUME_ADR << 0xC ) | DAC1L_VOLUME_FCT,
	(DAC1R_VOLUME_ADR << 0xC ) | DAC1R_VOLUME_FCT,
	(DAC2L_VOLUME_ADR << 0xC ) | DAC2L_VOLUME_FCT,
	(DAC2R_VOLUME_ADR << 0xC ) | DAC2R_VOLUME_FCT,
	(DAC3L_VOLUME_ADR << 0xC ) | DAC3L_VOLUME_FCT,
	(DAC3R_VOLUME_ADR << 0xC ) | DAC3R_VOLUME_FCT,
	(ADC_CONTROL_1_ADR << 0xC ) | ADC_CONTROL_1_FCT,
	(ADC_CONTROL_2_ADR << 0xC ) | ADC_CONTROL_2_FCT,
	(ADC_CONTROL_3_ADR << 0xC ) | ADC_CONTROL_3_FCT					
};

//--------------------------------------------------------------------------//
// Prototypes																//
//--------------------------------------------------------------------------//

void InitAD1836(void);
void Init_Sport0(void);
void Init_DMA(void);
void Init_Sport_Interrupts(void);
void Enable_DMA_Sport0(void);
EX_INTERRUPT_HANDLER(Sport0_RX_ISR);


//--------------------------------------------------------------------------//
// Function:	start_AD1836()												//
//																			//
// Description:	This function serves as interface to the application code,	//
//				it just calls all the individual initialisation functions	//
//--------------------------------------------------------------------------//

void start_AD1836(void) {
	InitAD1836();				// initialize codec
	Init_Sport0();				// initialize serial port 0 for data transfer
	Init_DMA();					// initialize DMA for data transfer
	Init_Sport_Interrupts();	// initialize interrupts from serial port 0
	Enable_DMA_Sport0();		// enable DMA transfer to/from serial port 0
}

//--------------------------------------------------------------------------//
// Function:	InitAD1836()												//
//																			//
// Description:	This function sets up the SPI port to configure the AD1836. //
//				The content of the array sAD1836TxRegs is sent to the 		//
//				codec.														//
//--------------------------------------------------------------------------//

void InitAD1836(void)
{
	int wait_reset;
	int wait_dma_finish;

	// reset codec
		// set PF15 as output
		*pFIO0_DIR |= (1 << AD1836_RESET_bit); 
		ssync();
		// clear bit to enable AD1836
		*pFIO0_FLAG_S |= (1 << AD1836_RESET_bit);	
		ssync();

	// wait to recover from reset
		for (wait_reset=0; wait_reset<0xf000; wait_reset++);

	// configure SPI for transfer of control registers via DMA
		// enable PF4
		*pSPI_FLG = FLS4;
		// set baud rate SCK = HCLK/(2*SPIBAUD)	
		*pSPI_BAUD = 16;
		// SPI DMA write, 16-bit data, MSB first, SPI Master
		*pSPI_CTL = TIMOD_DMA_TX | SIZE | MSTR;
		// Set up DMA2 channel 4 to SPI transmit
		*pDMA2_4_PERIPHERAL_MAP = 0x4000;
		// Configure DMA2 channel4 for 16 bit transfers
		*pDMA2_4_CONFIG = WDSIZE_16;
		// Start address of data buffer
		*pDMA2_4_START_ADDR = (void*) sAD1836TxRegs;
		// DMA inner loop count
		*pDMA2_4_X_COUNT = AD1836_REGS_LENGTH;
		// Inner loop address increment
		*pDMA2_4_X_MODIFY = 2;
	
	// enable DMAs
		*pDMA2_4_CONFIG = (*pDMA2_4_CONFIG | DMAEN);
	// enable spi
		*pSPI_CTL = (*pSPI_CTL | SPE);
		ssync();
	
	// wait until dma transfers for spi are finished 
		for (wait_dma_finish=0; wait_dma_finish<0xaff; wait_dma_finish++);
	
	// disable spi
		*pSPI_CTL = 0x0000;
		
	// transfer of control data via DMA and SPI to codec control registers completed
}

//--------------------------------------------------------------------------//
// Function:	Init_Sport0													//
//																			//
// Description:	Configure Sport0 for TDM mode, to transmit/receive data 	//
//				to/from the AD1836. Configure Sport for external clocks and //
//				frame syncs.												//
//--------------------------------------------------------------------------//

void Init_Sport0(void)
{
	// Sport0 receive configuration
	// External CLK, External Frame sync, MSB first
	// 32-bit data
	*pSPORT0_RCR1 = RFSR;
	*pSPORT0_RCR2 = SLEN_32;
	
	// Sport0 transmit configuration
	// External CLK, External Frame sync, MSB first
	// 24-bit data
	*pSPORT0_TCR1 = TFSR;
	*pSPORT0_TCR2 = SLEN_32;
	
	// Enable MCM 8 transmit & receive channels
	*pSPORT0_MTCS0 = 0x000000FF;
	*pSPORT0_MRCS0 = 0x000000FF;
	
	// Set MCM configuration register and enable MCM mode
	*pSPORT0_MCMC1 = 0x0000;
	*pSPORT0_MCMC2 = 0x101c;
}


//--------------------------------------------------------------------------//
// Function:	Init_DMA													//
//																			//
// Description:	Initialize DMA2_0 in autobuffer mode to receive and DMA2_1 	//
//				in autobuffer mode to transmit								//
//--------------------------------------------------------------------------//

void Init_DMA(void)
{
	// Set up DMA2 channel 0 to Sport receive
	*pDMA2_0_PERIPHERAL_MAP = 0x0000;

	// Configure DMA2 channel0
	// 32-bit transfers, Interrupt on completion, Autobuffer mode
	*pDMA2_0_CONFIG = WNR | WDSIZE_32 | DI_EN | FLOW_1;
	// Start address of data buffer
	*pDMA2_0_START_ADDR = (void*) iDMARxBuffer;
	// DMA inner loop count
	*pDMA2_0_X_COUNT = 8;
	// Inner loop address increment
	*pDMA2_0_X_MODIFY	= 4;
	
	
	// Set up DMA2 channel 1 to Sport transmit
	*pDMA2_1_PERIPHERAL_MAP = 0x1000;
	
	// Configure DMA2 channel 1
	// 32-bit transfers, Autobuffer mode
	*pDMA2_1_CONFIG = WDSIZE_32 | FLOW_1;
	// Start address of data buffer
	*pDMA2_1_START_ADDR = (void*) iDMATxBuffer;
	// DMA inner loop count
	*pDMA2_1_X_COUNT = 8;
	// Inner loop address increment
	*pDMA2_1_X_MODIFY	= 4;
}


//--------------------------------------------------------------------------//
// Function:	Init_Interrupts												//
//																			//
// Description:	Initialize Interrupt for Sport0 RX							//
//--------------------------------------------------------------------------//
void Init_Sport_Interrupts(void)
{
	// assign interrupt channel 23 (DMA2_0) to IVG9 
	*pSICA_IAR2 = Peripheral_IVG(23,9);	
	
	// assign ISRs to interrupt vectors
	// Sport0 RX ISR -> IVG 9
	register_handler(ik_ivg9, Sport0_RX_ISR);		

	// clear pending IVG9 interrupts
	*pILAT |= EVT_IVG9;		
	ssync();
	
	// enable Sport0 RX interrupt
	*pSICA_IMASK0 |= SIC_MASK(23);
	ssync();
	
}


//--------------------------------------------------------------------------//
// Function:	Enable_DMA_Sport 0											//
//																			//
// Description:	Enable DMA2_0, DMA2_1, Sport0 TX and Sport0 RX				//
//--------------------------------------------------------------------------//
void Enable_DMA_Sport0(void)
{
	// enable DMAs
	*pDMA2_1_CONFIG	= (*pDMA2_1_CONFIG | DMAEN);
	*pDMA2_0_CONFIG	= (*pDMA2_0_CONFIG | DMAEN);
	
	// enable Sport0 TX and RX
	*pSPORT0_TCR1 	= (*pSPORT0_TCR1 | TSPEN);
	*pSPORT0_RCR1 	= (*pSPORT0_RCR1 | RSPEN);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久不见久久见中文字幕免费| 成人福利电影精品一区二区在线观看| 日韩精品久久理论片| 国产一区二区精品在线观看| 欧美日韩中文字幕一区二区| 国产欧美精品一区二区色综合朱莉| 一区二区三区美女视频| 国产成人精品影视| 日韩欧美一区在线| 亚洲乱码国产乱码精品精可以看| 国产一本一道久久香蕉| 在线播放欧美女士性生活| 亚洲欧美二区三区| 成人一区二区三区| 久久久久久久综合日本| 日本伊人色综合网| 欧美日韩国产小视频在线观看| 国产精品久久午夜| 国产高清不卡一区| 久久婷婷国产综合国色天香| 麻豆精品视频在线观看视频| 欧美日韩视频第一区| 亚洲精品久久久蜜桃| 99亚偷拍自图区亚洲| 国产三级精品视频| 国产精品99久久久久久久女警| 日韩欧美亚洲国产精品字幕久久久| 亚洲成a人片在线观看中文| 91丨porny丨户外露出| 国产精品久久综合| 成人app网站| 亚洲欧美色一区| 色婷婷久久久综合中文字幕| 成人欧美一区二区三区黑人麻豆| 成人精品国产福利| 亚洲欧洲色图综合| 91色porny在线视频| 尤物视频一区二区| 欧美三级午夜理伦三级中视频| 亚洲欧美国产毛片在线| 在线中文字幕一区| 午夜av区久久| 精品国产3级a| 成人午夜碰碰视频| 亚洲麻豆国产自偷在线| 欧美日韩一区中文字幕| 免费久久99精品国产| 久久久久久久网| 一本高清dvd不卡在线观看| 一区二区在线看| 91精品国产麻豆国产自产在线| 麻豆精品视频在线观看免费| 国产情人综合久久777777| 成人免费看片app下载| 亚洲免费色视频| 日韩一区和二区| 成人综合婷婷国产精品久久免费| 中文字幕一区二区三区精华液 | 色综合久久88色综合天天免费| 亚洲三级电影网站| 欧美蜜桃一区二区三区 | 日本女优在线视频一区二区| 91精品国产全国免费观看| 麻豆国产欧美一区二区三区| 久久综合色之久久综合| 91亚洲国产成人精品一区二区三| 午夜精品久久久久久久99樱桃| 欧美v日韩v国产v| 91免费视频观看| 蜜桃av一区二区三区电影| 中文字幕二三区不卡| 欧美日韩中文字幕一区| 国产精品自在欧美一区| 亚洲韩国一区二区三区| 久久视频一区二区| 欧美视频一区在线| 国产精品小仙女| 日日摸夜夜添夜夜添亚洲女人| 国产亚洲一区二区三区四区| 精品视频999| www.99精品| 精品一区二区三区免费观看| 亚洲一二三四在线| 国产欧美一区二区精品忘忧草| 欧美亚洲动漫精品| 国产jizzjizz一区二区| 日韩不卡一二三区| 18涩涩午夜精品.www| 精品999在线播放| 69久久99精品久久久久婷婷| 91色乱码一区二区三区| 国产大陆a不卡| 蓝色福利精品导航| 五月天丁香久久| 亚洲永久精品国产| 国产精品毛片a∨一区二区三区| 日韩美女一区二区三区| 欧美三级电影一区| 色哟哟亚洲精品| 99热99精品| 成人免费高清在线| 国产精品一区二区黑丝| 久久精品av麻豆的观看方式| 日日夜夜免费精品视频| 亚洲综合色婷婷| 一区二区三区中文在线观看| 国产精品不卡在线观看| 一区二区三区91| 日韩一区欧美小说| 中文字幕中文在线不卡住| 日本一区二区三区免费乱视频| 精品福利视频一区二区三区| 日韩精品一区二区三区四区视频| 欧美挠脚心视频网站| 欧美理论片在线| 91精品国产91久久久久久一区二区 | 一区二区免费在线| 亚洲综合图片区| 天天综合色天天| 日本不卡视频一二三区| 免费日韩伦理电影| 久久99久久99精品免视看婷婷| 裸体在线国模精品偷拍| 蜜臀av性久久久久蜜臀aⅴ四虎| 日韩精品免费专区| 看电影不卡的网站| 国产成人精品aa毛片| 成人性视频网站| 色综合欧美在线| 欧美日韩日日骚| 欧美一级欧美三级| 精品国产乱码久久久久久牛牛 | 国产蜜臀av在线一区二区三区| 欧美韩国日本一区| 久久精品国产久精国产爱| 精品中文字幕一区二区小辣椒| 精品伊人久久久久7777人| 国产精品亚洲成人| 色综合久久88色综合天天6| 欧美日韩中字一区| 精品久久久影院| 国产精品天干天干在观线| 一区二区三区在线视频播放| 日韩国产成人精品| 国产一区二区三区| 99久久精品国产毛片| 欧美色图在线观看| 久久久久国产精品麻豆ai换脸| 中文字幕在线观看一区二区| 亚洲成人精品影院| 国产精品乡下勾搭老头1| 色婷婷国产精品| 精品成人免费观看| 亚洲精品国产一区二区精华液| 免费在线观看成人| gogo大胆日本视频一区| 欧美精品v国产精品v日韩精品| 国产亚洲欧美色| 日韩国产一二三区| 成人免费毛片aaaaa**| 欧美高清视频在线高清观看mv色露露十八 | 91久久久免费一区二区| 精品卡一卡二卡三卡四在线| 亚洲男人的天堂在线观看| 美女视频黄a大片欧美| 99九九99九九九视频精品| 欧美va亚洲va| 午夜精品国产更新| 99麻豆久久久国产精品免费优播| 欧美一区二区精美| 一区二区三区电影在线播| 国产一区二区三区电影在线观看| 欧美日韩在线观看一区二区 | 亚洲三级理论片| 国产成人精品三级麻豆| 91麻豆精品国产91久久久久久久久 | 91精品国产高清一区二区三区蜜臀| 中文字幕亚洲不卡| 国产成人日日夜夜| 精品国产伦一区二区三区观看体验 | 国产精品热久久久久夜色精品三区| 日本不卡中文字幕| 欧美日韩在线精品一区二区三区激情| 国产精品久久网站| 国产成人精品aa毛片| 精品免费国产一区二区三区四区| 午夜亚洲国产au精品一区二区| 91女厕偷拍女厕偷拍高清| 国产欧美精品一区二区色综合 | 日韩成人精品在线| 欧日韩精品视频| 亚洲男女毛片无遮挡| 粉嫩蜜臀av国产精品网站| 日韩欧美在线观看一区二区三区| 一二三区精品视频| 欧美在线免费观看亚洲| 亚洲乱码国产乱码精品精可以看 | 国产精品一区二区久久不卡| 精品国产乱码久久久久久免费| 麻豆91免费观看|