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

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

?? dsk6x11_edma_ad535.c

?? 用DSP5410實現(xiàn)對音樂文件音量的限制性調(diào)節(jié)
?? C
字號:
/*
 *  Copyright 2003 by Texas Instruments Incorporated.
 *  All rights reserved. Property of Texas Instruments Incorporated.
 *  Restricted rights to use, duplicate or disclose this code are
 *  granted through contract.
 *  
 */
/* "@(#) DDK 1.11.00.00 11-04-03 (ddk-b13)" */
/* 
 *  ======== dsk6x11_edma_ad535.c ========
 * 
 *  Driver for the ad535 codec on the TMS320C6x11 DSK. Requires the
 *  generic TMS320C6x1x McBSP driver.
 */

#include <std.h>

#include <iom.h>

#include <csl.h>
#include <csl_mcbsp.h>
#include <csl_edma.h>

#include <dsk6x11_edma_ad535.h>

#include <c6x1x_edma_mcbsp.h>

#define AD535RESET      0x0080          /* codec software reset */

/*
 * Since the AD535 codec is master on the DSK6X11 we don't want to enable
 * the frame sync or sample rate generators since we don't use them (the
 * codec is master means that the mcbsp is externally clocked).
 */
#define GENERICDEVPARAMS {                                                  \
    C6X1X_EDMA_MCBSP_VERSION_1,/* Version Number.*/                         \
    FALSE, /* True if buffers are in cacheable memory (set in mdBindDev) */ \
    FALSE, /* Driver should not enable the McBSP sample rate generator */   \
    FALSE, /* Driver should not enable the McBSP frame sync generator */    \
    0,     /* IRQ id to use for the EDMA (set in mdBindDev) */              \
    NULL,  /* McBSP configuration for the codec (set in mdBindDev) */       \
    DSK6X11_EDMA_AD535_INTR_MASK_DEFAULT /* Interrupt mask for EDMA ISR */  \
}

/* Structure containing port specific variables */
typedef struct {
        Ptr c6x1xPortObj;
        Int edmaPriority;
} PortObj, *PortHandle;

/* Declare the port structure */
/* Only Mcbsp 0 is used */
static PortObj port;

DSK6X11_EDMA_AD535_DevParams DSK6X11_EDMA_AD535_DEVPARAMS =
                                 DSK6X11_EDMA_AD535_DEFAULT_DEVPARAMS;

/* Local function prototypes */
static Void codecControlWrite(MCBSP_Handle hMcbsp, Uns reg, Uns dataVal);
static Uns spRead(MCBSP_Handle hMcbsp);
static Void spWrite(MCBSP_Handle hMcbsp, Uns dataVal);

/*
 * Forward declaration of the IOM interface functions. They are only
 * exposed via the IOM function table to avoid namespace pollution.
 */
static Int mdBindDev(Ptr *devp, Int devid, Ptr devParams);
static Int mdCreateChan(Ptr *chanp, Ptr devp, String name, Int mode,
                        Ptr chanParams, IOM_TiomCallback cbFxn, Ptr cbArg);
static Int mdSubmitChan(Ptr chanp, IOM_Packet *packet);

/*
 * The codec driver function table. Notice how we copy most functions
 * from the generic c6x1x edma mcbsp driver.
 */
IOM_Fxns DSK6X11_EDMA_AD535_FXNS = {
    &mdBindDev,
    NULL,
    NULL,
    &mdCreateChan,
    NULL,
    &mdSubmitChan
};

/*
 * ======== mdBindDev ========
 * This function allocates and configures the ad535 codec.
 */
static Int mdBindDev(Ptr *devp, Int devid, Ptr devParams)
{
    Int i;
    MCBSP_Handle hMcbsp;
    Int result;
    DSK6X11_EDMA_AD535_DevParams *params =
        (DSK6X11_EDMA_AD535_DevParams *) devParams;
    C6X1X_EDMA_MCBSP_DevParams genericParams = GENERICDEVPARAMS;

    MCBSP_Config mcbspCfg = {
        MCBSP_FMKS(SPCR, FREE, NO)            |
        MCBSP_FMKS(SPCR, SOFT, NO)            |
        MCBSP_FMKS(SPCR, FRST, YES)           |
        MCBSP_FMKS(SPCR, GRST, YES)           |
        MCBSP_FMKS(SPCR, XINTM, XRDY)         |
        MCBSP_FMKS(SPCR, XSYNCERR, NO)        |
        MCBSP_FMKS(SPCR, XRST, YES)           |
        MCBSP_FMKS(SPCR, DLB, OFF)            |
        MCBSP_FMKS(SPCR, RJUST, RZF)          |
        MCBSP_FMKS(SPCR, CLKSTP, DISABLE)     |
        MCBSP_FMKS(SPCR, DXENA, OFF)          |
        MCBSP_FMKS(SPCR, RINTM, RRDY)         |
        MCBSP_FMKS(SPCR, RSYNCERR, NO)        |
        MCBSP_FMKS(SPCR, RRST, YES),

        MCBSP_FMKS(RCR, RPHASE, SINGLE)       |
        MCBSP_FMKS(RCR, RFRLEN2, OF(0))       |
        MCBSP_FMKS(RCR, RWDLEN2, 8BIT)        |
        MCBSP_FMKS(RCR, RCOMPAND, MSB)        |
        MCBSP_FMKS(RCR, RFIG, YES)            |
        MCBSP_FMKS(RCR, RDATDLY, 1BIT)        |
        MCBSP_FMKS(RCR, RFRLEN1, OF(0))       |
        MCBSP_FMKS(RCR, RWDLEN1, 16BIT)       |
        MCBSP_FMKS(RCR, RWDREVRS, DISABLE),

        MCBSP_FMKS(XCR, XPHASE, SINGLE)       |
        MCBSP_FMKS(XCR, XFRLEN2, OF(0))       |
        MCBSP_FMKS(XCR, XWDLEN2, 8BIT)        |
        MCBSP_FMKS(XCR, XCOMPAND, MSB)        |
        MCBSP_FMKS(XCR, XFIG, YES)            |
        MCBSP_FMKS(XCR, XDATDLY, 1BIT)        |
        MCBSP_FMKS(XCR, XFRLEN1, OF(0))       |
        MCBSP_FMKS(XCR, XWDLEN1, 16BIT)       |
        MCBSP_FMKS(XCR, XWDREVRS, DISABLE),

        MCBSP_SRGR_DEFAULT,    /* Default SRGR value */
        MCBSP_MCR_DEFAULT,     /* Default MCR value */
        MCBSP_RCER_DEFAULT,    /* Default RCER value */
        MCBSP_XCER_DEFAULT,    /* Default XCER value */
        MCBSP_PCR_DEFAULT      /* Default PCR value */
    };
    
    /* If no device parameters are passed, use the defaults. */
    if (params == NULL) {
        params = &DSK6X11_EDMA_AD535_DEVPARAMS;
    }

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

    /* Open McBSP port 0 and reset it. */
    hMcbsp = MCBSP_open(MCBSP_DEV0, MCBSP_OPEN_RESET);

    /*
     * We can't abort or send an error code back from setup. Just send an
     * error message to notify if an error occurs.
     */
    if (hMcbsp == INV) {
        return (IOM_EALLOC);
    }

    /* Configure McBSP port 0 using the above specified parameters. */
    MCBSP_config(hMcbsp, &mcbspCfg);

    /*
     * Temporarily enable the McBSP transmitter and receiver so
     * that we can set up the codec.
     */
    MCBSP_start(hMcbsp, MCBSP_RCV_START | MCBSP_XMIT_START,
                MCBSP_SRGR_DEFAULT_DELAY);

    /* Software reset the codec */
    codecControlWrite(hMcbsp, 3, AD535RESET);

    /* Configure the codec using the McBSP */
    for (i=0; i < DSK6X11_EDMA_AD535_NUMREGS; i++) {
        codecControlWrite(hMcbsp, i, params->reg[i]);
    }

    /* Close the McBSP so that the generic driver can claim it */
    MCBSP_close(hMcbsp);

    /* Set the IRQ id to use for EDMA (default is 8) */
    genericParams.irqId = params->irqId;
    
    /* Set the interrupt mask to be used for EDMA ISR */
    genericParams.intrMask = params->intrMask;

    genericParams.cacheCalls = params->cacheCalls;
    genericParams.mcbspCfgPtr = &mcbspCfg;

    /* Call the generic mdBindDev to claim mcbsp port 0 */
    result = (C6X1X_EDMA_MCBSP_FXNS.mdBindDev)(&port.c6x1xPortObj, 0,
                                               &genericParams);
    /* Store the edma priority in PortObj */
    port.edmaPriority = params->edmaPriority;
    *devp = &port;

    return (result);
}

/*
 * ======== 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_MCBSP_ChanParams genericParams;
    PortHandle localPort = (PortHandle) devp;

    EDMA_Config edmaCfg = {
        EDMA_FMKS(OPT, ESIZE, 16BIT)        |
        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, NO),

        EDMA_FMK (SRC, SRC, NULL),

        EDMA_FMK (CNT, FRMCNT, NULL)        |
        EDMA_FMK (CNT, ELECNT, NULL),

        EDMA_FMK(DST, DST, NULL),

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

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

        

    if (mode == IOM_INPUT) {
        edmaCfg.opt |= EDMA_FMK(OPT, DUM, EDMA_OPT_DUM_INC);
    }
    else {
        edmaCfg.opt |= EDMA_FMK(OPT, SUM, EDMA_OPT_SUM_INC);
    }
    
    /* set the edma transfer priority */
    edmaCfg.opt |= EDMA_FMK(OPT, PRI, localPort->edmaPriority);

    /*
     * This codec is a mono codec, and therefore only uses 1 McBSP TDM
     * channel.
     */
    genericParams.tdmChans = 1;
    genericParams.edmaCfgPtr = &edmaCfg;

    result = (C6X1X_EDMA_MCBSP_FXNS.mdCreateChan)(chanp, 
                    localPort->c6x1xPortObj,name, mode,&genericParams, 
                    cbFxn, cbArg);
    return (result);
}

static Int mdSubmitChan(Ptr chanp, IOM_Packet *packet)
{
    Int i;
    Int result;
    MdUns *localBuf;
    
    if (packet->cmd == IOM_WRITE) {
        /* Mask off the LSB */
        localBuf = packet->addr;
        for (i = 0; i < (packet->size / sizeof(MdUns)); i++) {
            localBuf[i] = localBuf[i] & 0xFFFE;
        }
    }
    
    result = (C6X1X_EDMA_MCBSP_FXNS.mdSubmitChan)(chanp, packet);
    return (result);
}

/*
 *  ======== codecControlWrite ========
 */
static Void codecControlWrite(MCBSP_Handle hMcbsp, Uns reg, Uns data)
{
    Uns temp;
        
    temp = ((reg & 0x001F) << 8) | (data & 0x00ff);

    spWrite(hMcbsp, 0);
    spRead (hMcbsp);
    spWrite(hMcbsp, 1);
    spRead (hMcbsp);
    spWrite(hMcbsp, temp);
    spRead (hMcbsp);
    spWrite(hMcbsp, 0);
    spRead (hMcbsp);
}


/*
 * ======== spWrite ========
 * WARNING!  Unbounded while loop!
 * spWrite() should only be called during init time.
 */
static Void spWrite(MCBSP_Handle hMcbsp, Uns dataVal)
{
    while(!(MCBSP_xrdy(hMcbsp))) {
        /* wait for TX ready */
    }

    MCBSP_write(hMcbsp, dataVal);
}


/*
 * ======== spRead ========
 * WARNING!  Unbounded while loop!
 * spRead() should only be called during init time.
 */
static Uns spRead(MCBSP_Handle hMcbsp)
{
    while(!(MCBSP_rrdy(hMcbsp))) {
        /* wait for RX ready */
    }

    return MCBSP_read(hMcbsp);
}

/*
 * ======== DSK6X11_EDMA_AD535_init ========
 * This function initializes the driver's structures.
 */
Void DSK6X11_EDMA_AD535_init()
{
    /* Pass some IOM fxns straight to the generic driver */
    DSK6X11_EDMA_AD535_FXNS.mdControlChan =
        C6X1X_EDMA_MCBSP_FXNS.mdControlChan;
    DSK6X11_EDMA_AD535_FXNS.mdDeleteChan = C6X1X_EDMA_MCBSP_FXNS.mdDeleteChan;
    DSK6X11_EDMA_AD535_FXNS.mdUnBindDev = C6X1X_EDMA_MCBSP_FXNS.mdUnBindDev;

    C6X1X_EDMA_MCBSP_init();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品日产第一区二区三区高清版 | 国产丝袜欧美中文另类| 大白屁股一区二区视频| 亚洲在线免费播放| 久久久精品tv| 日韩一区二区三区视频| 91麻豆免费看| 福利电影一区二区| 麻豆精品一区二区| 亚洲电影激情视频网站| 国产精品天美传媒沈樵| 精品国产一区二区三区忘忧草| 在线亚洲+欧美+日本专区| 国产一区二区在线视频| 三级影片在线观看欧美日韩一区二区| 国产精品情趣视频| 亚洲精品一区二区三区影院| 欧美日韩视频在线一区二区| eeuss影院一区二区三区| 国产一区激情在线| 蜜桃av噜噜一区二区三区小说| 在线欧美日韩精品| 亚洲综合色视频| 欧美日韩国产综合一区二区| 午夜成人在线视频| 欧美丝袜自拍制服另类| 日韩精品电影在线观看| 国产精品三级av在线播放| 高清国产午夜精品久久久久久| 欧美一区二区三区在线看| 91国偷自产一区二区开放时间| 国产凹凸在线观看一区二区| 国产呦精品一区二区三区网站| 看电影不卡的网站| 美女看a上一区| 日本网站在线观看一区二区三区| 亚洲综合999| 亚洲一区二区在线免费观看视频| 中文字幕一区二区三区在线不卡| 国产欧美精品一区aⅴ影院| 欧美精品一区二区三| 欧美不卡一区二区三区四区| 欧美一区二区视频免费观看| 日韩一区二区三区免费观看| 日韩视频中午一区| 日韩女优av电影| 精品乱人伦小说| 2017欧美狠狠色| 国产欧美日韩另类一区| 国产日本欧美一区二区| 中文字幕免费不卡| 国产精品成人免费精品自在线观看| 国产欧美精品国产国产专区| 国产精品你懂的| 亚洲狼人国产精品| 亚洲一区二区三区四区不卡| 亚洲电影一级黄| 免费成人av资源网| 国产成人在线视频网址| 粉嫩蜜臀av国产精品网站| www.亚洲色图| 在线观看视频欧美| 欧美电影一区二区| 精品久久久久久久久久久院品网| 国产偷v国产偷v亚洲高清| 日韩一区欧美小说| 亚洲成人av资源| 日本美女一区二区三区| 国产老肥熟一区二区三区| 成人黄色在线视频| 一本在线高清不卡dvd| 欧美精品日日鲁夜夜添| 久久久久久久久久久久久久久99 | 91精品国产91久久综合桃花| 精品日韩在线观看| 中文字幕亚洲一区二区va在线| 亚洲国产日韩精品| 国产精品亚洲人在线观看| 色综合视频一区二区三区高清| 欧美日韩视频在线第一区| 日韩精品在线看片z| 亚洲区小说区图片区qvod| 日韩精品成人一区二区三区| 风间由美一区二区三区在线观看| 95精品视频在线| 欧美videos大乳护士334| 中文字幕日韩精品一区| 日韩vs国产vs欧美| 成人激情免费电影网址| 欧美性一级生活| 久久精品视频免费| 亚洲国产成人av好男人在线观看| 国产一区二区调教| 欧美亚洲另类激情小说| 久久久久久日产精品| 亚洲一区二区精品视频| 国产精品一区不卡| 精品视频一区 二区 三区| 国产精品天天看| 免费成人结看片| 色综合天天综合网天天看片| 久久综合一区二区| 五月天一区二区三区| 99久久99久久综合| 久久综合国产精品| 香蕉成人伊视频在线观看| 成人av手机在线观看| 精品国产乱码久久久久久浪潮| 亚洲综合在线视频| www.日韩大片| 国产亚洲1区2区3区| 麻豆高清免费国产一区| 欧美日本视频在线| 亚洲免费三区一区二区| 国产成人99久久亚洲综合精品| 日韩欧美中文一区| 亚洲a一区二区| 一本一道久久a久久精品| 国产精品久久久久久久午夜片| 蜜臀va亚洲va欧美va天堂| 欧美最猛黑人xxxxx猛交| 国产精品国产自产拍在线| 国产一区二区三区在线看麻豆| 欧美午夜精品久久久久久孕妇 | 亚洲高清不卡在线| 99re66热这里只有精品3直播| 久久精品亚洲精品国产欧美kt∨| 老司机午夜精品| 欧美一区中文字幕| 五月天亚洲精品| 欧美麻豆精品久久久久久| 午夜私人影院久久久久| 色一情一伦一子一伦一区| 中文字幕亚洲在| 91香蕉国产在线观看软件| 国产精品成人一区二区艾草| 99精品在线免费| 日韩美女久久久| 91在线免费视频观看| 日韩理论片网站| www.欧美日韩国产在线| 中文字幕在线一区| 北条麻妃国产九九精品视频| 国产精品毛片无遮挡高清| 成人午夜在线视频| 国产精品久久久久久久久动漫 | 欧洲精品在线观看| 亚洲最新视频在线播放| 欧美主播一区二区三区美女| 亚洲国产va精品久久久不卡综合| 91老师国产黑色丝袜在线| 一二三四区精品视频| 欧美日韩性生活| 日韩成人一级片| 精品福利av导航| 国产福利一区二区| 亚洲欧洲国产日本综合| 一本色道久久综合亚洲精品按摩 | 丝袜美腿高跟呻吟高潮一区| 日韩午夜电影av| 国产盗摄一区二区三区| 国产精品久久久久久久久图文区| 色拍拍在线精品视频8848| 香蕉影视欧美成人| 欧美成人bangbros| 成人av电影在线| 亚洲一区二区视频| 欧美一区二区三区免费观看视频| 精品一区二区在线视频| 中文字幕中文乱码欧美一区二区| 色综合 综合色| 奇米精品一区二区三区四区| 久久综合九色欧美综合狠狠| 波多野结衣一区二区三区| 亚洲午夜久久久久| 欧美大片在线观看一区| 成人免费高清在线观看| 亚洲成人1区2区| 久久精品欧美日韩精品 | 欧美一区二区高清| 粉嫩aⅴ一区二区三区四区| 亚洲一区二区三区免费视频| 欧美电影免费观看完整版| 99久久婷婷国产综合精品 | 亚洲线精品一区二区三区八戒| 日韩欧美的一区二区| av欧美精品.com| 日韩成人午夜精品| 国产精品久久毛片av大全日韩| 欧美精选一区二区| 成人sese在线| 欧美aⅴ一区二区三区视频| 国产精品久久久久永久免费观看| 欧美精品 日韩| 99久久国产综合精品女不卡| 六月婷婷色综合| 亚洲一区二区免费视频| 精品福利视频一区二区三区| 1000精品久久久久久久久| 色综合久久综合中文综合网|