[9XR-PRO] HiFi audio now :)
This commit is contained in:
@@ -111,33 +111,51 @@ void dacInit()
|
|||||||
|
|
||||||
bool dacQueue(AudioBuffer *buffer)
|
bool dacQueue(AudioBuffer *buffer)
|
||||||
{
|
{
|
||||||
dacStart();
|
if (DACC->DACC_TCR == 0 && DACC->DACC_TNCR == 0) {
|
||||||
return false;
|
DACC->DACC_TPR = CONVERT_PTR_UINT(buffer->data);
|
||||||
|
DACC->DACC_TCR = buffer->size/2;
|
||||||
|
DACC->DACC_PTCR = DACC_PTCR_TXTEN;
|
||||||
|
dacStart();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (DACC->DACC_TNCR == 0) {
|
||||||
|
DACC->DACC_TNPR = CONVERT_PTR_UINT(buffer->data);
|
||||||
|
DACC->DACC_TNCR = buffer->size/2;
|
||||||
|
DACC->DACC_PTCR = DACC_PTCR_TXTEN;
|
||||||
|
dacStart();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dacStart();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void DAC_IRQHandler()
|
extern "C" void DAC_IRQHandler()
|
||||||
{
|
{
|
||||||
uint32_t sr = DACC->DACC_ISR;
|
uint32_t sr = DACC->DACC_ISR;
|
||||||
if (sr & DACC_ISR_ENDTX) {
|
if (sr & DACC_ISR_ENDTX) {
|
||||||
AudioBuffer *nextBuffer = audioQueue.getNextFilledBuffer();
|
// Try the first PDC buffer
|
||||||
if (nextBuffer) {
|
if (DACC->DACC_TCR == 0 && DACC->DACC_TNCR == 0) {
|
||||||
// Try the first PDC buffer
|
AudioBuffer * nextBuffer = audioQueue.getNextFilledBuffer();
|
||||||
if ((DACC->DACC_TCR == 0) && (DACC->DACC_TNCR == 0)) {
|
if (nextBuffer) {
|
||||||
DACC->DACC_TPR = CONVERT_PTR_UINT(nextBuffer->data);
|
DACC->DACC_TPR = CONVERT_PTR_UINT(nextBuffer->data);
|
||||||
DACC->DACC_TCR = nextBuffer->size/2;
|
DACC->DACC_TCR = nextBuffer->size/2;
|
||||||
DACC->DACC_PTCR = DACC_PTCR_TXTEN;
|
DACC->DACC_PTCR = DACC_PTCR_TXTEN;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
// Try the second PDC buffer
|
else {
|
||||||
if (DACC->DACC_TNCR == 0) {
|
dacStop();
|
||||||
DACC->DACC_TNPR = CONVERT_PTR_UINT(nextBuffer->data);
|
|
||||||
DACC->DACC_TNCR = nextBuffer->size/2;
|
|
||||||
DACC->DACC_PTCR = DACC_PTCR_TXTEN;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
// Try the second PDC buffer
|
||||||
dacStop();
|
if (DACC->DACC_TNCR == 0) {
|
||||||
|
AudioBuffer * nextBuffer = audioQueue.getNextFilledBuffer();
|
||||||
|
if (nextBuffer) {
|
||||||
|
DACC->DACC_TNPR = CONVERT_PTR_UINT(nextBuffer->data);
|
||||||
|
DACC->DACC_TNCR = nextBuffer->size/2;
|
||||||
|
DACC->DACC_PTCR = DACC_PTCR_TXTEN;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user