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

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

?? dss.c

?? 基于DSP的實時語音信號處理系統設計實例
?? C
字號:
/*
 *  Copyright 2002 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.
 *  
 */
/* "@(#) DSP/BIOS 4.80.208 12-06-02 (barracuda-l19)" */
/*
 *  ======== dss.c ========
 *  DSS provides a pipe(PIP) interface to the serial port audio data.
 *  DSS export two pipes: DSS_rxPipe and DSS_txPipe.  DSS_rxPipe can be
 *  read by the client to receive data from the serial port and
 *  DSS_txPipe can be written to by the client to send data to the
 *  serial port.
 *
 *  The input pipe (DSS_rxPipe) operates as follows:
 *
 *    Startup:
 *      BIOS startup            
 *      ------------            
 *      notifyWriter()
 *          |__DSS_rxPrime(0)
 *                              
 *
 *    Steady state:
 *      ISR(writer)              client(reader)
 *      -----------              --------------
 *      PIP_put()
 *          |__notifyReader()--> audio()
 *                                 |
 *      DSS_rxPrime(1)             |
 *          |__PIP_alloc()         |
 *             start DMA           |
 *                                 |__PIP_get()
 *                                    `process data`
 *                                    PIP_free()
 *                                        |__notifyWriter()
 *                                              |__DSS_rxPrime(0)
 *
 *  The output pipe (DSS_txPipe) operates as follows:
 *
 *    Startup:
 *      BIOS startup            
 *      ------------            
 *      notifyWriter()
 *          |__DSS_txPrime(0)
 *                              
 *
 *    Steady state:
 *      ISR(reader)              client(writer)
 *      -----------              --------------
 *      PIP_free()
 *          |__notifyWriter()--> audio()
 *                                 |
 *      DSS_txPrime(1)             |
 *          |__PIP_get()           |
 *             start DMA           |
 *                                 |__PIP_alloc()
 *                                    `write data`
 *                                    PIP_put()
 *                                        |__notifyReader()
 *                                              |__DSS_txPrime(0)
 */

#include <std.h>
#include <pip.h>
#include <log.h>
#include <trc.h>
#include <clk.h>

#include "dss.h"
#include "dss_priv.h"

#ifdef _EVM5510_
#include "dss_evm5510.h"
#endif

#ifdef _EDMA_
#include <csl_cache.h>
#endif

Int     DSS_error = 0;

Int     DSS_rxCnt = 0;
Int     DSS_txCnt = 0;

Int     *DSS_rxPtr = NULL;
Int     *DSS_txPtr = NULL;

DSS_Obj DSS_config = {
        0                       /*  enable tracing */
};

/*
 *  ======= DSS_txPrime ========
 *  Called when DSS_txPipe has a full buffer to be transmitted
 *  (i.e., when notifyReader() is called) and when the DSS ISR
 *  is ready for more data.
 */
#ifdef _EVM5510_
void DSS_txPrime(Arg Arg_calledByISR)
#else
void DSS_txPrime(Bool calledByISR)
#endif
{
#ifdef _EVM5510_
    Int calledByISR = ArgToInt(Arg_calledByISR);
#endif
    PIP_Obj     *txPipe = &DSS_txPipe;
    static int delay = 1;       /* or 2, 3, etc. */
    static Int nested = 0;
    
    LOG_message("DSS_txPrime(): %u", CLK_gethtime());

#if !(defined(_EDMA_) || defined(_DMA_) || defined(_EVM5510_))
    if (calledByISR) {
        DSS_computePhase(PIP_getWriterSize(txPipe));
    }
#endif

    if (nested) {       /* prohibit recursive call via PIP_get() */
        return;
    }

    if (delay) {      /* ensure that output does not start too soon */
        delay--;
        return;
    }

    nested = 1;

    if (DSS_txCnt == 0 && PIP_getReaderNumFrames(txPipe) > 0) {
        Int count;
#ifndef _EVM5510_
        Int i;
        MdInt *dst;
#endif
        PIP_get(txPipe);

        /* must set 'Ptr' before 'Cnt' to synchronize with isr() */
        DSS_txPtr = PIP_getReaderAddr(txPipe);

        /* ensure bit 0 of DAC word is 0; AIC uses bit 0 to request control */
        count = (sizeof(Int) / sizeof(MdInt)) * PIP_getReaderSize(txPipe);
#ifndef _EVM5510_
        for (i = count, dst = (MdInt *)DSS_txPtr; i > 0; i--) {
            *dst++ = 0xfffe & *dst;
        }
#endif
        DSS_txCnt = count;

#if defined(_EDMA_) || defined(_DMA_) || defined(_EVM5510_)
        DSS_dmaTxStart(DSS_txPtr, DSS_txCnt);
#endif
    }
    else if (calledByISR && (DSS_error & DSS_TXERR) == 0) {
        if (DSS_config.enable) {
            TRC_disable(TRC_GBLTARG);
        }
        LOG_error("transmit buffer underflow: %u", CLK_gethtime());
        DSS_error |= DSS_TXERR;
    }

    nested = 0;
}

/*
 *  ======= DSS_rxPrime ========
 *  Called when DSS_rxPipe has an empty buffer to be filled;
 *  e.g., when notifyWriter() is called) and when the DSS ISR
 *  is ready to fill another buffer.
 */
#ifdef _EVM5510_
void DSS_rxPrime(Arg Arg_calledByISR)
#else
void DSS_rxPrime(Bool calledByISR)
#endif
{
#ifdef _EVM5510_
    Int calledByISR = ArgToInt(Arg_calledByISR);
#endif

    PIP_Obj     *rxPipe = &DSS_rxPipe;
    static Int  nested = 0;
    
    LOG_message("DSS_rxPrime(): %u", CLK_gethtime());

#if !(defined(_EDMA_) || defined(_DMA_)|| defined(_EVM5510_))
    if (calledByISR) {
        DSS_computePhase(PIP_getWriterSize(rxPipe));
    }
#endif

    if (nested) {       /* prohibit recursive call via PIP_alloc() */
        return;
    }
    nested = 1;

    if (DSS_rxCnt == 0 && PIP_getWriterNumFrames(rxPipe) > 0) {
        PIP_alloc(rxPipe);

        /* must set 'Ptr' before 'Cnt' to synchronize with isr() */
        DSS_rxPtr = PIP_getWriterAddr(rxPipe);
        DSS_rxCnt = (sizeof(Int) / sizeof(MdInt)) * PIP_getWriterSize(rxPipe);

#if defined(_EDMA_) || defined(_DMA_) || defined(_EVM5510_)
        DSS_dmaRxStart(DSS_rxPtr, DSS_rxCnt);
#endif
    }
    else if (calledByISR && (DSS_error & DSS_RXERR) == 0) {
        if (DSS_config.enable) {
            TRC_disable(TRC_GBLTARG);
        }
        LOG_error("receive buffer overflow: %u", CLK_gethtime());
        DSS_error |= DSS_RXERR;
    }

    nested = 0;
}

#ifdef _EDMA_
/*
 *  ======== DSS_dmaInit ========
 *  Initialise EDMA Controller
 */
Void DSS_dmaInit(Void)
{
    LOG_message("DSS_dmaInit(): %u", CLK_gethtime());

    /* General EDMA Initialization */
    EDMA_RSET(EER, 0x0000);     /* Disable all events */
    EDMA_RSET(ECR, 0xffff);     /* Clear all pending events */
    EDMA_RSET(CIER, 0x0000);    /* Disable all events to Interrupt */
    EDMA_RSET(CIPR, 0xffff);    /* Clear all pending Queued EDMA ints */

    /* Enable Rx/Tx DMA Complete Interrupts to the CPU */
    EDMA_RSET(CIER, DSS_RXDONE | DSS_TXDONE);
}

/*
 *  ======= DSS_dmaRxStart ========
 */
Void DSS_dmaRxStart(Void *dst, Int nsamps)
{
    LOG_message("DSS_dmaRxstart(): %u", CLK_gethtime());
    
    CACHE_clean(CACHE_L2, dst, nsamps);

    /* Reconfig EDMA channel for next receive buffer */
    EDMA_RSETH(DSS_hEdmaRint0, CNT, (Uns) nsamps);
    EDMA_RSETH(DSS_hEdmaRint0, DST, (Uns) dst);

    EDMA_RSET(EER, 0x3000);     /* Enable McBSP0 Rx/Tx Events to the DMA */
}

/*
 *  ======= DSS_dmaTxStart ========
 */
Void DSS_dmaTxStart(Void *src, Int nsamps)
{
    static Int startup = 1;

    LOG_message("DSS_dmaTxstart(): %u", CLK_gethtime());
    
    CACHE_flush(CACHE_L2, src, nsamps);

    if (startup) {
        startup = 0;
        DSS_spWrite(0); DSS_spWrite(0);
        /* EDMA_RSET(ECR, 0x3000);    /Clear any previous McBSP Events */
    }

    /* Reconfig EDMA channel for next transmit buffer */
    EDMA_RSETH(DSS_hEdmaXint0, SRC, (Uns) src);
    EDMA_RSETH(DSS_hEdmaXint0, CNT, (Uns) nsamps);

    EDMA_RSET(EER, 0x3000);     /* Enable McBSP0 Rx/Tx Events to the DMA */
}
#endif

#ifdef _DMA_
/*
 *  ======= DSS_dmaRxStart ========
 */
void DSS_dmaRxStart(void *dst, Int nsamps)
{
    DMA_RSETH(DSS_hDmaRint0, SRC,(Int)(&DSS_hMcbsp0->baseAddr[_MCBSP_DRR_OFFSET]));
    DMA_RSETH(DSS_hDmaRint0, DST, (Uns)dst);
    DMA_RSETH(DSS_hDmaRint0, XFRCNT, (0x1 << 16) + nsamps / (sizeof(Int) / sizeof(MdInt)));
    DMA_start(DSS_hDmaRint0);
}

/*
 *  ======= DSS_dmaTxStart ========
 */
void DSS_dmaTxStart(void *src, Int nsamps)
{
    static Int startup = 1;

    if (startup) {
        startup = 0;
        DSS_spWrite(0); DSS_spWrite(0);
    }
    DMA_RSETH(DSS_hDmaXint0, SRC, (Uns)src);
    DMA_RSETH(DSS_hDmaXint0, DST,(Int)(&DSS_hMcbsp0->baseAddr[_MCBSP_DXR_OFFSET]));
    DMA_RSETH(DSS_hDmaXint0, XFRCNT, (0x1 << 16) + nsamps / (sizeof(Int) / sizeof(MdInt)));
    DMA_start(DSS_hDmaXint0);
}
#endif

#ifdef _EVM5510_
/*
 *  ======= DSS_dmaRxStart ========
 */
void DSS_dmaRxStart(void *dst, Int nsamps)
{
    aic27_capture(dst, nsamps);
}

/*
 *  ======= DSS_dmaTxStart ========
 */
void DSS_dmaTxStart(void *src, Int nsamps)
{
    aic27_play(src, nsamps);
}
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美丰满美乳xxx高潮www| 91超碰这里只有精品国产| 久久夜色精品国产噜噜av| 国产69精品一区二区亚洲孕妇| 国产精品不卡在线| 欧美写真视频网站| 国产一区 二区 三区一级| 亚洲色图一区二区三区| 日韩欧美一级片| 91欧美一区二区| 激情综合五月天| 香蕉久久一区二区不卡无毒影院| 中日韩免费视频中文字幕| 欧美精品粉嫩高潮一区二区| 69堂成人精品免费视频| 91精品国产福利在线观看| 91蜜桃免费观看视频| 在线看一区二区| 成人高清视频在线| 国产一区二区三区不卡在线观看 | 懂色av中文一区二区三区| 国产成人av资源| 蜜臀精品久久久久久蜜臀| 亚洲欧美日韩国产另类专区| 国产午夜久久久久| 精品国产免费人成在线观看| 欧美乱妇一区二区三区不卡视频| 日韩精品在线一区| 国产精品毛片a∨一区二区三区| 亚洲免费在线电影| 另类小说欧美激情| 麻豆精品一区二区综合av| 国产v综合v亚洲欧| 欧美三电影在线| 精品视频在线看| 久久久青草青青国产亚洲免观| 日韩视频免费直播| 欧美一级高清片| 欧美一级艳片视频免费观看| 亚洲蜜臀av乱码久久精品蜜桃| 亚洲国产婷婷综合在线精品| 久久久99久久| 亚洲一二三专区| 夜夜嗨av一区二区三区网页 | 精品少妇一区二区三区在线视频| 欧美在线视频你懂得| 日韩三级视频在线看| 亚洲三级免费观看| 精油按摩中文字幕久久| 在线观看成人小视频| 欧美激情综合在线| 亚洲视频一区在线观看| 国产一区二区按摩在线观看| 欧美乱妇23p| 亚洲欧美色图小说| 国产凹凸在线观看一区二区| 日韩欧美国产高清| 亚洲国产aⅴ天堂久久| 成人高清视频在线| 国产欧美在线观看一区| 国产精品久久久久久久浪潮网站| 麻豆久久久久久| 9191精品国产综合久久久久久| 综合久久久久综合| 99精品视频在线免费观看| 欧美日韩一级视频| 亚洲欧美视频在线观看| jizzjizzjizz欧美| 欧美精品在线观看一区二区| 亚洲精品视频一区| 麻豆一区二区99久久久久| 欧美丰满少妇xxxxx高潮对白| 亚洲自拍偷拍网站| 欧美在线观看一二区| 一区二区三区四区激情| 日本乱码高清不卡字幕| 久久午夜色播影院免费高清| 精品午夜一区二区三区在线观看| 欧美一区二区三区免费大片| 青青草成人在线观看| 色呦呦国产精品| 久久精品男人的天堂| 国产成人综合亚洲91猫咪| 国产无一区二区| av在线不卡免费看| 亚洲永久免费视频| 欧美日韩国产乱码电影| 亚洲欧洲日产国码二区| 久久99久久99精品免视看婷婷| 日韩欧美在线网站| 国产黄色成人av| 亚洲欧美在线观看| 欧美日韩激情一区二区三区| 日本亚洲电影天堂| 欧美日韩专区在线| 蜜桃视频第一区免费观看| 2022国产精品视频| 91天堂素人约啪| 日日嗨av一区二区三区四区| 欧美午夜一区二区三区| 日韩精品五月天| 国产欧美一区二区精品性| 91丨九色porny丨蝌蚪| 天天免费综合色| 欧美精品久久一区| 国产毛片一区二区| 亚洲午夜精品网| 久久精品这里都是精品| 91在线观看一区二区| 三级精品在线观看| 久久人人爽爽爽人久久久| 日本韩国精品一区二区在线观看| 男人的天堂久久精品| 国产精品你懂的| 日韩欧美中文字幕精品| 色综合中文综合网| 国产不卡一区视频| 午夜av电影一区| 1区2区3区国产精品| 欧美一区二区不卡视频| 97精品久久久久中文字幕| 青青草97国产精品免费观看无弹窗版| 中文字幕视频一区二区三区久| 3d动漫精品啪啪一区二区竹菊| 不卡视频一二三四| 激情亚洲综合在线| 亚洲精品一线二线三线无人区| 91麻豆123| 福利视频网站一区二区三区| 天天操天天色综合| 亚洲自拍偷拍综合| 亚洲视频一区在线| 中文av一区二区| 国产日韩欧美麻豆| 精品国产制服丝袜高跟| 欧美日韩成人高清| 日本韩国精品一区二区在线观看| 豆国产96在线|亚洲| 精品一区二区精品| 麻豆国产欧美一区二区三区| 丝袜亚洲精品中文字幕一区| 亚洲综合一区在线| 一区二区三区日韩精品| 亚洲欧洲日韩在线| 18成人在线观看| 国产精品乱人伦一区二区| 久久婷婷综合激情| 久久老女人爱爱| 久久久www免费人成精品| 欧美成人官网二区| 26uuu精品一区二区三区四区在线| 日韩亚洲欧美一区| 日韩你懂的电影在线观看| 91精品国产综合久久婷婷香蕉| 欧美日韩国产高清一区二区三区 | 九九九精品视频| 国产在线视频精品一区| 国产一区二区三区国产| 国产精品一区二区男女羞羞无遮挡 | 在线视频一区二区免费| 欧美午夜精品久久久久久超碰 | 国产欧美日韩精品在线| 国产亚洲精品福利| 中国色在线观看另类| 国产精品久久久久7777按摩| 亚洲欧美另类图片小说| 有坂深雪av一区二区精品| 亚洲午夜一区二区三区| 日日摸夜夜添夜夜添亚洲女人| 免费xxxx性欧美18vr| 国产一区二区美女诱惑| 岛国一区二区在线观看| 蜜臀久久99精品久久久画质超高清 | 樱桃视频在线观看一区| 亚洲gay无套男同| 国产一区二区主播在线| 99精品1区2区| 日韩欧美一级特黄在线播放| 久久久精品人体av艺术| 亚洲欧美日韩人成在线播放| 天天影视色香欲综合网老头| 国产美女娇喘av呻吟久久| 色综合天天性综合| 91精品国产色综合久久不卡电影 | 午夜在线成人av| 国产在线视视频有精品| 91麻豆国产香蕉久久精品| 欧美精品乱码久久久久久| 久久久久亚洲综合| 亚洲国产一区二区视频| 国产精品一级二级三级| 在线影院国内精品| 久久久www免费人成精品| 一个色在线综合| 粉嫩久久99精品久久久久久夜| 欧美日韩中文另类| 欧美激情中文不卡| 久久精品国产亚洲aⅴ| 日本韩国精品在线| 日本一二三不卡|