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

📄 xsac97ctrl.h

📁 嵌入式系统关于串口传输、触摸屏、定时器、控制器、中断处理、音频控制等实验代码
💻 H
📖 第 1 页 / 共 2 页
字号:
#define XS_AC97CTRL_ACLINK_FRAME_USECS     21

        // The number of 50 microsecond intervals to hold the cold reset
        //   line active before deactivating it, in order to perform a
        //   cold reset.
        // The minimum value of this constant is codec-dependent and should
        //  be determined by the least responsive codec in the system.
#define XS_AC97CTRL_COLD_HOLD_50USECS       1

        // The number of 50 microsecond intervals to wait before declaring
        //   a time out on receipt of a Codec Ready indication after Bit 1
        //   of the GSR is toggled from 0 to 1.
        // The minimum value of this constant is codec-dependent and should
        //  be determined by the least responsive codec in the system.
#define XS_AC97CTRL_COLD_TIMEOUT_50USECS    10

        // Timeout for the I/O cycle reading mixer registers from Codec
        // Actually the max is expected to be 126 uSec; add some for padding
#define XS_AC97CTRL_READ_TIMEOUT_1USECS ((XS_AC97CTRL_ACLINK_FRAME_USECS*6)+24)

#define XS_AC97CTRL_CODEC_READ_RETRIES       3

        // Getting the AC link should not take much longer than a time-out
        //  on an in-progress read operation.  If one read operation is 
        //  successful, both should proceed fairly quickly.
#define XS_AC97CTRL_CAIP_TIMEOUT_1USECS  (XS_AC97CTRL_READ_TIMEOUT_1USECS + 50)


/*
*******************************************************************************
    AC'97 Controller Registers Structure Definition
*******************************************************************************
*/

// For accessing the Codec mixer registers, each increment of one 32-bit word
//  in processor space increments the addressed mixer register by two.
// This does not cause any ambiguities because only even mixer register 
//  addresses are currently supported (AC '97 spec, R 2.2)
#define XS_AC97CTRL_MIXER_REGS_PER_WORD   2


typedef struct XsAc97CtrlRegsS
{  //   Register symbol     // Usage

    VUINT32 POCR;           // PCM Out Control Register
    VUINT32 PICR;           // PCM In Control Register
    VUINT32 MCCR;           // Mic In Control Register
    VUINT32 GCR;            // Global Control Register
    VUINT32 POSR;           // PCM Out Status Register
    VUINT32 PISR;           // PCM In Status Register
    VUINT32 MCSR;           // Mic In Status Register
    VUINT32 GSR;            // Global Status Register
    VUINT32 CAR;            // CODEC Access Register
    VUINT32 rsvd1 [7];      // 0x4050-0024 through 0x4050-003C
    VUINT32 PCDR;           // PCM FIFO Data Register
    VUINT32 rsvd2 [7];      // 0x4050-0044 through 0x4050-005C   
    VUINT32 MCDR;           // Mic-in FIFO Data Register
    VUINT32 rsvd3 [0x27];   // 0x4050-0064 through 0x4050-00FC   
    VUINT32 MOCR;           // MODEM Out Control Register
    VUINT32 rsvd4; 
    VUINT32 MICR;           // MODEM In Control Register
    VUINT32 rsvd5; 
    VUINT32 MOSR;           // MODEM Out Status Register
    VUINT32 rsvd6; 
    VUINT32 MISR;           // MODEM In Status Register
    VUINT32 rsvd7 [9];      // 0x4050-011C through 0x4050-013C
    VUINT32 MODR;           // MODEM FIFO Data Register 
    VUINT32 rsvd8 [0x2F];   // 0x4050-0144 through 0x4050-01FC
                            // Primary Audio CODEC registers access 
    VUINT32 XsAC97CtrlMixerRegsPrimaryAud   [AC97_NUM_MIXER_REGS];
                            // Secondary Audio CODEC registers access
    VUINT32 XsAC97CtrlMixerRegsSecondaryAud [AC97_NUM_MIXER_REGS];
                            // Primary MODEM CODEC registers access
    VUINT32 XsAC97CtrlMixerRegsPrimaryMdm   [AC97_NUM_MIXER_REGS];
                            // Secondary MODEM CODEC registers access
    VUINT32 XsAC97CtrlMixerRegsSecondaryMdm [AC97_NUM_MIXER_REGS];

}  XsAc97CtrlRegsT ;

/*
*******************************************************************************
    Define one entry in the AC'97 Controller status indicator processing table.
    Includes interrupt control and callback (registered handler) info.
*******************************************************************************
*/

typedef struct XsAc97CtrlStatusEntryE
{
    BOOL     intIsSupported;           // Int supported in current system?
    BOOL     intIsEnabled;             // Ints currently enabled for this type?

    void*    registeredParamP;         // Pass back to registered handler

    VUINT32* enableRegisterP;          // Addr of mem-mapped reg for int enable
    INT      enableBitShift;           // Bit position in enable reg for enable

    UINT32   reportBitMaskGsr;         // Unshifted Mask for status in GSR
    INT      reportBitShiftGsr;        // Bit position where reported in GSR

    VUINT32* clearRegisterP;           // Addr of mem-mapped reg for status clr
    INT      clearBitShift;            // Bit position in status reg for clear

} XsAc97CtrlStatusEntryT;

extern XsAc97CtrlStatusEntryT XsAc97CtrlStatusTable [XS_AC97CTRL_STAT_MAX+1];

/*
*******************************************************************************
*******************************************************************************
    Ac97Ctrl.c scope variable definitions
*******************************************************************************
*******************************************************************************
*/
extern const XsAc97CtrlStatusIdT XsAc97CtrlIntToStatusTransTbl [] ;
/*
static
XsAc97CtrlStatusIdT XsAc97CtrlIntToStatusTransTbl [] =
{
    XS_AC97CTRL_STAT_GSCI,    // XS_AC97CTRL_INT_GSCI
    XS_AC97CTRL_STAT_MDM_IN,  // XS_AC97CTRL_INT_MIINT
    XS_AC97CTRL_STAT_MDM_OUT, // XS_AC97CTRL_INT_MOINT
    XS_AC97CTRL_STAT_PCM_IN,  // XS_AC97CTRL_INT_PIINT
    XS_AC97CTRL_STAT_PCM_OUT, // XS_AC97CTRL_INT_POINT
    XS_AC97CTRL_STAT_MIC_IN,  // XS_AC97CTRL_INT_MINT 
    XS_AC97CTRL_STAT_PCRDY,   // XS_AC97CTRL_INT_PCRDY
    XS_AC97CTRL_STAT_SCRDY,   // XS_AC97CTRL_INT_SCRDY
    XS_AC97CTRL_STAT_PCRSM,   // XS_AC97CTRL_INT_PCRSM
    XS_AC97CTRL_STAT_SCRSM,   // XS_AC97CTRL_INT_SCRSM
    XS_AC97CTRL_STAT_SDONE,   // XS_AC97CTRL_INT_SDONE
    XS_AC97CTRL_STAT_CDONE    // XS_AC97CTRL_INT_CDONE

}; // XsAc97CtrlIntToStatusTransTbl[]
*/
extern XsAc97CtrlRegsT *XsAc97CtrlRegsP;
// XsAc97CtrlRegsT *XsAc97CtrlRegsP = (XsAc97CtrlRegsT *) XS_AC97CTRL_REGISTER_BASE;
 
                                
UINT32 XsAc97CtrlClearStatus (XsAc97CtrlStatusIdT);                                

UINT32 XsAc97CtrlRangeCheckStatusId (XsAc97CtrlStatusIdT);

static
void XsAc97CtrlSetStatusEntry ( XsAc97CtrlStatusEntryT* targetEntryP,
                                BOOL,
                                VUINT32*,
                                INT,
                                UINT32,
                                INT,
                                VUINT32*,
                                INT);


void XsAc97CtrlSWInit (void);
UINT32 XsAc97CtrlHWSetup (void);

UINT32 XsAc97CtrlWriteCodecReg   (XsAc97CtrlCodecModemIdT  ac97DeviceId, 
                                 AC97MixerRegisterIdT     targetRegister,
                                 UINT32                   newValue);
void playpcm(void);
#endif // #ifndef _XSAC97CTRL_H

⌨️ 快捷键说明

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