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

📄 evmdm642_edma_aic23.c

📁 使用DM642 來進行scaling 有說明檔
💻 C
📖 第 1 页 / 共 2 页
字号:
        MCASP_FMKS(XMASK, XMASK0, NOMASK),
        
        MCASP_FMKS(XFMT, XDATDLY, 0BIT)         |
        MCASP_FMKS(XFMT, XRVRS, MSBFIRST)       |
        MCASP_FMKS(XFMT, XPAD, ZERO)            |
        MCASP_FMKS(XFMT, XPBIT, DEFAULT)        |
        MCASP_FMKS(XFMT, XSSZ, 32BITS)          |
        MCASP_FMKS(XFMT, XBUSEL, DAT)           |
        MCASP_FMKS(XFMT, XROT, NONE),

        MCASP_FMKS(AFSXCTL, XMOD, BURST)        |
        MCASP_FMKS(AFSXCTL, FXWID, BIT) |
        MCASP_FMKS(AFSXCTL, FSXM, EXTERNAL)     |
        MCASP_FMKS(AFSXCTL, FSXP, ACTIVEHIGH),

        MCASP_FMKS(ACLKXCTL, CLKXP, FALLING)    |
        MCASP_FMKS(ACLKXCTL, ASYNC, ASYNC)      |
        MCASP_FMKS(ACLKXCTL, CLKXM, EXTERNAL)   |
        MCASP_FMKS(ACLKXCTL, CLKXDIV, OF(0)),
  
        MCASP_FMKS(AHCLKXCTL, HCLKXM, EXTERNAL) |
        MCASP_FMKS(AHCLKXCTL, HCLKXP, RISING)   |     
        MCASP_FMKS(AHCLKXCTL, HCLKXDIV, OF(0)),

        MCASP_FMKS(XTDM, XTDMS31, INACTIVE)     |
        MCASP_FMKS(XTDM, XTDMS30, INACTIVE)     |
        MCASP_FMKS(XTDM, XTDMS29, INACTIVE)     |
        MCASP_FMKS(XTDM, XTDMS28, INACTIVE)     |       
        MCASP_FMKS(XTDM, XTDMS27, INACTIVE)     |
        MCASP_FMKS(XTDM, XTDMS26, INACTIVE)     |
        MCASP_FMKS(XTDM, XTDMS25, INACTIVE)     |
        MCASP_FMKS(XTDM, XTDMS24, INACTIVE)     |
        MCASP_FMKS(XTDM, XTDMS23, INACTIVE)     |
        MCASP_FMKS(XTDM, XTDMS22, INACTIVE)     |
        MCASP_FMKS(XTDM, XTDMS21, INACTIVE)     |
        MCASP_FMKS(XTDM, XTDMS20, INACTIVE)     |
        MCASP_FMKS(XTDM, XTDMS19, INACTIVE)     |
        MCASP_FMKS(XTDM, XTDMS18, INACTIVE)     |      
        MCASP_FMKS(XTDM, XTDMS17, INACTIVE)     |
        MCASP_FMKS(XTDM, XTDMS16, INACTIVE)     |
        MCASP_FMKS(XTDM, XTDMS15, INACTIVE)     |
        MCASP_FMKS(XTDM, XTDMS14, INACTIVE)     |
        MCASP_FMKS(XTDM, XTDMS13, INACTIVE)     |
        MCASP_FMKS(XTDM, XTDMS12, INACTIVE)     |
        MCASP_FMKS(XTDM, XTDMS11, INACTIVE)     |
        MCASP_FMKS(XTDM, XTDMS10, INACTIVE)     |
        MCASP_FMKS(XTDM, XTDMS9, INACTIVE)      |
        MCASP_FMKS(XTDM, XTDMS8, INACTIVE)      |
        MCASP_FMKS(XTDM, XTDMS7, INACTIVE)      |
        MCASP_FMKS(XTDM, XTDMS6, INACTIVE)      |
        MCASP_FMKS(XTDM, XTDMS5, INACTIVE)      |
        MCASP_FMKS(XTDM, XTDMS4, INACTIVE)      |
        MCASP_FMKS(XTDM, XTDMS3, INACTIVE)      |
        MCASP_FMKS(XTDM, XTDMS2, INACTIVE)      |
        MCASP_FMKS(XTDM, XTDMS1, INACTIVE)      |
        MCASP_FMKS(XTDM, XTDMS0, ACTIVE),

        MCASP_FMKS(XINTCTL, XSTAFRM, DISABLE)   |
        MCASP_FMKS(XINTCTL, XDATA, DISABLE)     |
        MCASP_FMKS(XINTCTL, XLAST, DISABLE)     |
        MCASP_FMKS(XINTCTL, XDMAERR, DISABLE)   |
        MCASP_FMKS(XINTCTL, XCKFAIL, DISABLE)   |
        MCASP_FMKS(XINTCTL, XSYNCERR, DISABLE)  |
        MCASP_FMKS(XINTCTL, XUNDRN, DISABLE),

        MCASP_FMKS(XCLKCHK, XMAX, DEFAULT)      |
        MCASP_FMKS(XCLKCHK, XMIN, DEFAULT)      |
        MCASP_FMKS(XCLKCHK, XPS, DEFAULT)       
    }; 

    MCASP_ConfigSrctl configSrctl = {
        MCASP_FMKS(SRCTL, DISMOD, HIGH)         |
        MCASP_FMKS(SRCTL, SRMOD, XMT),

        MCASP_FMKS(SRCTL, DISMOD, HIGH)         |
        MCASP_FMKS(SRCTL, SRMOD, RCV),

        MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
        MCASP_FMKS(SRCTL, SRMOD, INACTIVE),

        MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
        MCASP_FMKS(SRCTL, SRMOD, INACTIVE),

        MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
        MCASP_FMKS(SRCTL, SRMOD, INACTIVE),

        MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
        MCASP_FMKS(SRCTL, SRMOD, INACTIVE),

        MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
        MCASP_FMKS(SRCTL, SRMOD, INACTIVE),

        MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
        MCASP_FMKS(SRCTL, SRMOD, INACTIVE)

/*      MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
        MCASP_FMKS(SRCTL, SRMOD, INACTIVE),

        MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
        MCASP_FMKS(SRCTL, SRMOD, INACTIVE),

        MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
        MCASP_FMKS(SRCTL, SRMOD, INACTIVE),

        MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
        MCASP_FMKS(SRCTL, SRMOD, INACTIVE),

        MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
        MCASP_FMKS(SRCTL, SRMOD, INACTIVE),

        MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
        MCASP_FMKS(SRCTL, SRMOD, INACTIVE),

        MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
        MCASP_FMKS(SRCTL, SRMOD, INACTIVE),

        MCASP_FMKS(SRCTL, DISMOD, 3STATE)       |
        MCASP_FMKS(SRCTL, SRMOD, INACTIVE) */
};

    MCASP_Config mcaspCfg;

    mcaspCfg.global = &configGbl;
    mcaspCfg.receive = &configRcv;
    mcaspCfg.transmit = &configXmt;
    mcaspCfg.srctl = &configSrctl;

    
    /* If no device parameters are passed, use the defaults. */
    if (params == NULL) {
        params = &EVMDM642_EDMA_AIC23_DEVPARAMS;
    }

    /* Check if the version is supported by the driver. */
    if(params->versionId != EVMDM642_EDMA_AIC23_VERSION_1){
        /* Unsupported version */
        return(IOM_EBADARGS);
    }

    /* Set the McASP */ 
    genericParams.mcaspCfgPtr = &mcaspCfg;

    genericParams.irqId = params->irqId;
    genericParams.enableClkg = params->enableClkg;
    genericParams.enableHclkg = params->enableHclkg;
    genericParams.enableFsyncg = params->enableFsyncg;
    genericParams.cacheCalls = params->cacheCalls;
    genericParams.inEvtIrqId = params->inEvtIrqId;
    genericParams.outEvtIrqId = params->outEvtIrqId;
    genericParams.evtCallback = params->evtCallback;
    genericParams.inEvtIntrMask  = params->inEvtIntrMask;
    genericParams.outEvtIntrMask  = params->outEvtIntrMask;
    /* Set the interrupt mask */
    genericParams.edmaIntrMask = params->edmaIntrMask;

    /* Set codec parameters */
    if (!AIC23_setParams(&(params->aic23Config))) {
        return (IOM_EALLOC);
    }

    /* Call the generic mdBindDev to claim mcasp port MCASPPORT */
    return (C6X1X_EDMA_MCASP_FXNS.mdBindDev)(devp, MCASPPORT, &genericParams);
}

/*
 * ======== mdCreateChan ========
 * This function creates and configures a device channel.
 */
static Int mdCreateChan(Ptr *chanp, Ptr devp, String name, Int mode,
                        Ptr chanParams, IOM_TiomCallback cbFxn, Ptr cbArg)
{
    Int result;
    C6X1X_EDMA_MCASP_ChanParams genericParams;

    EDMA_Config edmaCfg = {
        EDMA_FMKS(OPT, PRI, HIGH)             |
        EDMA_FMKS(OPT, ESIZE, 32BIT)          |
        EDMA_FMKS(OPT, 2DS, NO)               |
        EDMA_FMKS(OPT, SUM, NONE)             |
        EDMA_FMKS(OPT, 2DD, NO)               |
        EDMA_FMKS(OPT, DUM, NONE)             |
        EDMA_FMKS(OPT, TCINT, YES)            |
        EDMA_FMK (OPT, TCC, NULL)             |
        EDMA_FMKS(OPT, LINK, YES)             |
        EDMA_FMKS(OPT, FS, YES),

        EDMA_FMK(SRC, SRC, NULL),

        EDMA_FMKS(CNT, FRMCNT, DEFAULT)       |
        EDMA_FMKS(CNT, ELECNT, DEFAULT),

        EDMA_FMK(DST, DST, NULL),

        EDMA_FMKS(IDX, FRMIDX, DEFAULT)       |
        EDMA_FMKS(IDX, ELEIDX, DEFAULT),

        EDMA_FMKS(RLD, ELERLD, DEFAULT)       |
        EDMA_FMK(RLD, LINK, NULL)
    };      

    /* Set ELECNT, ELERLD to the active serializers */
    /* FRMCNT will be 1 pair of SRCTL and set in C6x1x_edma_mcasp driver */
    EDMA_FSETA(&edmaCfg.cnt, CNT, ELECNT, 1);   
    EDMA_FSETA(&edmaCfg.rld, RLD, ELERLD, 1); 

    if (mode == IOM_INPUT) {
        EDMA_FSETSA(&edmaCfg.opt, OPT, DUM, INC);
        /* Select EDMA channel 13 for rcv here */
        genericParams.edmaChan = 13;
    } else {

        EDMA_FSETSA(&edmaCfg.opt, OPT, SUM, INC);

        /* Select EDMA channel 12 for xmt here */
        genericParams.edmaChan = 12;
    }

    genericParams.edmaCfgPtr = &edmaCfg;
    /* 
     * for loopback, no need to sync to external frame sync, 
     * set to 5 to run loop edma job long enough for sync real xmt & rcv job
     */  
    genericParams.tdmChans = 1;
    
    result = (C6X1X_EDMA_MCASP_FXNS.mdCreateChan)(chanp, devp, name, mode,
                                                &genericParams, cbFxn, cbArg);
    return (result);
}

/*
 * ======== mdControlChan ========
 * Control the channel.
 */
static Int mdControlChan(Ptr chanp, Uns cmd, Ptr args)
{
	Uint32 sampleRate = (Uint32) args;
	Int result = 0;

	if (cmd == IOM_CNTL_AUDIO_SETSAMPLERATE) {
		AIC23_setSampleRate(sampleRate);	
		result = 1;
	}
	
	// Maybe should always call underlying? 
	else {
		// Call underlying mdControlChan
	    result = (C6X1X_EDMA_MCASP_FXNS.mdControlChan)(chanp, cmd, args);
	}

    return (result);
}

/*
 * ======== EVMDM642_EDMA_AIC23_init ========
 * This function initializes the driver's structures.
 */
Void EVMDM642_EDMA_AIC23_init()
{
    /* Pass some IOM fxns straight to the generic driver */
//    EVMDM642_EDMA_AIC23_FXNS.mdControlChan =
//        C6X1X_EDMA_MCASP_FXNS.mdControlChan;
    EVMDM642_EDMA_AIC23_FXNS.mdDeleteChan =
        C6X1X_EDMA_MCASP_FXNS.mdDeleteChan;
    EVMDM642_EDMA_AIC23_FXNS.mdSubmitChan =
        C6X1X_EDMA_MCASP_FXNS.mdSubmitChan;
    EVMDM642_EDMA_AIC23_FXNS.mdUnBindDev =
        C6X1X_EDMA_MCASP_FXNS.mdUnBindDev;

    C6X1X_EDMA_MCASP_init();
}



⌨️ 快捷键说明

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