forked from PAWPAW-Mirror/lib_xua
66 lines
1.6 KiB
C
66 lines
1.6 KiB
C
|
|
#include <xs1.h>
|
|
#define __ASSEMBLER__ // Work around for bug #14118
|
|
#include <platform.h>
|
|
#undef __ASSEMBLER__
|
|
#include "devicedefines.h"
|
|
#include "audioports.h"
|
|
|
|
/* Note since DSD ports could be reused for I2S ports we do all the setup manually in C */
|
|
#if DSD_CHANS_DAC > 0
|
|
port p_dsd_dac[DSD_CHANS_DAC] = {
|
|
PORT_DSD_DAC0,
|
|
#endif
|
|
#if DSD_CHANS_DAC > 1
|
|
PORT_DSD_DAC1,
|
|
#endif
|
|
#if DSD_CHANS_DAC > 2
|
|
#error > 2 DSD chans currently not supported
|
|
#endif
|
|
#if DSD_CHANS_DAC > 0
|
|
};
|
|
port p_dsd_clk = PORT_DSD_CLK;
|
|
#endif
|
|
|
|
void EnableBufferedPort(port p, unsigned transferWidth)
|
|
{
|
|
asm volatile("setc res[%0], %1"::"r"(p), "r"(XS1_SETC_INUSE_ON));
|
|
asm volatile("setc res[%0], %1"::"r"(p), "r"(XS1_SETC_BUF_BUFFERS));
|
|
asm volatile("settw res[%0], %1"::"r"(p),"r"(transferWidth));
|
|
}
|
|
|
|
/* C wrapper for ConfigAudioPorts() to handle DSD ports */
|
|
void ConfigAudioPortsWrapper(
|
|
#if (I2S_CHANS_DAC != 0)
|
|
port p_dac[], int numPortsDac,
|
|
#endif
|
|
|
|
#if (I2S_CHANS_ADC != 0)
|
|
port p_adc[], int numPortsAdc,
|
|
#endif
|
|
|
|
#if (I2S_CHANS_DAC != 0) || (I2S_CHANS_ADC != 0)
|
|
#ifndef CODEC_MASTER
|
|
port p_lrclk,
|
|
port p_bclk,
|
|
#else
|
|
in port p_lrclk,
|
|
in port p_bclk,
|
|
#endif
|
|
#endif
|
|
unsigned int divide, unsigned int dsdMode)
|
|
{
|
|
ConfigAudioPorts(
|
|
#if (I2S_CHANS_DAC != 0)
|
|
p_dac,
|
|
numPortsDac,
|
|
#endif
|
|
#if (I2S_CHANS_ADC != 0)
|
|
p_adc,
|
|
numPortsAdc,
|
|
#endif
|
|
p_lrclk,
|
|
p_bclk,
|
|
divide);
|
|
}
|