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

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

?? seeddm642aic23b.c

?? DM642關(guān)于音頻方面的代碼
?? C
字號:
/********************************************************************/
/*  Copyright 2004 by SEED Incorporated.							*/
/*  All rights reserved. Property of SEED Incorporated.				*/
/*  Restricted rights to use, duplicate or disclose this code are	*/
/*  granted through contract.									    */
/*  															    */
/********************************************************************/
#include <csl_i2c.h>
#include <csl_gpio.h>
#include <std.h>
#include <seeddm642_aic23.h>

/* Compatability definitions */
#define NULL                 0

static I2C_Config aic23XmtCfg = {
    0x0000007f, /* I2COAR -    Not used if master */
    0x00000000, /* I2CIER -    Disable interrupts, use polling */
    0x0000001b, /* I2CCLKL -   Low period for 100KHz operation */
    0x0000001b, /* I2CCLKH -   High period for 100KHz operation */
    0x00000002, /* I2CCNT -    Data words per transmission */
    0x0000001a, /* I2CSAR -    Slave address */
    0x00004ea0, /* I2CMDR -    Mode */
    0x00000019  /* I2CPSC -    Prescale 300MHz to 12MHz */
};

/* Table of supported frequencies,CLKIN,SR3..SR0,BOSR */
Uint16 freqtable[] = 
{
    SEEDDM642_AIC23_FREQ_8KHZ,  0x0e,  // 8000 Hz
    SEEDDM642_AIC23_FREQ_16KHZ, 0x5a,  // 16000 Hz
    SEEDDM642_AIC23_FREQ_24KHZ, 0x22,  // 24000 Hz
    SEEDDM642_AIC23_FREQ_32KHZ, 0x1a,  // 32000 Hz
    SEEDDM642_AIC23_FREQ_48KHZ, 0x02,  // 48000 Hz
    SEEDDM642_AIC23_FREQ_96KHZ, 0x1e,  // 96000 Hz
    0, 0                             // End of table
};


extern SEEDDM642_AIC23_Config codecstate;
/* Spin in a delay loop for delay iterations */
void SEEDDM642_wait(Uint32 delay)
{
    volatile Uint32 i, n;
    
    n = 0;
    for (i = 0; i < delay; i++)
    {
        n = n + 1;
    }
}
/* Spin in a delay loop for delay microseconds */
void SEEDDM642_waitusec(Uint32 delay)
{
    SEEDDM642_wait(delay * 21);
}
/***************************************************************************************/
/*  ======== SEEDDM642_AIC23_rset ========											   */
/*  Set codec register regnum to value regval										   */
/***************************************************************************************/
void SEEDDM642_AIC23_rset(I2C_Handle hI2c, 
						  Uint16 I2Caddress,
						  Uint16 regnum, 
						  Uint16 regval)
{
    Uint16 data;
    I2C_Config prevI2CCfg;
    
    /* Mask off lower 9 bits */
    regval &= 0x1ff;
    
    /* Set transmit data */
    data = (regnum << 9) | regval;
    
    /* Wait until bus is free */
    while (I2C_bb(hI2c));
    
    /* Save old settings */
    I2C_getConfig(hI2c, &prevI2CCfg);
    
    /*設(shè)置要訪問的AIC23b的IIc的地址*/
    aic23XmtCfg.i2csar = I2Caddress;
    /* Restore settings for AIC23 */
    I2C_config(hI2c, &aic23XmtCfg);

    /* Submit the MSB for transmit */
    I2C_RSETH(hI2c, I2CDXR, (data >> 8) & 0xff);
    
    /* Generate start condition, starts transmission */
    I2C_start(hI2c);
    
    /* Wait until MSB transmit is done */
    while(!I2C_xrdy(hI2c));

    /* Submit the LSB for transmit */ 
    I2C_writeByte(hI2c, data & 0xff);
        
    /* Generate stop condition */
    I2C_sendStop(hI2c);  

    /* Wait until bus is free */
    while (I2C_bb(hI2c));
    
    /* Save register value if regnum is in range */
    if (regnum < SEEDDM642_AIC23_NUMREGS)
        codecstate.regs[regnum] = regval;

    /* Short delay for AIC23 to accept command */        
    SEEDDM642_waitusec(20);

    /* Reconfigure I2C with old settings */
    I2C_config(hI2c, &prevI2CCfg);
}
/**********************************************************************/
/*  ======== EVMDM642_AIC23_config ========				 			  */
/*  Set the default codec register config values					  */
/**********************************************************************/
SEEDDM642_AIC23_Handle EVMDM642_AIC23_open(  I2C_Handle hI2c,
						   					 Uint16 aic23num,	 
						   					 SEEDDM642_AIC23_Config *Config)
{
    int i;
    Uint8 I2Caddress;
    /*配置IIC總線*/
    GPIO_RSET(GPGC,0x0);/*將GPIO0不做為GPINT使用*/
	GPIO_RSET(GPDIR,0x1);/*將GPIO0做為輸出*/

    switch(aic23num)
    {
    	case 0:
    		I2Caddress = 0x1a;
    		GPIO_RSET(GPVAL,0x0);/*GPIO0輸出為低,選擇IIC0總線*/
    		break;
    	case 1:
    		I2Caddress = 0x1b;
    		GPIO_RSET(GPVAL,0x0);/*GPIO0輸出為低,選擇IIC0總線*/
    		break;
    	case 2:
    		I2Caddress = 0x1a;
    		GPIO_RSET(GPVAL,0x1);/*GPIO0輸出為低,選擇IIC1總線*/
    		break;
    	case 3:
    		I2Caddress = 0x1b;
    		GPIO_RSET(GPVAL,0x1);/*GPIO0輸出為低,選擇IIC1總線*/
    		break;
    	default:
    		I2Caddress = 0x0;
    		break;
    }
    if(I2Caddress == 0x0)
    {
    	return ((SEEDDM642_AIC23_Handle)aic23num);	
    }
    /*延時等待開關(guān)動作完成*/
    SEEDDM642_wait(2);
    /* Use default parameters if none are given */
    if (Config == NULL)
    {
    	Config = &codecstate;
    }
    /* Reset the codec ,對AIC23進(jìn)行復(fù)位*/
    SEEDDM642_AIC23_rset(hI2c,I2Caddress,15, 0);
    
    /* Assign each register */
    for (i = 0; i < SEEDDM642_AIC23_NUMREGS; i++)
    {
        /*Power寄存器最后設(shè)置*/
        if (i != 6)
        {
            SEEDDM642_AIC23_rset(hI2c, I2Caddress ,i, Config -> regs[i]);
        }
    }
    SEEDDM642_AIC23_rset(hI2c, I2Caddress ,6, Config -> regs[6]);
    return ((SEEDDM642_AIC23_Handle)aic23num);
}
/*********************************************************************************/
/*  ======== EVMDM642_AIC23_powerDown ========									 */
/*  Enable/disable powerdown modes for the DAC and ADC codec subsections		 */
/*********************************************************************************/
Bool SEEDDM642_AIC23_powerDown(SEEDDM642_AIC23_Handle hAic23, 
							  I2C_Handle hI2c,
							  Uint16 sect)
{
     Uint8 I2Caddress;
     switch((int)hAic23)
    {
    	case 0:
    		I2Caddress = 0x1a;
    		GPIO_RSET(GPVAL,0x0);/*GPIO0輸出為低,選擇IIC0總線*/
    		break;
    	case 1:
    		I2Caddress = 0x1b;
    		GPIO_RSET(GPVAL,0x0);/*GPIO0輸出為低,選擇IIC0總線*/
    		break;
    	case 2:
    		I2Caddress = 0x1a;
    		GPIO_RSET(GPVAL,0x1);/*GPIO0輸出為低,選擇IIC1總線*/
    		break;
    	case 3:
    		I2Caddress = 0x1b;
    		GPIO_RSET(GPVAL,0x1);/*GPIO0輸出為低,選擇IIC1總線*/
    		break;
    	default:
    		I2Caddress = 0x0;
    		break;
    }
    if(I2Caddress == 0x0)
    {
    	return FALSE;	
    }
    /*延時等待開關(guān)動作完成*/
    SEEDDM642_wait(2);
    /* Write to codec register */
    SEEDDM642_AIC23_rset(hI2c, I2Caddress,SEEDDM642_AIC23_POWERDOWN,(sect & 0xff));
	return TRUE;
}
/*
 *  ======== EVMDM642_AIC23_outGain ========
 *  Set the output gain on the codec
 */
Bool SEEDDM642_AIC23_outGain(SEEDDM642_AIC23_Handle hAic23, 
							I2C_Handle hI2c,
							Uint16 outGain)
{
    Uint8 I2Caddress;
     switch((int)hAic23)
    {
    	case 0:
    		I2Caddress = 0x1a;
    		GPIO_RSET(GPVAL,0x0);/*GPIO0輸出為低,選擇IIC0總線*/
    		break;
    	case 1:
    		I2Caddress = 0x1b;
    		GPIO_RSET(GPVAL,0x0);/*GPIO0輸出為低,選擇IIC0總線*/
    		break;
    	case 2:
    		I2Caddress = 0x1a;
    		GPIO_RSET(GPVAL,0x1);/*GPIO0輸出為低,選擇IIC1總線*/
    		break;
    	case 3:
    		I2Caddress = 0x1b;
    		GPIO_RSET(GPVAL,0x1);/*GPIO0輸出為低,選擇IIC1總線*/
    		break;
    	default:
    		I2Caddress = 0x0;
    		break;
    }
    if(I2Caddress == 0x0)
    {
    	return FALSE;	
    }
    /*延時等待開關(guān)動作完成*/
    SEEDDM642_wait(2);
    /* Write to codec registers (left and right) */
    SEEDDM642_AIC23_rset(hI2c, I2Caddress,SEEDDM642_AIC23_LEFTHPVOL,(outGain & 0x7f));
    SEEDDM642_AIC23_rset(hI2c, I2Caddress,SEEDDM642_AIC23_RIGHTHPVOL, (outGain & 0x7f));
	return TRUE;
}
/*
 *  ======== EVMDM642_AIC23_mute ========
 *  Enable/disable codec mute mode
 */
Bool SEEDDM642_AIC23_mute(SEEDDM642_AIC23_Handle hAic23, 
						 I2C_Handle hI2c, 
						 Int16 mode)
{
    int regval;
    Uint8 I2Caddress;
    switch((int)hAic23)
    {
    	case 0:
    		I2Caddress = 0x1a;
    		GPIO_RSET(GPVAL,0x0);/*GPIO0輸出為低,選擇IIC0總線*/
    		break;
    	case 1:
    		I2Caddress = 0x1b;
    		GPIO_RSET(GPVAL,0x0);/*GPIO0輸出為低,選擇IIC0總線*/
    		break;
    	case 2:
    		I2Caddress = 0x1a;
    		GPIO_RSET(GPVAL,0x1);/*GPIO0輸出為低,選擇IIC1總線*/
    		break;
    	case 3:
    		I2Caddress = 0x1b;
    		GPIO_RSET(GPVAL,0x1);/*GPIO0輸出為低,選擇IIC1總線*/
    		break;
    	default:
    		I2Caddress = 0x0;
    		break;
    }
    if(I2Caddress == 0x0)
    {
    	return FALSE;	
    }
    /*延時等待開關(guān)動作完成*/
    SEEDDM642_wait(2);
    
    /* Enable mute if mode is true */
    regval = (mode) ? 0x08 : 0x00;
    
    /* Write to codec registers (left and right) */
    SEEDDM642_AIC23_rset(hI2c,I2Caddress, SEEDDM642_AIC23_DIGPATH,regval);
	return TRUE;
}
/*
 *  ======== EVMDM642_AIC23_setFreq ========
 *  Set the codec sample rate frequency
 */
Bool SEEDDM642_AIC23_setFreq(SEEDDM642_AIC23_Handle hAic23, 
							I2C_Handle hI2c, 
							Uint32 freq)
{
    Uint16 regval, curr;
    Uint8 I2Caddress;
    switch((int)hAic23)
    {
    	case 0:
    		I2Caddress = 0x1a;
    		GPIO_RSET(GPVAL,0x0);/*GPIO0輸出為低,選擇IIC0總線*/
    		break;
    	case 1:
    		I2Caddress = 0x1b;
    		GPIO_RSET(GPVAL,0x0);/*GPIO0輸出為低,選擇IIC0總線*/
    		break;
    	case 2:
    		I2Caddress = 0x1a;
    		GPIO_RSET(GPVAL,0x1);/*GPIO0輸出為低,選擇IIC1總線*/
    		break;
    	case 3:
    		I2Caddress = 0x1b;
    		GPIO_RSET(GPVAL,0x1);/*GPIO0輸出為低,選擇IIC1總線*/
    		break;
    	default:
    		I2Caddress = 0x0;
    		break;
    }
    if(I2Caddress == 0x0)
    {
    	return FALSE;	
    }
    /*延時等待開關(guān)動作完成*/
    SEEDDM642_wait(2);
    
    /* Calculate codec clock control setting, assume Nomal Mode (18.432MHz) */
    /* regval will contain CLKIN,SR3..SR0,BOSR */
    curr = 0;
    while(1)
    {
        /* Do nothing if frequency doesn't match */
        if (freqtable[curr] == 0)
            return;

        /* Check for match */            
        if (freqtable[curr] == freq)
        {
            regval = freqtable[curr + 1];
            break;
        }
            
        /* Set up for next pair */
        curr += 2;
    }
    /* Write to codec register */
    SEEDDM642_AIC23_rset(hI2c, I2Caddress,SEEDDM642_AIC23_SAMPLERATE,(regval & 0x7f));
    return TRUE;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人精品国产免费网站| 美女视频一区在线观看| eeuss鲁片一区二区三区 | 国产精品免费aⅴ片在线观看| 精品综合久久久久久8888| 日韩三级免费观看| 久久激情五月激情| 久久蜜桃一区二区| 成人av小说网| 亚洲综合免费观看高清完整版在线| 欧美日韩午夜精品| 日本午夜精品一区二区三区电影| 欧美一区二区三区成人| 精久久久久久久久久久| 国产三级欧美三级日产三级99| 懂色av一区二区三区免费观看| 国产精品久久毛片av大全日韩| 欧美自拍偷拍一区| 美女免费视频一区二区| 国产精品美女一区二区三区| 欧美在线观看禁18| 久久精品噜噜噜成人av农村| 国产精品久久久久久久裸模| 在线精品视频小说1| 久久国产视频网| 国产精品进线69影院| 欧美日韩视频专区在线播放| 国产传媒日韩欧美成人| 亚洲精品成人a在线观看| 欧美va亚洲va| 91精品福利在线| 国产精品99久久久久久久vr| 亚洲一区二区在线观看视频 | 毛片av一区二区| 亚洲欧洲无码一区二区三区| 69久久夜色精品国产69蝌蚪网| 国产精品一区免费在线观看| 亚洲在线免费播放| 精品国产一区二区精华| 色噜噜偷拍精品综合在线| 精品在线免费视频| 亚洲图片一区二区| 国产精品久久久久久福利一牛影视 | 久草精品在线观看| 亚洲免费观看高清完整版在线观看| 日韩欧美国产一二三区| 在线观看一区不卡| 成人性色生活片| 美女在线视频一区| 亚洲第一成人在线| 亚洲日韩欧美一区二区在线| 精品国产免费久久| 欧美日韩国产影片| 91污片在线观看| 懂色av中文一区二区三区| 美女尤物国产一区| 日韩一区精品字幕| 一区二区三区精品久久久| 中文字幕欧美国产| 久久久久国产免费免费| 精品三级av在线| 欧美一区二区福利视频| 欧美午夜在线一二页| 99久久久久久| 波波电影院一区二区三区| 国产一区二区看久久| 麻豆国产精品视频| 蜜臀精品久久久久久蜜臀| 天堂影院一区二区| 亚洲6080在线| 亚洲成av人片| 婷婷丁香激情综合| 亚洲成人精品影院| 亚洲aaa精品| 五月天网站亚洲| 亚洲成人自拍偷拍| 视频在线观看国产精品| 午夜久久久久久久久| 亚洲国产aⅴ成人精品无吗| 亚洲一级在线观看| 香蕉加勒比综合久久| 亚洲v中文字幕| 日本中文一区二区三区| 免播放器亚洲一区| 国内成人自拍视频| 国产成人在线观看免费网站| 国产成人免费在线| 99视频精品免费视频| 91香蕉国产在线观看软件| 91麻豆免费看| 欧美日韩中文字幕精品| 欧美一区二区私人影院日本| 欧美xxxx在线观看| 久久精品夜色噜噜亚洲aⅴ| 国产精品情趣视频| 亚洲影院免费观看| 日韩精品91亚洲二区在线观看 | 欧美婷婷六月丁香综合色| 欧美视频在线播放| 日韩欧美激情四射| 国产午夜精品一区二区三区视频 | 在线观看亚洲专区| 91精品国产高清一区二区三区 | 欧美一卡2卡三卡4卡5免费| 日韩一区二区在线看片| 2020国产精品久久精品美国| 中文字幕中文字幕在线一区| 亚洲综合激情另类小说区| 日日夜夜一区二区| 国产成人精品免费在线| 欧美在线综合视频| 欧美成va人片在线观看| 国产欧美精品国产国产专区 | 国产精品午夜电影| 亚洲综合色网站| 激情综合网激情| 色吧成人激情小说| 日韩精品专区在线| 亚洲婷婷综合久久一本伊一区| 日韩影院精彩在线| av电影天堂一区二区在线| 欧美日韩国产大片| 国产欧美一区二区三区沐欲 | 视频一区国产视频| 成人午夜免费视频| 欧美一级二级三级蜜桃| 国产精品免费视频观看| 蜜桃久久av一区| 一本久久精品一区二区| 欧美mv日韩mv| 午夜久久福利影院| 99久久综合99久久综合网站| 日韩欧美一级在线播放| 亚洲精品精品亚洲| 国产盗摄精品一区二区三区在线 | 亚洲欧美激情插| 九色综合狠狠综合久久| 在线视频一区二区三| 欧美激情一区二区三区不卡 | 懂色中文一区二区在线播放| 7777精品伊人久久久大香线蕉的| 中文字幕色av一区二区三区| 韩日av一区二区| 91精品国产综合久久久久| 《视频一区视频二区| 国产91露脸合集magnet| 日韩一级二级三级| 亚洲地区一二三色| 在线观看日韩电影| 亚洲图片另类小说| 风间由美一区二区av101 | 波多野结衣的一区二区三区| 26uuu精品一区二区在线观看| 天天色综合天天| 欧美色精品天天在线观看视频| 中文字幕亚洲一区二区av在线| 国产成人精品免费在线| 久久青草欧美一区二区三区| 久久成人麻豆午夜电影| 91精品福利在线一区二区三区| 亚洲国产精品嫩草影院| 在线亚洲人成电影网站色www| 亚洲欧美日本韩国| 色婷婷久久久综合中文字幕| 日韩理论电影院| 91国模大尺度私拍在线视频| 一区二区三区在线免费视频| 欧美性色综合网| 亚洲一区二区在线视频| 欧美日韩国产小视频| 亚洲成va人在线观看| 在线综合视频播放| 日韩在线一区二区| 欧美一区二区精美| 国内成人免费视频| 国产婷婷色一区二区三区四区| 国产成人a级片| 国产精品色在线观看| 99久久国产综合精品女不卡| 亚洲欧美另类小说视频| 欧美少妇bbb| 蜜臀久久99精品久久久画质超高清| 欧美大片国产精品| 国产高清不卡二三区| 国产精品国产三级国产普通话三级 | 国产精品人妖ts系列视频| 成人免费看黄yyy456| 亚洲男人天堂av| 欧美日韩国产美| 韩国视频一区二区| 国产精品不卡一区二区三区| 欧美三级电影一区| 另类综合日韩欧美亚洲| 国产农村妇女精品| 欧美视频中文字幕| 国产一区二区三区免费播放| 国产精品嫩草99a| 欧美三区在线观看| 国产在线精品一区二区| 亚洲天堂2016|