diff --git a/module_usb_aud_shared/audio.xc b/module_usb_aud_shared/audio.xc index 811832cc..c261f73e 100755 --- a/module_usb_aud_shared/audio.xc +++ b/module_usb_aud_shared/audio.xc @@ -528,7 +528,7 @@ void audio(chanend c_mix_out, chanend ?c_dig_rx, chanend ?c_config) #endif /* Initialise master clock generation */ - ClockingInit(); + ClockingInit(c_config); /* Perform required CODEC/ADC/DAC initialisation */ CodecInit(c_config); @@ -550,7 +550,7 @@ void audio(chanend c_mix_out, chanend ?c_dig_rx, chanend ?c_config) divide = mClk / ( curSamFreq * 64 ); /* Configure clocking for required master clock */ - ClockingConfig(mClk); + ClockingConfig(mClk, c_config); if(!firstRun) { diff --git a/module_usb_aud_shared/clocking/clocking.h b/module_usb_aud_shared/clocking/clocking.h index 88fc786b..a02ebf15 100644 --- a/module_usb_aud_shared/clocking/clocking.h +++ b/module_usb_aud_shared/clocking/clocking.h @@ -5,10 +5,10 @@ /* Functions that handle master clock generation. These need modifying for an existing design */ /* Any initialisation required for master clock generation - run once at start up */ -void ClockingInit(void); +void ClockingInit(chanend ?c); /* Configuration for a specific master clock frequency - run every sample frequency change */ -void ClockingConfig(unsigned mClkFreq); +void ClockingConfig(unsigned mClkFreq, chanend ?c); /** Clock generation and digital audio I/O handling. diff --git a/module_usb_aud_shared/i2c/i2c.h b/module_usb_aud_shared/i2c/i2c.h index 6248e914..7bce33f0 100644 --- a/module_usb_aud_shared/i2c/i2c.h +++ b/module_usb_aud_shared/i2c/i2c.h @@ -1,4 +1,29 @@ +/** + * Module: module_usb_aud_shared + * Version: 2v3_iosrc0 + * Build: 5247dfd8ec69594e0670e3b8073efd3c453ad07d + * File: i2c.h + * + * The copyrights, all other intellectual and industrial + * property rights are retained by XMOS and/or its licensors. + * Terms and conditions covering the use of this code can + * be found in the Xmos End User License Agreement. + * + * Copyright XMOS Ltd 2010 + * + * In the case where this code is a modification of existing code + * under a separate license, the separate license terms are shown + * below. The modifications to the code are still covered by the + * copyright notice above. + * + **/ +// Channel interface +void I2cRegWriteC(int deviceAdrs, int Adrs, int WrData, chanend c); + +int I2cRegReadC(int deviceAdrs, int Adrs, chanend c); + +// Function interface void I2cRegWrite(int deviceAdrs, int Adrs, int WrData, port AUD_SCLK, port AUD_SDIN); int I2cRegRead(int deviceAdrs, int Adrs, port AUD_SCLK, port AUD_SDIN); diff --git a/module_usb_aud_shared/i2c/i2c.xc b/module_usb_aud_shared/i2c/i2c.xc index fd252260..ba56c22a 100755 --- a/module_usb_aud_shared/i2c/i2c.xc +++ b/module_usb_aud_shared/i2c/i2c.xc @@ -1,6 +1,47 @@ +/** + * Module: module_usb_aud_shared + * Version: 2v3_iosrc0 + * Build: c1785ffa61c5d34613093518d78adcebd79ae1cc + * File: i2c.xc + * + * The copyrights, all other intellectual and industrial + * property rights are retained by XMOS and/or its licensors. + * Terms and conditions covering the use of this code can + * be found in the Xmos End User License Agreement. + * + * Copyright XMOS Ltd 2010 + * + * In the case where this code is a modification of existing code + * under a separate license, the separate license terms are shown + * below. The modifications to the code are still covered by the + * copyright notice above. + * + **/ #include #include +int I2cRegReadC(int device, int addr, chanend c) { + int read; + int retVal; + c <: 0; // isWrite + c <: device; + c <: addr; + c <: 1; // only ever one byte + c :> read; + c :> retVal; + return read; +} + +void I2cRegWriteC(int device, int addr, int data, chanend c) { + int retVal; + c <: 1; // isWrite + c <: device; + c <: addr; + c <: 1; // only ever one byte + c <: data; + c :> retVal; +} + int I2cRegRead(int device, int addr, port scl, port sda) { //int Result; diff --git a/module_usb_aud_shared/pll/pll.h b/module_usb_aud_shared/pll/pll.h index d79ca14f..af761d72 100644 --- a/module_usb_aud_shared/pll/pll.h +++ b/module_usb_aud_shared/pll/pll.h @@ -1,4 +1,4 @@ -void PllInit(void); +void PllInit(chanend ?c); -void PllMult(unsigned mult); +void PllMult(unsigned mult, chanend ?c); diff --git a/module_usb_aud_shared/usb_buffer/decouple.h b/module_usb_aud_shared/usb_buffer/decouple.h index 08f1d437..ce83fbc8 100644 --- a/module_usb_aud_shared/usb_buffer/decouple.h +++ b/module_usb_aud_shared/usb_buffer/decouple.h @@ -12,8 +12,8 @@ * \param c_clk_int Optional chanend connected to the clockGen() thread if present */ void decouple(chanend c_audio_out, - chanend ?c_led, - chanend ?c_midi, chanend ?c_clk_int + chanend ?c_midi, + chanend ?c_clk_int #ifdef IAP , chanend ?c_iap #endif diff --git a/module_usb_midi/src/usb_midi.xc b/module_usb_midi/src/usb_midi.xc index 70f13d1b..4a3a6fc2 100644 --- a/module_usb_midi/src/usb_midi.xc +++ b/module_usb_midi/src/usb_midi.xc @@ -6,7 +6,7 @@ #include "midiinparse.h" #include "midioutparse.h" #include "queue.h" -#include "port32A.h" +//#include "port32A.h" #ifdef IAP #include "iAP.h" #endif @@ -64,77 +64,93 @@ extern unsigned authenticating; // state for auto-selecting dock or USB B extern unsigned polltime; +#ifdef IO_EXPANSION extern port p_i2c_scl; extern port p_i2c_sda; #define p_midi_out p_i2c_scl #define p_midi_in p_i2c_sda +#else +//extern out port p_midi_tx; +//extern port p_midi_rx; +#define p_midi_out p_midi_tx +#define p_midi_in p_midi_rx +#endif +//#ifdef IO_EXPANSION +#if 0 extern timer i2ctimer; #define iAPTimer i2ctimer +#else +timer iAPTimer; +#endif -void usb_midi(in port ?p_midi_inj, out port ?p_midi_outj, +void usb_midi(in port ?p_midi_in, out port ?p_midi_out, clock ?clk_midi, chanend c_midi, unsigned cable_number, chanend c_iap, chanend ?c_i2c // iOS stuff ) - { - unsigned symbol = 0x0; // Symbol in progress of being sent out - unsigned isTX = 0; // Guard when outputting data - unsigned txT; // Timer value used for outputting - //unsigned inputPortState, newInputPortState; - int waiting_for_ack = 0; - // Receiver - unsigned rxByte; - int rxI; - int rxT; - int isRX = 0; // Guard when receiving data - timer t; - timer t2; +{ + unsigned symbol = 0x0; // Symbol in progress of being sent out + unsigned isTX = 0; // Guard when outputting data + unsigned txT; // Timer value used for outputting + //unsigned inputPortState, newInputPortState; + int waiting_for_ack = 0; + // Receiver + unsigned rxByte; + int rxI; + int rxT; + int isRX = 0; // Guard when receiving data + timer t; + timer t2; - // One place buffer for data going out to host - queue midi_to_host_fifo; - unsigned char midi_to_host_fifo_arr[4]; // Used for 32bit USB MIDI events + // One place buffer for data going out to host + queue midi_to_host_fifo; + unsigned char midi_to_host_fifo_arr[4]; // Used for 32bit USB MIDI events - unsigned outputting_symbol, outputted_symbol; + unsigned outputting_symbol, outputted_symbol; - struct midi_in_parse_state mips; + struct midi_in_parse_state mips; - // the symbol fifo (to go out of uart) - queue symbol_fifo; - unsigned char symbol_fifo_arr[USB_MIDI_DEVICE_OUT_FIFO_SIZE * 4]; // Used for 32bit USB MIDI events + // the symbol fifo (to go out of uart) + queue symbol_fifo; + unsigned char symbol_fifo_arr[USB_MIDI_DEVICE_OUT_FIFO_SIZE * 4]; // Used for 32bit USB MIDI events - unsigned rxPT, txPT; - int midi_from_host_overflow = 0; + unsigned rxPT, txPT; + int midi_from_host_overflow = 0; - //configure_clock_rate(clk_midi, 100, 1); - init_queue(symbol_fifo, symbol_fifo_arr, USB_MIDI_DEVICE_OUT_FIFO_SIZE, 4); - init_queue(midi_to_host_fifo, midi_to_host_fifo_arr, 1, 4); + //configure_clock_rate(clk_midi, 100, 1); + init_queue(symbol_fifo, symbol_fifo_arr, USB_MIDI_DEVICE_OUT_FIFO_SIZE, 4); + init_queue(midi_to_host_fifo, midi_to_host_fifo_arr, 1, 4); - configure_out_port_no_ready(p_midi_out, clk_midi, 1); - configure_in_port(p_midi_in, clk_midi); + configure_out_port_no_ready(p_midi_out, clk_midi, 1); + configure_in_port(p_midi_in, clk_midi); - start_clock(clk_midi); - start_port(p_midi_out); - start_port(p_midi_in); + start_clock(clk_midi); + start_port(p_midi_out); + start_port(p_midi_in); - reset_midi_state(mips); + reset_midi_state(mips); - t :> txT; - t2 :> rxT; + t :> txT; + t2 :> rxT; #ifndef MIDI_LOOPBACK #ifdef IAP - port32A_unset(P32A_I2C_NOTMIDI); +#ifdef IO_EXPANSION + port32A_unset(P32A_I2C_NOTMIDI); #endif - p_midi_out <: 1; // Start with high bit. +#endif + p_midi_out <: 1; // Start with high bit. #ifdef IAP - port32A_set(P32A_I2C_NOTMIDI); +#ifdef IO_EXPANSION + port32A_set(P32A_I2C_NOTMIDI); +#endif #endif #endif #ifdef IAP - init_iAP(c_i2c); // uses timer for i2c initialisation pause.. + init_iAP(c_i2c); // uses timer for i2c initialisation pause.. #endif {