📄 pip_dss.c
字号:
/*
Copyright Texas Instruments 1998
Texas Instruments Proprietary Data -- Internal Data
Jack Greenbaum, TI Santa Barbara, greenbaum@ti.com
*/
/*
* ======== dss.c ========
*! Revision History
*! ================
*/
#include <std.h>
#include <log.h>
#include <swi.h>
#include <pip.h>
#include "drv.h"
extern DRV_Fxns DSK6211_codecFxns;
DRV_Fxns *drv = &DSK6211_codecFxns;
void DSS_txPrime(int calledByIsr, int ignored);
void DSS_rxPrime(int calledByIsr, int ignored);
#define RCV_CHAN0 0
#define XMT_CHAN0 1
#define RCV_CHAN1 2
#define XMT_CHAN1 3
extern far PIP_Obj txPip0;
extern far PIP_Obj rxPip0;
extern far PIP_Obj txPip1;
extern far PIP_Obj rxPip1;
PIP_Obj far *txPips[2] =
{
&txPip0,
&txPip1
};
PIP_Obj far *rxPips[2] =
{
&rxPip0,
&rxPip1
};
Void
DSS_init(Void)
{
drv->init(RCV_CHAN0, NULL);
drv->init(XMT_CHAN0, NULL);
drv->init(RCV_CHAN1, NULL);
drv->init(XMT_CHAN1, NULL);
drv->setCallback(RCV_CHAN0, DSS_rxPrime, RCV_CHAN0);
drv->setCallback(XMT_CHAN0, DSS_txPrime, XMT_CHAN0);
drv->setCallback(RCV_CHAN1, DSS_rxPrime, RCV_CHAN1);
drv->setCallback(XMT_CHAN1, DSS_txPrime, XMT_CHAN1);
/* these enable interrupts, maybe a problem? */
DSS_txPrime(0,XMT_CHAN0);
DSS_rxPrime(0,RCV_CHAN0);
DSS_txPrime(0,XMT_CHAN1);
DSS_rxPrime(0,RCV_CHAN1);
}
/*
* ======= DSS_txPrime ========
* This must be called by the notifyReader function of the txPips
*/
void
DSS_txPrime(int calledByIsr, int drvChan)
{
int chan;
if (drvChan == 1)
chan = 0;
else
chan = 1;
drv->stop(drvChan);
/* return empty buffer back to client */
if (calledByIsr && (drv->getBuf(drvChan, NULL, NULL) != NULL)) {
PIP_free(txPip[chan]);
}
/* if there is room in the driver and a frame on the tx queue */
if (!drv->isFull(drvChan) && PIP_getReaderNumFrames(txPip[chan]) > 0) {
PIP_get(txPip[chan]);
drv->setBuf(drvChan,
PIP_getReaderAddr(txPip[chan]),
PIP_getReaderSize(txPip[chan])*2);
}
drv->start(drvChan);
}
/*
* ======= DSS_rxPrime ========
* This must be the notifyWriter function of the rxPips
*/
void
DSS_rxPrime(int calledByIsr, int drvChan)
{
int chan;
if (drvChan == 2)
chan = 1;
drv->stop(drvChan);
/* return full frame back to client */
if (calledByIsr && (drv->getBuf(drvChan, NULL, NULL) != NULL)) {
PIP_put(rxPip[chan]);
}
/* if there is a frame on the rx queue */
if (!drv->isFull(drvChan) && PIP_getWriterNumFrames(rxPip[chan]) > 0) {
PIP_alloc(rxPip[chan]);
drv->setBuf(drvChan,
PIP_getWriterAddr(rxPip[chan]),
PIP_getWriterSize(rxPip[chan])*2);
}
drv->start(drvChan);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -