⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 auddac.c

📁 Sunplus 8202S source code.
💻 C
字号:
//
// FILE
// auddac.c
//
// DESCRIPTION
// generic auddac control
//
#include "user_init.h"

#if defined(PCM1742)

#include "config.h"
#include "regmap.h"
#include "global.h"
#include "func.h"
#include "gpio.h"
#include "audclk.h"
#include "auddrv.h" //2004AUDDRV oliver 20041004 for using audio driver purpose
//#include "audif.h"
#include "gpio.h"


#ifdef PCM1742
#include "pcm1742.h"
#endif

//
// DVD board version related gpio change
//
#define   GPN_MCDL_MC    3
#define   GPN_MCDL_MD    4
#define   GPN_MCDL_ML_1  2
//
/*
#define GPN_MCDL_MC     3
#define GPN_MCDL_MD     4
#define GPN_MCDL_ML_1   2
*/

/*
#define GPN_MCDL_MC     3
#define GPN_MCDL_MD     2
#define GPN_MCDL_ML_1   4
*/


#define MCDL_MC_SET(d)  GPIO_O_SET(GPN_MCDL_MC,d)
#define MCDL_MD_SET(d)  GPIO_O_SET(GPN_MCDL_MD,d)
#define MCDL_ML1_SET(d) GPIO_O_SET(GPN_MCDL_ML_1,d)

#define MCDL_MC_OUT()   GPIO_E_SET(GPN_MCDL_MC,1)
#define MCDL_MD_OUT()   GPIO_E_SET(GPN_MCDL_MD,1)
#define MCDL_ML1_OUT()  GPIO_E_SET(GPN_MCDL_ML_1,1)


#define delay_mcdl(i)   delay_1us(i)

void    write_mcdl(unsigned data)
{
    int i;

    MCDL_MC_SET(1);
    MCDL_MD_SET(1);
    MCDL_ML1_SET(0);
  
    MCDL_MC_OUT();
    MCDL_MD_OUT();
    MCDL_ML1_OUT();

    for (i=15;i>=0;i--)
    {
        MCDL_MC_SET(0);             delay_mcdl(2);
        MCDL_MD_SET((data>>i)&1);   delay_mcdl(2);
        MCDL_MC_SET(1);             delay_mcdl(2);
    }
    MCDL_ML1_SET(1);

    for (i=1;i>=0;i--)
    {
        MCDL_MC_SET(0);     delay_mcdl(2);
        MCDL_MC_SET(1);     delay_mcdl(2);
    }
}


// 
// FUNTCION
// dac_set_vol()
//
// vol=0: mute
// vol=255: 0-dB attenuation
//
void
dac_set_vol(unsigned vol)
{
    unsigned v;

#if defined(PCM1742)
    v = vol;
    write_mcdl(v | (0x10<<8));        // load and set L volume
    write_mcdl(v | (0x11<<8));        // load and set R volume
#endif
}


//
// FUNCTION
// dac_turn_on()
// DESCRIPTION
// turn on dac
//
void    dac_turn_on()
{
#ifdef PCM1742
    int i;
    for (i=0; i<2; i++) {
        delay_1ms(10);
        //Register-18
        write_mcdl(PCM1742_R18_MUTE_OFF | PCM1742_R18_OVER_SAMPLE_OFF | (0x12<<8));
        delay_1ms(10);
        //Register-19
        write_mcdl(PCM1742_R19_SF_48 | (0x13<<8));
        delay_1ms(10);
        //Register-20
        write_mcdl(
                PCM1742_R20_FMT_24RJ |
                //PCM1742_R20_FMT_I2S |
                (0x14<<8));
    }
#endif

    dac_set_vol(0xff);
}



//Set DAC Sampling frequency
//fs:44.1K/48k
//xck:384fs/256fs

void dac_set_fs(BYTE fs)
{
#ifdef PCM1742
    switch(fs)
    {
        case FS_48K:
            write_mcdl(PCM1742_R18_MUTE_OFF | PCM1742_R18_OVER_SAMPLE_OFF | (0x12<<8));
            write_mcdl(PCM1742_R19_SF_48 | (0x13<<8));
            break;
        case FS_96K:
            write_mcdl(PCM1742_R18_MUTE_OFF | PCM1742_R18_OVER_SAMPLE_ON | (0x12<<8));
            write_mcdl(PCM1742_R19_SF_48 | (0x13<<8));
            break;
        case FS_44K:
        case FS_88K:
            write_mcdl(PCM1742_R18_MUTE_OFF | PCM1742_R18_OVER_SAMPLE_OFF | (0x12<<8));
            write_mcdl(PCM1742_R19_SF_44 | (0x13<<8));
            break;
        case FS_32K:
            write_mcdl(PCM1742_R18_MUTE_OFF | PCM1742_R18_OVER_SAMPLE_OFF | (0x12<<8));
            write_mcdl(PCM1742_R19_SF_32 | (0x13<<8));
            break;
        default:
            write_mcdl(PCM1742_R18_MUTE_OFF | PCM1742_R18_OVER_SAMPLE_OFF | (0x12<<8));
            write_mcdl(PCM1742_R19_SF_44 | (0x13<<8));
            break;
    }
#endif    
}


#endif //#if defined(PCM1742)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -