Bläddra i källkod

fix:DAC不能正确的提前结束播放,audio不能正确的暂停/恢复播放

alienwalker 3 år sedan
förälder
incheckning
d51a61d2df
2 ändrade filer med 6 tillägg och 7 borttagningar
  1. 4 2
      bsp/air105/hal/core_dac.c
  2. 2 5
      bsp/audio/src/audio_ll_drv.c

+ 4 - 2
bsp/air105/hal/core_dac.c

@@ -56,7 +56,7 @@ static int32_t DAC_DMADoneCB(void *pData, void *pParam)
 
 static int32_t DAC_DummyCB(void *pData, void *pParam)
 {
-	DBG("!");
+//	DBG("!");
 	return 0;
 }
 
@@ -133,7 +133,8 @@ uint8_t DAC_CheckRun(uint8_t DAC_ID)
 
 void DAC_Stop(uint8_t DAC_ID)
 {
-
+	DMA_StopStream(prvDAC.DMATxStream);
+	prvDAC.Callback = DAC_DummyCB;
 	while (DAC->DAC_CR1 & (1 << 29));
 	DAC_ForceStop(DAC_ID);
 }
@@ -144,5 +145,6 @@ void DAC_ForceStop(uint8_t DAC_ID)
 	DAC->DAC_CR1 |= (1 << 4);
 	DAC->DAC_CR1 &= ~0x04;
 	PM_SetHardwareRunFlag(PM_HW_DAC_0 + DAC_ID, 0);
+	prvDAC.IsBusy = 0;
 //	PM_SetHardwareRunFlag(PM_HW_DAC_0, 0);
 }

+ 2 - 5
bsp/audio/src/audio_ll_drv.c

@@ -39,10 +39,7 @@ static int32_t prvAudio_DACCB(void *pData, void *pParam)
 	}
 	free(OldBlock->uPV.pu8);
 	free(OldBlock);
-	if (!pStream->IsPause)
-	{
-		pStream->CB(pStream, NULL);
-	}
+	pStream->CB(pStream, NULL);
 	if (llist_empty(&pStream->DataHead))
 	{
 		pStream->IsHardwareRun = 0;
@@ -203,7 +200,7 @@ static int32_t prvAudio_WriteDACRaw(Audio_StreamStruct *pStream, uint8_t *pByteD
 	Critical = OS_EnterCritical();
 	llist_add_tail(&Block->Node, &pStream->DataHead);
 	OS_ExitCritical(Critical);
-	if (!pStream->IsHardwareRun)
+	if (!pStream->IsHardwareRun && !pStream->IsPause)
 	{
 		return prvAudio_RunDAC(pStream);
 	}