| @@ -23,6 +23,8 @@ | |||
| // 2015/08/23: (FB) added mute_PCM() - sets or unsets VALID in VUCP (and adjusts PARITY) | |||
| #if defined(__IMXRT1052__) || defined(__IMXRT1062__) | |||
| #include <Arduino.h> | |||
| #include "output_spdif2.h" | |||
| #include "utility/imxrt_hw.h" | |||
| @@ -35,11 +37,10 @@ uint16_t AudioOutputSPDIF2::block_left_offset = 0; | |||
| uint16_t AudioOutputSPDIF2::block_right_offset = 0; | |||
| bool AudioOutputSPDIF2::update_responsibility = false; | |||
| /* DMAMEM */ static uint32_t SPDIF_tx_buffer[AUDIO_BLOCK_SAMPLES * 4]; //2 KB | |||
| DMAMEM __attribute__((aligned(32))) | |||
| static uint32_t SPDIF_tx_buffer[AUDIO_BLOCK_SAMPLES * 4]; //2 KB | |||
| DMAChannel AudioOutputSPDIF2::dma(false); | |||
| #if defined(__IMXRT1052__) || defined(__IMXRT1062__) | |||
| #define PREAMBLE_B (0xE8) //11101000 | |||
| #define PREAMBLE_M (0xE2) //11100010 | |||
| #define PREAMBLE_W (0xE4) //11100100 | |||
| @@ -85,6 +86,7 @@ uint16_t bmclookup[256] = { //biphase mark encoded values (least significant bit | |||
| 0x32aa, 0xb2aa, 0xd2aa, 0x52aa, 0xcaaa, 0x4aaa, 0x2aaa, 0xaaaa | |||
| }; | |||
| PROGMEM | |||
| void AudioOutputSPDIF2::begin(void) | |||
| { | |||
| @@ -154,7 +156,6 @@ void AudioOutputSPDIF2::isr(void) | |||
| end = (int32_t *)&SPDIF_tx_buffer[AUDIO_BLOCK_SAMPLES * 4/2]; | |||
| } | |||
| block = AudioOutputSPDIF2::block_left_1st; | |||
| if (block) { | |||
| offset = AudioOutputSPDIF2::block_left_offset; | |||
| @@ -245,6 +246,11 @@ void AudioOutputSPDIF2::isr(void) | |||
| } while (dest < end); | |||
| } | |||
| #if IMXRT_CACHE_ENABLED >= 2 | |||
| dest -= AUDIO_BLOCK_SAMPLES * 4/2 + 4/2; | |||
| arm_dcache_flush_delete(dest, sizeof(SPDIF_tx_buffer) / 2 ); | |||
| #endif | |||
| } | |||
| void AudioOutputSPDIF2::mute_PCM(const bool mute) | |||
| @@ -298,6 +304,7 @@ void AudioOutputSPDIF2::update(void) | |||
| } | |||
| PROGMEM | |||
| void AudioOutputSPDIF2::config_SPDIF(void) | |||
| { | |||
| CCM_CCGR5 |= CCM_CCGR5_SAI2(CCM_CCGR_ON); | |||