forked from PAWPAW-Mirror/lib_xua
Compare commits
3 Commits
develop
...
xu316yidu_
| Author | SHA1 | Date | |
|---|---|---|---|
| 50ba897b9e | |||
| f5556c618a | |||
| 09678f5971 |
@@ -52,6 +52,10 @@ void XUA_Buffer(
|
|||||||
#if (HID_CONTROLS)
|
#if (HID_CONTROLS)
|
||||||
, chanend c_hid
|
, chanend c_hid
|
||||||
#endif
|
#endif
|
||||||
|
#if PAWPAW_INOUTHID
|
||||||
|
, chanend c_hid
|
||||||
|
, chanend c_hid_out
|
||||||
|
#endif//#if PAWPAW_INOUTHID
|
||||||
, chanend c_aud
|
, chanend c_aud
|
||||||
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC) || defined(__DOYXGEN__)
|
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC) || defined(__DOYXGEN__)
|
||||||
, chanend c_audio_rate_change
|
, chanend c_audio_rate_change
|
||||||
@@ -86,6 +90,10 @@ void XUA_Buffer_Ep(chanend c_aud_out,
|
|||||||
#if (HID_CONTROLS)
|
#if (HID_CONTROLS)
|
||||||
, chanend c_hid
|
, chanend c_hid
|
||||||
#endif
|
#endif
|
||||||
|
#if PAWPAW_INOUTHID
|
||||||
|
, chanend c_hid
|
||||||
|
, chanend c_hid_out
|
||||||
|
#endif //#if PAWPAW_INOUTHID
|
||||||
#ifdef CHAN_BUFF_CTRL
|
#ifdef CHAN_BUFF_CTRL
|
||||||
, chanend c_buff_ctrl
|
, chanend c_buff_ctrl
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -748,7 +748,7 @@
|
|||||||
#define OUTPUT_FORMAT_COUNT 2
|
#define OUTPUT_FORMAT_COUNT 2
|
||||||
#else
|
#else
|
||||||
/* Default format count is 3 (16bit, 24bit, DSD) */
|
/* Default format count is 3 (16bit, 24bit, DSD) */
|
||||||
#define OUTPUT_FORMAT_COUNT 3
|
#define OUTPUT_FORMAT_COUNT 2
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -782,7 +782,7 @@
|
|||||||
#if (NATIVE_DSD_FORMAT_NUM == 1)
|
#if (NATIVE_DSD_FORMAT_NUM == 1)
|
||||||
#define STREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS 32 /* DSD requires 32bits */
|
#define STREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS 32 /* DSD requires 32bits */
|
||||||
#else
|
#else
|
||||||
#define STREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS 24
|
#define STREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS 32
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -796,7 +796,7 @@
|
|||||||
#if (NATIVE_DSD_FORMAT_NUM == 2)
|
#if (NATIVE_DSD_FORMAT_NUM == 2)
|
||||||
#define STREAM_FORMAT_OUTPUT_2_RESOLUTION_BITS 32 /* DSD requires 32bits */
|
#define STREAM_FORMAT_OUTPUT_2_RESOLUTION_BITS 32 /* DSD requires 32bits */
|
||||||
#else
|
#else
|
||||||
#define STREAM_FORMAT_OUTPUT_2_RESOLUTION_BITS 16
|
#define STREAM_FORMAT_OUTPUT_2_RESOLUTION_BITS 24
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -980,7 +980,7 @@
|
|||||||
* Default: 1
|
* Default: 1
|
||||||
*/
|
*/
|
||||||
#ifndef INPUT_FORMAT_COUNT
|
#ifndef INPUT_FORMAT_COUNT
|
||||||
#define INPUT_FORMAT_COUNT 1
|
#define INPUT_FORMAT_COUNT 2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -993,7 +993,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef STREAM_FORMAT_INPUT_2_RESOLUTION_BITS
|
#ifndef STREAM_FORMAT_INPUT_2_RESOLUTION_BITS
|
||||||
#define STREAM_FORMAT_INPUT_2_RESOLUTION_BITS 24
|
#define STREAM_FORMAT_INPUT_2_RESOLUTION_BITS 32
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef STREAM_FORMAT_INPUT_3_RESOLUTION_BITS
|
#ifndef STREAM_FORMAT_INPUT_3_RESOLUTION_BITS
|
||||||
|
|||||||
@@ -667,6 +667,12 @@ void XUA_AudioHub(chanend ?c_aud, clock ?clk_audio_mclk, clock ?clk_audio_bclk,
|
|||||||
|
|
||||||
/* Clock master clock-block from master-clock port */
|
/* Clock master clock-block from master-clock port */
|
||||||
/* Note, marked unsafe since other cores may be using this mclk port */
|
/* Note, marked unsafe since other cores may be using this mclk port */
|
||||||
|
|
||||||
|
// 加了这里就可以播放705,但是有杂音(不加的花705没有声音)
|
||||||
|
// set_thread_fast_mode_on();
|
||||||
|
// set_port_inv(p_mclk_in); // invert sense of MCLK to improve timing for external latch
|
||||||
|
|
||||||
|
// set_thread_fast_mode_on();
|
||||||
configure_clock_src(clk_audio_mclk, p_mclk_in);
|
configure_clock_src(clk_audio_mclk, p_mclk_in);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,14 @@
|
|||||||
unsigned char g_hidData[HID_MAX_DATA_BYTES] = {0U};
|
unsigned char g_hidData[HID_MAX_DATA_BYTES] = {0U};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if PAWPAW_INOUTHID
|
||||||
|
#include "stdio.h"
|
||||||
|
#include "pp_hid_exchange.h"
|
||||||
|
unsigned char g_hidData_in[PAWPAW_CFG_HID_IN_BUFSIZE+8] = {0};
|
||||||
|
unsigned char g_hidData_out[PAWPAW_CFG_HID_OUT_BUFSIZE+8] = {0};
|
||||||
|
extern int set_hid_up_size;
|
||||||
|
#endif//#if PAWPAW_INOUTHID
|
||||||
|
|
||||||
void GetADCCounts(unsigned samFreq, int &min, int &mid, int &max);
|
void GetADCCounts(unsigned samFreq, int &min, int &mid, int &max);
|
||||||
#define BUFFER_SIZE_OUT (1028 >> 2)
|
#define BUFFER_SIZE_OUT (1028 >> 2)
|
||||||
#define BUFFER_SIZE_IN (1028 >> 2)
|
#define BUFFER_SIZE_IN (1028 >> 2)
|
||||||
@@ -103,6 +111,10 @@ void XUA_Buffer(
|
|||||||
#if (HID_CONTROLS )
|
#if (HID_CONTROLS )
|
||||||
, chanend c_hid
|
, chanend c_hid
|
||||||
#endif
|
#endif
|
||||||
|
#if PAWPAW_INOUTHID
|
||||||
|
, chanend c_hid
|
||||||
|
, chanend c_hid_out
|
||||||
|
#endif//#if PAWPAW_INOUTHID
|
||||||
, chanend c_aud
|
, chanend c_aud
|
||||||
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC)
|
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC)
|
||||||
, chanend c_audio_rate_change
|
, chanend c_audio_rate_change
|
||||||
@@ -142,6 +154,11 @@ void XUA_Buffer(
|
|||||||
#if XUA_HID_ENABLED
|
#if XUA_HID_ENABLED
|
||||||
, c_hid
|
, c_hid
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if PAWPAW_INOUTHID
|
||||||
|
, c_hid
|
||||||
|
, c_hid_out
|
||||||
|
#endif //#if PAWPAW_INOUTHID
|
||||||
#ifdef CHAN_BUFF_CTRL
|
#ifdef CHAN_BUFF_CTRL
|
||||||
, c_buff_ctrl
|
, c_buff_ctrl
|
||||||
#endif
|
#endif
|
||||||
@@ -197,6 +214,11 @@ void XUA_Buffer_Ep(register chanend c_aud_out,
|
|||||||
#if(HID_CONTROLS)
|
#if(HID_CONTROLS)
|
||||||
, chanend c_hid
|
, chanend c_hid
|
||||||
#endif
|
#endif
|
||||||
|
#if PAWPAW_INOUTHID
|
||||||
|
, chanend c_hid
|
||||||
|
, chanend c_hid_out
|
||||||
|
#endif//#if PAWPAW_INOUTHID
|
||||||
|
|
||||||
#ifdef CHAN_BUFF_CTRL
|
#ifdef CHAN_BUFF_CTRL
|
||||||
, chanend c_buff_ctrl
|
, chanend c_buff_ctrl
|
||||||
#endif
|
#endif
|
||||||
@@ -242,6 +264,12 @@ void XUA_Buffer_Ep(register chanend c_aud_out,
|
|||||||
#if XUA_HID_ENABLED
|
#if XUA_HID_ENABLED
|
||||||
XUD_ep ep_hid = XUD_InitEp(c_hid);
|
XUD_ep ep_hid = XUD_InitEp(c_hid);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if PAWPAW_INOUTHID
|
||||||
|
XUD_ep ep_hid = XUD_InitEp(c_hid);
|
||||||
|
XUD_ep ep_hid_out = XUD_InitEp(c_hid_out);//dwj+
|
||||||
|
#endif//#if PAWPAW_INOUTHID
|
||||||
|
|
||||||
unsigned u_tmp;
|
unsigned u_tmp;
|
||||||
unsigned sampleFreq = DEFAULT_FREQ;
|
unsigned sampleFreq = DEFAULT_FREQ;
|
||||||
unsigned masterClockFreq = DEFAULT_MCLK_FREQ;
|
unsigned masterClockFreq = DEFAULT_MCLK_FREQ;
|
||||||
@@ -399,6 +427,11 @@ void XUA_Buffer_Ep(register chanend c_aud_out,
|
|||||||
|
|
||||||
#endif /* (XUA_SYNCMODE == XUA_SYNCMODE_SYNC) */
|
#endif /* (XUA_SYNCMODE == XUA_SYNCMODE_SYNC) */
|
||||||
|
|
||||||
|
#if PAWPAW_INOUTHID
|
||||||
|
XUD_SetReady_In(ep_hid, g_hidData_in, PAWPAW_CFG_HID_IN_BUFSIZE);// 上行
|
||||||
|
XUD_SetReady_Out(ep_hid_out,g_hidData_out);// 下行
|
||||||
|
#endif //#if PAWPAW_INOUTHID
|
||||||
|
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
XUD_Result_t result;
|
XUD_Result_t result;
|
||||||
@@ -839,7 +872,7 @@ void XUA_Buffer_Ep(register chanend c_aud_out,
|
|||||||
if (midi_data_remaining_to_device)
|
if (midi_data_remaining_to_device)
|
||||||
{
|
{
|
||||||
read_via_xc_ptr(datum, midi_from_host_rdptr);
|
read_via_xc_ptr(datum, midi_from_host_rdptr);
|
||||||
midi_send_data(c_midi, datum);
|
outuint(c_midi, datum);
|
||||||
midi_from_host_rdptr += 4;
|
midi_from_host_rdptr += 4;
|
||||||
midi_data_remaining_to_device -= 4;
|
midi_data_remaining_to_device -= 4;
|
||||||
}
|
}
|
||||||
@@ -975,6 +1008,31 @@ void XUA_Buffer_Ep(register chanend c_aud_out,
|
|||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if PAWPAW_INOUTHID
|
||||||
|
case XUD_SetData_Select(c_hid, ep_hid, result):
|
||||||
|
{
|
||||||
|
/* 通过HID上报DATA给PC端 */
|
||||||
|
hid_to_host_buf(g_hidData_in);
|
||||||
|
|
||||||
|
XUD_SetReady_In(ep_hid, g_hidData_in, set_hid_up_size);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
#if (HID_OUT_REQUIRED)
|
||||||
|
case XUD_GetData_Select(c_hid_out, ep_hid_out,length, result):
|
||||||
|
{
|
||||||
|
XUD_SetReady_Out(ep_hid_out,g_hidData_out);
|
||||||
|
|
||||||
|
/* 从PC端,HID获取数据给到XMOS */
|
||||||
|
hid_from_host_buf(g_hidData_out);
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif //#if (HID_OUT_REQUIRED)
|
||||||
|
|
||||||
|
#endif//#if PAWPAW_INOUTHID
|
||||||
|
|
||||||
#ifdef MIDI
|
#ifdef MIDI
|
||||||
/* Received word from MIDI thread - Check for ACK or Data */
|
/* Received word from MIDI thread - Check for ACK or Data */
|
||||||
case midi_get_ack_or_data(c_midi, is_ack, datum):
|
case midi_get_ack_or_data(c_midi, is_ack, datum):
|
||||||
@@ -992,7 +1050,7 @@ void XUA_Buffer_Ep(register chanend c_aud_out,
|
|||||||
{
|
{
|
||||||
/* Read another word from the fifo and output it to MIDI thread */
|
/* Read another word from the fifo and output it to MIDI thread */
|
||||||
read_via_xc_ptr(datum, midi_from_host_rdptr);
|
read_via_xc_ptr(datum, midi_from_host_rdptr);
|
||||||
midi_send_data(c_midi, datum);
|
outuint(c_midi, datum);
|
||||||
midi_from_host_rdptr += 4;
|
midi_from_host_rdptr += 4;
|
||||||
midi_data_remaining_to_device -= 4;
|
midi_data_remaining_to_device -= 4;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -457,6 +457,90 @@ static unsigned char hidReportDescriptorPtr[] = {
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if PAWPAW_INOUTHID
|
||||||
|
#define hidReportDescriptorLength (sizeof(hidReportDescriptorPtr))
|
||||||
|
static unsigned char hidReportDescriptorPtr[] = {
|
||||||
|
|
||||||
|
0x05, 0x0c, // HID_USAGE_PAGE (Vendor Defined)
|
||||||
|
0x09, 0x01, // USAGE (Undefined)
|
||||||
|
0xa1, 0x01, // COLLECTION (Application)
|
||||||
|
// Report ID if any
|
||||||
|
// 0x85, 0x01, // REPORT_ID (1) 为这个报告集合指定Report ID为1
|
||||||
|
0x09, 0x02, // USAGE (Undefined)
|
||||||
|
0x15, 0x00, // LOGICAL_MINIMUM (0)
|
||||||
|
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
|
||||||
|
0x75, 0x08, // REPORT_SIZE (8)
|
||||||
|
0x95, PAWPAW_CFG_HID_IN_BUFSIZE, // REPORT_COUNT (report_size)
|
||||||
|
0x81, 0x02, // INPUT (Data,Var,Abs)
|
||||||
|
// Output
|
||||||
|
0x09, 0x03, // USAGE (Undefined)
|
||||||
|
0x15, 0x00, // LOGICAL_MINIMUM (0)
|
||||||
|
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
|
||||||
|
0x75, 0x08, // REPORT_SIZE (8)
|
||||||
|
0x95, PAWPAW_CFG_HID_OUT_BUFSIZE, // REPORT_COUNT (report_size)
|
||||||
|
0x91, 0x02, // OUTPUT (Data,Var,Abs)
|
||||||
|
0xc0 // END_COLLECTION
|
||||||
|
|
||||||
|
// 0x05, 0x0c, // HID_USAGE_PAGE (Vendor Defined)
|
||||||
|
// 0x09, 0x01, // USAGE (Undefined)
|
||||||
|
// 0xa1, 0x01, // COLLECTION (Application)
|
||||||
|
// 0x85, 0x01, // REPORT_ID (1) 为这个报告集合指定Report ID为1
|
||||||
|
// 0x09, 0x02, // USAGE (Undefined)
|
||||||
|
// 0x15, 0x00, // LOGICAL_MINIMUM (0)
|
||||||
|
// 0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
|
||||||
|
// 0x75, 0x08, // REPORT_SIZE (8)
|
||||||
|
// 0x95, (PAWPAW_CFG_HID_IN_BUFSIZE-1), // REPORT_COUNT (report_size)
|
||||||
|
// 0x81, 0x02, // INPUT (Data,Var,Abs)
|
||||||
|
// // Output
|
||||||
|
// 0x09, 0x03, // USAGE (Undefined)
|
||||||
|
// 0x15, 0x00, // LOGICAL_MINIMUM (0)
|
||||||
|
// 0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
|
||||||
|
// 0x75, 0x08, // REPORT_SIZE (8)
|
||||||
|
// 0x95, (PAWPAW_CFG_HID_OUT_BUFSIZE-1), // REPORT_COUNT (report_size)
|
||||||
|
// 0x91, 0x02, // OUTPUT (Data,Var,Abs)
|
||||||
|
// 0xc0, // END_COLLECTION
|
||||||
|
|
||||||
|
// 0x05, 0x0B, // Usage Page (Telephony)
|
||||||
|
// 0x09, 0x05, // Usage (Keypad)
|
||||||
|
// 0xA1, 0x01, // Collection (Application)
|
||||||
|
// 0x85, 0x02, // Report ID (2)
|
||||||
|
// 0x15, 0x00, // Logical Minimum (0)
|
||||||
|
// 0x25, 0x01, // Logical Maximum (1)
|
||||||
|
// 0x95, 0x01, // Report Count (1)
|
||||||
|
// 0x75, 0x01, // Report Size (1 bit)
|
||||||
|
// 0x09, 0x20, // Usage (Hook Switch)
|
||||||
|
// 0x81, 0x02, // Input (Data, Var, Abs)
|
||||||
|
// 0x09, 0x2F, // Usage (Phone Mute)
|
||||||
|
// 0x81, 0x06, // Input (Data, Var, Rel)
|
||||||
|
// 0x09, 0x21, // Usage (Flash)
|
||||||
|
// 0x81, 0x02, // Input (Data, Var, Abs)
|
||||||
|
// 0x09, 0x24, // Usage (Redial)
|
||||||
|
// 0x81, 0x02, // Input (Data, Var, Abs)
|
||||||
|
// 0x95, 0x01, // Report Count (1)
|
||||||
|
// 0x75, 0x04, // Report Size (4 bits)
|
||||||
|
// 0x81, 0x01, // Input (Const)
|
||||||
|
// 0x05, 0x08, // Usage Page (LEDs)
|
||||||
|
// 0x09, 0x17, // Usage (Off-Hook)
|
||||||
|
// 0x15, 0x00, // Logical Minimum (0)
|
||||||
|
// 0x25, 0x01, // Logical Maximum (1)
|
||||||
|
// 0x95, 0x01, // Report Count (1)
|
||||||
|
// 0x75, 0x01, // Report Size (1 bit)
|
||||||
|
// 0x91, 0x02, // Output (Data, Var, Abs)
|
||||||
|
// 0x09, 0x09, // Usage (Message Waiting)
|
||||||
|
// 0x91, 0x02, // Output (Data, Var, Abs)
|
||||||
|
// 0x09, 0x18, // Usage (Ring)
|
||||||
|
// 0x91, 0x02, // Output (Data, Var, Abs)
|
||||||
|
// 0x09, 0x20, // Usage (Hook Switch)
|
||||||
|
// 0x91, 0x02, // Output (Data, Var, Abs)
|
||||||
|
// 0x95, 0x01, // Report Count (1)
|
||||||
|
// 0x75, 0x04, // Report Size (4 bits)
|
||||||
|
// 0x91, 0x01, // Output (Const)
|
||||||
|
// 0xC0, // End Collection
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
#endif //#if PAWPAW_INOUTHID
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void XUA_Endpoint0_init(chanend c_ep0_out, chanend c_ep0_in, NULLABLE_RESOURCE(chanend, c_audioControl),
|
void XUA_Endpoint0_init(chanend c_ep0_out, chanend c_ep0_in, NULLABLE_RESOURCE(chanend, c_audioControl),
|
||||||
@@ -893,6 +977,16 @@ void XUA_Endpoint0_loop(XUD_Result_t result, USB_SetupPacket_t sp, chanend c_ep0
|
|||||||
result = HidInterfaceClassRequests(ep0_out, ep0_in, &sp);
|
result = HidInterfaceClassRequests(ep0_out, ep0_in, &sp);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if PAWPAW_INOUTHID
|
||||||
|
if (interfaceNum == INTERFACE_NUMBER_HID)
|
||||||
|
{
|
||||||
|
debug_printf("INTERFACE_NUMBER_HID");
|
||||||
|
extern XUD_Result_t HidInterfaceClassRequests_PAWPAW(XUD_ep c_ep0_out, XUD_ep c_ep0_in, USB_SetupPacket_t sp);
|
||||||
|
HidInterfaceClassRequests_PAWPAW(ep0_out, ep0_in, sp);
|
||||||
|
}
|
||||||
|
#endif//#if PAWPAW_INOUTHID
|
||||||
|
|
||||||
/* Check for: - Audio CONTROL interface request - always 0, note we check for DFU first
|
/* Check for: - Audio CONTROL interface request - always 0, note we check for DFU first
|
||||||
* - Audio STREAMING interface request (In or Out)
|
* - Audio STREAMING interface request (In or Out)
|
||||||
* - Audio endpoint request (Audio 1.0 Sampling freq requests are sent to the endpoint)
|
* - Audio endpoint request (Audio 1.0 Sampling freq requests are sent to the endpoint)
|
||||||
|
|||||||
@@ -370,7 +370,8 @@ void usb_audio_io(chanend ?c_aud_in,
|
|||||||
|
|
||||||
/* Audio I/O core (pars additional S/PDIF TX Core) */
|
/* Audio I/O core (pars additional S/PDIF TX Core) */
|
||||||
{
|
{
|
||||||
thread_speed();
|
// thread_speed();
|
||||||
|
set_thread_fast_mode_on();
|
||||||
#if (MIXER)
|
#if (MIXER)
|
||||||
#define AUDIO_CHANNEL c_mix_out
|
#define AUDIO_CHANNEL c_mix_out
|
||||||
#else
|
#else
|
||||||
@@ -567,7 +568,7 @@ int main()
|
|||||||
#else
|
#else
|
||||||
/* Clock port from same clock-block as I2S */
|
/* Clock port from same clock-block as I2S */
|
||||||
/* TODO remove asm() */
|
/* TODO remove asm() */
|
||||||
asm("ldw %0, dp[clk_audio_mclk]":"=r"(x));
|
asm("ldw %0, dp[clk_audio_mclk]":"=r"(x)); //跟这里无关
|
||||||
asm("setclk res[%0], %1"::"r"(p_for_mclk_count), "r"(x));
|
asm("setclk res[%0], %1"::"r"(p_for_mclk_count), "r"(x));
|
||||||
#endif
|
#endif
|
||||||
/* Endpoint & audio buffering cores */
|
/* Endpoint & audio buffering cores */
|
||||||
@@ -593,6 +594,10 @@ int main()
|
|||||||
#if (XUA_HID_ENABLED)
|
#if (XUA_HID_ENABLED)
|
||||||
, c_xud_in[ENDPOINT_NUMBER_IN_HID]
|
, c_xud_in[ENDPOINT_NUMBER_IN_HID]
|
||||||
#endif
|
#endif
|
||||||
|
#if PAWPAW_INOUTHID
|
||||||
|
, c_xud_in[ENDPOINT_NUMBER_IN_HID]
|
||||||
|
, c_xud_out[ENDPOINT_NUMBER_OUT_HID]
|
||||||
|
#endif //#if PAWPAW_INOUTHID
|
||||||
, c_mix_out
|
, c_mix_out
|
||||||
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC)
|
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC)
|
||||||
, c_audio_rate_change
|
, c_audio_rate_change
|
||||||
@@ -602,10 +607,11 @@ int main()
|
|||||||
, c_sw_pll
|
, c_sw_pll
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
);
|
);
|
||||||
//:
|
//:
|
||||||
}
|
}
|
||||||
|
XUD_UNSAFE_RESRC
|
||||||
/* Endpoint 0 Core */
|
/* Endpoint 0 Core */
|
||||||
{
|
{
|
||||||
thread_speed();
|
thread_speed();
|
||||||
@@ -621,7 +627,7 @@ int main()
|
|||||||
|
|
||||||
on tile[AUDIO_IO_TILE]:
|
on tile[AUDIO_IO_TILE]:
|
||||||
{
|
{
|
||||||
|
AUDIO_UNSAFE_RESRC
|
||||||
/* Audio I/O task, includes mixing etc */
|
/* Audio I/O task, includes mixing etc */
|
||||||
usb_audio_io(c_mix_out
|
usb_audio_io(c_mix_out
|
||||||
#if (XUA_SPDIF_TX_EN) && (SPDIF_TX_TILE != AUDIO_IO_TILE)
|
#if (XUA_SPDIF_TX_EN) && (SPDIF_TX_TILE != AUDIO_IO_TILE)
|
||||||
|
|||||||
@@ -34,12 +34,12 @@ void ConfigAudioPorts(
|
|||||||
|
|
||||||
#if (CODEC_MASTER == 0)
|
#if (CODEC_MASTER == 0)
|
||||||
#ifdef __XS3A__
|
#ifdef __XS3A__
|
||||||
/* Increase drive strength of clock ports to 8mA */
|
// /* Increase drive strength of clock ports to 8mA */
|
||||||
asm volatile ("setc res[%0], %1" :: "r" (p_bclk), "r" (0x200006));
|
// asm volatile ("setc res[%0], %1" :: "r" (p_bclk), "r" (0x200006));
|
||||||
if(!isnull(p_lrclk))
|
// if(!isnull(p_lrclk))
|
||||||
{
|
// {
|
||||||
asm volatile ("setc res[%0], %1" :: "r" (p_lrclk), "r" (0x200006));
|
// asm volatile ("setc res[%0], %1" :: "r" (p_lrclk), "r" (0x200006));
|
||||||
}
|
// }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Note this call to stop_clock() will pause forever if the port clocking the clock-block is not low.
|
/* Note this call to stop_clock() will pause forever if the port clocking the clock-block is not low.
|
||||||
@@ -66,12 +66,40 @@ void ConfigAudioPorts(
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
unsafe
|
// unsafe
|
||||||
{
|
// {
|
||||||
|
// /* Clock bitclock clock block from master clock pin (divided) */
|
||||||
|
// configure_clock_src_divide(clk_audio_bclk, (port) p_mclk_in, (divide/2));
|
||||||
|
// configure_port_clock_output(p_bclk, clk_audio_bclk);
|
||||||
|
// }
|
||||||
|
|
||||||
|
#if defined(__XS2A__) || defined(__XS3A__)
|
||||||
/* Clock bitclock clock block from master clock pin (divided) */
|
/* Clock bitclock clock block from master clock pin (divided) */
|
||||||
configure_clock_src_divide(clk_audio_bclk, (port) p_mclk_in, (divide/2));
|
configure_clock_src_divide(clk_audio_bclk, p_mclk_in, (divide/2));
|
||||||
configure_port_clock_output(p_bclk, clk_audio_bclk);
|
configure_port_clock_output(p_bclk, clk_audio_bclk);
|
||||||
|
#else
|
||||||
|
/* For a divide of one (i.e. bitclock == master-clock) BClk is set to clock_output mode.
|
||||||
|
* In this mode it outputs an edge clock on every tick of itsassociated clock_block.
|
||||||
|
*
|
||||||
|
* For all other divides, BClk is clocked by the master clock and data
|
||||||
|
* will be output to p_bclk to generate the bit clock.
|
||||||
|
*/
|
||||||
|
if (divide == 1) /* e.g. 176.4KHz from 11.2896 */
|
||||||
|
{
|
||||||
|
configure_port_clock_output(p_bclk, clk_audio_mclk);
|
||||||
|
|
||||||
|
/* Generate bit clock block straight from mclk */
|
||||||
|
configure_clock_src(clk_audio_bclk, p_mclk_in);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* bit clock port from master clock clock-clock block */
|
||||||
|
configure_out_port_no_ready(p_bclk, clk_audio_mclk, 0);
|
||||||
|
|
||||||
|
/* Generate bit clock block from pin */
|
||||||
|
configure_clock_src(clk_audio_bclk, p_bclk);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if(!isnull(p_lrclk))
|
if(!isnull(p_lrclk))
|
||||||
{
|
{
|
||||||
@@ -128,6 +156,8 @@ void ConfigAudioPorts(
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// configure_in_port_no_ready(p_lrclk, clk_audio_bclk); // dwj+
|
||||||
|
|
||||||
/* Start clock blocks ticking */
|
/* Start clock blocks ticking */
|
||||||
start_clock(clk_audio_bclk);
|
start_clock(clk_audio_bclk);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user