summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (from parent 1: 99da9fb)
raw | patch | inline | side by side (from parent 1: 99da9fb)
author | Frank Livingston <frank-livingston@ti.com> | |
Fri, 2 Feb 2018 17:01:00 +0000 (11:01 -0600) | ||
committer | Frank Livingston <frank-livingston@ti.com> | |
Fri, 2 Feb 2018 17:01:00 +0000 (11:01 -0600) |
pasdk/test_dsp/application/app.cfg | patch | blob | history | |
pasdk/test_dsp/framework/audioStreamOutProcNewIO.c | patch | blob | history |
index 1efc084bbeeb002041b009a1a2a62fa2911f085e..9e145db620fd883a16ec02916a8fc1d869363d3c 100644 (file)
ECM.eventGroupHwiNum[2] = 9;
ECM.eventGroupHwiNum[3] = 10;
ECM.eventGroupHwiNum[2] = 9;
ECM.eventGroupHwiNum[3] = 10;
+/* Add ASOT wake timer */
+var clockParams = new Clock.Params();
+clockParams.period = 1; // one clock tick period
+clockParams.startFlag = true;
+//clockParams.arg = 0x5555; // unused, default==NULL
+Program.global.clockAsot = Clock.create("&clkAsotFxn", 1, clockParams);
/* Define HWI Hook Set for PFP */
Hwi.addHookSet({
/* Define HWI Hook Set for PFP */
Hwi.addHookSet({
diff --git a/pasdk/test_dsp/framework/audioStreamOutProcNewIO.c b/pasdk/test_dsp/framework/audioStreamOutProcNewIO.c
index cdf0bb2a8499ac1a511889d6c18b3ddd39a7edcf..13276593c2736e3f72b51b904e21d4902e65285e 100644 (file)
#include <xdc/runtime/Log.h>
#include <ti/sysbios/BIOS.h>
#include <xdc/runtime/Log.h>
#include <ti/sysbios/BIOS.h>
+#include <ti/sysbios/knl/Event.h>
#include <stdio.h>
#include "mcasp_cfg.h"
#include <stdio.h>
#include "mcasp_cfg.h"
extern volatile UInt32 gCommandOutputTask_ACK;
extern Int d10Initialized;
extern volatile UInt32 gCommandOutputTask_ACK;
extern Int d10Initialized;
-
static Int asopSelectDevices(PAF_AST_IoOut *pOut);
static int asopIoCompsInit(PAF_AST_OutBuf * pOutBuf, PAF_AST_IoOut * pOutIo);
static void asopIoPhyPrime(PAF_AST_IoOut *pOut);
static Int asopSelectDevices(PAF_AST_IoOut *pOut);
static int asopIoCompsInit(PAF_AST_OutBuf * pOutBuf, PAF_AST_IoOut * pOutIo);
static void asopIoPhyPrime(PAF_AST_IoOut *pOut);
@@ -122,6 +122,17 @@ extern Void taskAsopFxnInit(const PAF_ASOT_Params *pP, const PAF_ASOT_Patchs *pQ
#define ASOP_DP_DECINFO2_ERR ( -5 ) // decode encode error
#define ASOP_DP_DECFINALTEST_ERR ( -6 ) // decode final error
#define ASOP_DP_DECINFO2_ERR ( -5 ) // decode encode error
#define ASOP_DP_DECFINALTEST_ERR ( -6 ) // decode final error
+// Output FSM states
+enum
+{
+ INIT_OUT_PROC_STATE,
+ INITSYNC_DEC_RESET_STATE,
+ INITSYNC_DEC_INFO1_STATE,
+ INITSYNC_DEC_DECODE1_STATE,
+ INITSYNC_RESYNC_STATE,
+ OUT_PROC_STATE
+};
+
// Global debug counters */
extern UInt32 gAsopTxSioReclaimCnt ;
extern UInt32 gAsopInitOutProcCnt ;
// Global debug counters */
extern UInt32 gAsopTxSioReclaimCnt ;
extern UInt32 gAsopInitOutProcCnt ;
extern UInt32 gAsopOutSioUpdateCnt ;
extern UInt32 gAsopQuitCnt ;
extern UInt32 gAsopOutSioUpdateCnt ;
extern UInt32 gAsopQuitCnt ;
+#define ASOP_DEBUG
+#ifdef ASOP_DEBUG
+Int asopLoopCount;
+#endif
+
+
/*
* ======== taskAsopFxn ========
* Audio Stream Output Processing task function
/*
* ======== taskAsopFxn ========
* Audio Stream Output Processing task function
const PAF_ASOT_Patchs *pQ
)
{
const PAF_ASOT_Patchs *pQ
)
{
- PAF_ASOT_Config *pAsotCfg; /* ASOT configuration pointer */
- PAF_AST_Config *pAstCfg; /* Common (shared) configuration pointer */
- Int as; /* Audio Stream Number (1, 2, etc.) */
- Int z; /* input/encode/stream/decode/output counter */
+ PAF_ASOT_Config *pAsotCfg; // ASOT configuration pointer
+ PAF_AST_Config *pAstCfg; // Common (shared) configuration pointer
+ Int as; // Audio Stream Number (1, 2, etc.)
+ Int z; // input/encode/stream/decode/output counter
Int zMS;
Int errno; // error number
Int8 procSleep; // whether to sleep: 0: No, 1: Yes
Int8 procOutDevSel; // whether to perform output device selection: 0: No, 1:Yes
Int outSel; // whether output device selected
Int zMS;
Int errno; // error number
Int8 procSleep; // whether to sleep: 0: No, 1: Yes
Int8 procOutDevSel; // whether to perform output device selection: 0: No, 1:Yes
Int outSel; // whether output device selected
- enum { INIT_OUT_PROC_STATE,
- INITSYNC_DEC_RESET_STATE, INITSYNC_DEC_INFO1_STATE, INITSYNC_DEC_DECODE1_STATE,
- INITSYNC_RESYNC_STATE,
- OUT_PROC_STATE } state;
PAF_AudioFrame decResetAf;
PAF_AudioFrame decInfo1Af;
PAF_AudioFrame decResetAf;
PAF_AudioFrame decInfo1Af;
- Int loopCount = 0; // used to stop trace to see startup behavior.
+#ifndef ASOP_DEBUG
+ Int asopLoopCount; // debug, ASOT loop counter
+#endif
Log_info0("Enter taskAsopFxn()");
taskAsopFxnInit(pP, pQ); // initialization of output task
Log_info0("Enter taskAsopFxn()");
taskAsopFxnInit(pP, pQ); // initialization of output task
-
+
//
// Audio Stream Output Task Configuration (*pAsotCfg):
//
//
// Audio Stream Output Task Configuration (*pAsotCfg):
//
TRACE_VERBOSE1("TaskAsop: AS%d: running", as+z);
}
TRACE_VERBOSE1("TaskAsop: AS%d: running", as+z);
}
- errno = 0; // init error indicator -- no error
- procSleep = 1; // init sleep flag -- sleep
- procOutDevSel = 1; // init device output selection flag -- perform output device selection
- state = INIT_OUT_PROC_STATE; // init state
+ errno = 0; // init error indicator -- no error
+ procSleep = 1; // init sleep flag -- sleep
+ procOutDevSel = 1; // init device output selection flag -- perform output device selection
+ pAsotCfg->state = INIT_OUT_PROC_STATE; // init state
+ asopLoopCount = 0; // loop counter
for (;;)
{
for (;;)
{
- loopCount++;
- TRACE_GEN2("TaskAsop (begin Main loop %d) (errno 0x%x)", loopCount, errno);
+ asopLoopCount++;
+ TRACE_GEN2("TaskAsop (begin Main loop %d) (errno 0x%x)", asopLoopCount, errno);
//
// Check forward (ASIT) error here, TBD
//
// Check forward (ASIT) error here, TBD
TRACE_TERSE0("TaskAsop: ack for writeDECCommandRestart ... Wait for the command deasserted");
gCommandOutputTask_ACK = 1;
while (gCommandOutputTask_SYNC) {
TRACE_TERSE0("TaskAsop: ack for writeDECCommandRestart ... Wait for the command deasserted");
gCommandOutputTask_ACK = 1;
while (gCommandOutputTask_SYNC) {
- Task_sleep(1);
+ //Task_sleep(1);
+ Event_pend(asotEvt, Event_Id_NONE, Evt_Id_AsotWakeTimer, BIOS_WAIT_FOREVER);
}
TRACE_TERSE0("TaskAsop: ack for writeDECCommandRestart ... Sync-ed! Startover the process");
}
TRACE_TERSE0("TaskAsop: ack for writeDECCommandRestart ... Sync-ed! Startover the process");
- procSleep = 1; // init sleep flag -- sleep
- procOutDevSel = 1; // init device output selection flag -- perform output device selection
- state = INIT_OUT_PROC_STATE; // init state -- starover
- errno = ASOP_DP_FORWARD_ERR; // Override the error -- for flushing SIO output device
+ procSleep = 1; // init sleep flag -- sleep
+ procOutDevSel = 1; // init device output selection flag -- perform output device selection
+ pAsotCfg->state = INIT_OUT_PROC_STATE; // init state -- start over
+ errno = ASOP_DP_FORWARD_ERR; // Override the error -- for flushing SIO output device
}
// any error forces idling of output
}
// any error forces idling of output
}
}
}
}
- TRACE_TERSE1("TaskAsop: Trace stopped at loop %d.", loopCount);
+ TRACE_TERSE1("TaskAsop: Trace stopped at loop %d.", asopLoopCount);
//ERRNO_RPRT(TaskAsop, errno);
}
if (procSleep == 1)
{
TRACE_VERBOSE1("TaskAsop: AS%d: ... sleeping ...", as+zMS);
//ERRNO_RPRT(TaskAsop, errno);
}
if (procSleep == 1)
{
TRACE_VERBOSE1("TaskAsop: AS%d: ... sleeping ...", as+zMS);
- Task_sleep(1);
+ //Task_sleep(1);
+ Event_pend(asotEvt, Event_Id_NONE, Evt_Id_AsotWakeTimer, BIOS_WAIT_FOREVER);
}
if (procOutDevSel == 1)
}
if (procOutDevSel == 1)
}
} /* if (procOutDevSel == 1) */
}
} /* if (procOutDevSel == 1) */
- switch (state)
+ switch (pAsotCfg->state)
{
case INIT_OUT_PROC_STATE:
gAsopInitOutProcCnt++;
{
case INIT_OUT_PROC_STATE:
gAsopInitOutProcCnt++;
errno = PAF_ASOT_initOutProc(pP, pAstCfg->xStr);
if (errno < 0)
{
errno = PAF_ASOT_initOutProc(pP, pAstCfg->xStr);
if (errno < 0)
{
- state = INIT_OUT_PROC_STATE;
+ pAsotCfg->state = INIT_OUT_PROC_STATE;
procSleep = 1;
procOutDevSel = 1;
}
else
{
procSleep = 1;
procOutDevSel = 1;
}
else
{
- //state = INITSYNC_DEC_RESET_STATE;
+ //pAsotCfg->state = INITSYNC_DEC_RESET_STATE;
procSleep = 0;
procOutDevSel = 0;
for (z=OUTPUT1; z < OUTPUTN; z++)
procSleep = 0;
procOutDevSel = 0;
for (z=OUTPUT1; z < OUTPUTN; z++)
// Start I/O physical layer by priming McASP LLD for output
asopIoPhyPrime(&pAsotCfg->pIoOut[0]);
// Start I/O physical layer by priming McASP LLD for output
asopIoPhyPrime(&pAsotCfg->pIoOut[0]);
- state = OUT_PROC_STATE;
+ pAsotCfg->state = OUT_PROC_STATE;
}
break;
case OUT_PROC_STATE:
}
break;
case OUT_PROC_STATE:
- Semaphore_pend(asopSemTx, BIOS_WAIT_FOREVER);
-
+ //Semaphore_pend(asopSemTx, BIOS_WAIT_FOREVER);
+ Event_pend(asotEvt, Event_Id_NONE, Evt_Id_AsotTxMcaspEdma, BIOS_WAIT_FOREVER);
+
ioPhyXferComplete(pAsotCfg->pIoOut[0].hIoPhy, FALSE);
asopDecodePcm(&pAsotCfg->pIoOut[0]);
ioPhyXferComplete(pAsotCfg->pIoOut[0].hIoPhy, FALSE);
asopDecodePcm(&pAsotCfg->pIoOut[0]);
Log_info1("TaskAsop: state=INITSYNC_DEC_RESET_STATE errno=%d", errno);
// sync error -- start over
Log_info1("TaskAsop: state=INITSYNC_DEC_RESET_STATE errno=%d", errno);
// sync error -- start over
- state = INIT_OUT_PROC_STATE;
+ pAsotCfg->state = INIT_OUT_PROC_STATE;
procSleep = 1;
procOutDevSel = 1;
}
procSleep = 1;
procOutDevSel = 1;
}
Log_info1("TaskAsop: state=INITSYNC_DEC_RESET_STATE not sync'd errno=%d", errno);
// sync not ready -- try again
Log_info1("TaskAsop: state=INITSYNC_DEC_RESET_STATE not sync'd errno=%d", errno);
// sync not ready -- try again
- state = INITSYNC_DEC_RESET_STATE;
+ pAsotCfg->state = INITSYNC_DEC_RESET_STATE;
errno=0; // FL: temp hack
procSleep = 1;
procOutDevSel = 1;
errno=0; // FL: temp hack
procSleep = 1;
procOutDevSel = 1;
Log_info1("TaskAsop: state=INITSYNC_DEC_RESET_STATE sync'd, errno=%d", errno);
// sync'd -- move on
Log_info1("TaskAsop: state=INITSYNC_DEC_RESET_STATE sync'd, errno=%d", errno);
// sync'd -- move on
- state = INITSYNC_DEC_INFO1_STATE;
+ pAsotCfg->state = INITSYNC_DEC_INFO1_STATE;
procSleep = 0;
procOutDevSel = 0;
}
procSleep = 0;
procOutDevSel = 0;
}
Log_info1("TaskAsop: state=INITSYNC_DEC_INFO1_STATE errno=%d", errno);
// sync error -- start over
Log_info1("TaskAsop: state=INITSYNC_DEC_INFO1_STATE errno=%d", errno);
// sync error -- start over
- state = INIT_OUT_PROC_STATE;
+ pAsotCfg->state = INIT_OUT_PROC_STATE;
procSleep = 1;
procOutDevSel = 1;
}
procSleep = 1;
procOutDevSel = 1;
}
Log_info1("TaskAsop: state=INITSYNC_DEC_INFO1_STATE not sync'd errno=%d", errno);
// sync not ready -- try again
Log_info1("TaskAsop: state=INITSYNC_DEC_INFO1_STATE not sync'd errno=%d", errno);
// sync not ready -- try again
- state = INITSYNC_DEC_INFO1_STATE;
+ pAsotCfg->state = INITSYNC_DEC_INFO1_STATE;
errno=0; // FL: temp hack
procSleep = 1;
procOutDevSel = 0;
errno=0; // FL: temp hack
procSleep = 1;
procOutDevSel = 0;
Log_info1("TaskAsop: state=INITSYNC_DEC_INFO1_STATE sync'd errno=%d", errno);
// sync'd -- move on
Log_info1("TaskAsop: state=INITSYNC_DEC_INFO1_STATE sync'd errno=%d", errno);
// sync'd -- move on
- state = INITSYNC_DEC_DECODE1_STATE;
+ pAsotCfg->state = INITSYNC_DEC_DECODE1_STATE;
procSleep = 0;
procOutDevSel = 0;
}
procSleep = 0;
procOutDevSel = 0;
}
Log_info1("TaskAsop: state=INITSYNC_DEC_DECODE1_STATE errno=%d", errno);
// sync error -- start over
Log_info1("TaskAsop: state=INITSYNC_DEC_DECODE1_STATE errno=%d", errno);
// sync error -- start over
- state = INIT_OUT_PROC_STATE;
+ pAsotCfg->state = INIT_OUT_PROC_STATE;
procSleep = 1;
procOutDevSel = 1;
}
procSleep = 1;
procOutDevSel = 1;
}
Log_info1("TaskAsop: state=INITSYNC_DEC_DECODE1_STATE not sync'd errno=%d", errno);
// sync not ready -- try again
Log_info1("TaskAsop: state=INITSYNC_DEC_DECODE1_STATE not sync'd errno=%d", errno);
// sync not ready -- try again
- state = INITSYNC_DEC_DECODE1_STATE;
+ pAsotCfg->state = INITSYNC_DEC_DECODE1_STATE;
errno=0; // FL: temp hack
procSleep = 1;
procOutDevSel = 0;
errno=0; // FL: temp hack
procSleep = 1;
procOutDevSel = 0;
Log_info1("TaskAsop: state=INITSYNC_DEC_DECODE1_STATE sync'd errno=%d", errno);
// sync'd -- move on
Log_info1("TaskAsop: state=INITSYNC_DEC_DECODE1_STATE sync'd errno=%d", errno);
// sync'd -- move on
- state = OUT_PROC_STATE;
+ pAsotCfg->state = OUT_PROC_STATE;
procSleep = 0;
procOutDevSel = 0;
}
procSleep = 0;
procOutDevSel = 0;
}
Log_info1("TaskAsop: state=INITSYNC_RESYNC_STATE errno=%d", errno);
// sync error -- start over
Log_info1("TaskAsop: state=INITSYNC_RESYNC_STATE errno=%d", errno);
// sync error -- start over
- state = INIT_OUT_PROC_STATE;
+ pAsotCfg->state = INIT_OUT_PROC_STATE;
procSleep = 1;
procOutDevSel = 1;
}
procSleep = 1;
procOutDevSel = 1;
}
Log_info1("TaskAsop: state=INITSYNC_RESYNC_STATE sync'd errno=%d", errno);
// re-sync'd -- move on
Log_info1("TaskAsop: state=INITSYNC_RESYNC_STATE sync'd errno=%d", errno);
// re-sync'd -- move on
- state = OUT_PROC_STATE;
+ pAsotCfg->state = OUT_PROC_STATE;
procSleep = 0;
procOutDevSel = 0;
}
procSleep = 0;
procOutDevSel = 0;
}
if (errno == ASOP_DP_FORWARD_ERR)
{
// forward (ASIT) error -- start over
if (errno == ASOP_DP_FORWARD_ERR)
{
// forward (ASIT) error -- start over
- state = INIT_OUT_PROC_STATE;
+ pAsotCfg->state = INIT_OUT_PROC_STATE;
procSleep = 1;
procOutDevSel = 1;
}
else
{
// local (ASOT) error
procSleep = 1;
procOutDevSel = 1;
}
else
{
// local (ASOT) error
- state = INITSYNC_RESYNC_STATE;
+ pAsotCfg->state = INITSYNC_RESYNC_STATE;
procSleep = 1;
procOutDevSel = 0; // disallow device re-select if local error during output processing
}
procSleep = 1;
procOutDevSel = 0; // disallow device re-select if local error during output processing
}
{
// skip re-sync
// resume output processing after new output selected
{
// skip re-sync
// resume output processing after new output selected
- state = OUT_PROC_STATE;
+ pAsotCfg->state = OUT_PROC_STATE;
procSleep = 1;
procOutDevSel = 1;
}
procSleep = 1;
procOutDevSel = 1;
}
// no error returned if CB drained
// (i.e. CB drained is normal behavior)
// no error returned if CB drained
// (i.e. CB drained is normal behavior)
- state = INIT_OUT_PROC_STATE;
+ pAsotCfg->state = INIT_OUT_PROC_STATE;
procSleep = 1;
procOutDevSel = 1;
}
procSleep = 1;
procOutDevSel = 1;
}
break;
#endif
default: // unknown state
break;
#endif
default: // unknown state
- TRACE_TERSE2("TaskAsop: AS%d: state: unknown, 0x%x", as+zMS, state);
+ TRACE_TERSE2("TaskAsop: AS%d: state: unknown, 0x%x", as+zMS, pAsotCfg->state);
break;
} // End of switch
break;
} // End of switch
} /* taskAsopFxn */
} /* taskAsopFxn */
+// ASOT wake timer (clock) function
+Void clkAsotFxn(Void)
+{
+ Event_post(asotEvt, Evt_Id_AsotWakeTimer);
+}
void asopMcaspCallback(void* arg, MCASP_Packet *mcasp_packet)
{
/* post semaphore */
if(mcasp_packet->arg == IOPHY_XFER_FINAL) {
void asopMcaspCallback(void* arg, MCASP_Packet *mcasp_packet)
{
/* post semaphore */
if(mcasp_packet->arg == IOPHY_XFER_FINAL) {
- Semaphore_post(asopSemTx);
+ //Semaphore_post(asopSemTx);
+ Event_post(asotEvt, Evt_Id_AsotTxMcaspEdma);
} else {
; // intermediate packet due to buffer wrapping around
}
} else {
; // intermediate packet due to buffer wrapping around
}
pOutIo->phyXferSize = ioPhyParams.xferFrameSize;
return 0;
pOutIo->phyXferSize = ioPhyParams.xferFrameSize;
return 0;
-} /* asipIoCompsInit */
+} /* asopIoCompsInit */
/*======================================================================================
/*======================================================================================