Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
MIDI_sub3.h
00001 unsigned char rxFIFO[256], txFIFO[256], adc_old[10], trigger_status; 00002 unsigned char rx_top, rx_end, tx_top, tx_end, status, keyno, dcb; 00003 int midi_message, adc_no; 00004 00005 RawSerial MIDI(PA_2, PA_3); 00006 DigitalOut myled(LED1); 00007 PortOut DataBus(PortA, 0x1FE0); // PA_12 --- PA_5 00008 PortOut LatchPulse(PortB, 0x01F8); // PB_8 --- PB_3 00009 PortOut TriggerOut(PortB, 0xF000); // PB_15 --- PB_12 00010 AnalogIn analog_value1(PA_0); 00011 AnalogIn analog_value2(PA_1); 00012 AnalogIn analog_value3(PA_4); 00013 AnalogIn analog_value4(PB_0); 00014 AnalogIn analog_value5(PC_1); 00015 AnalogIn analog_value6(PC_0); 00016 AnalogIn analog_value7(PC_2); 00017 AnalogIn analog_value8(PC_3); 00018 AnalogIn analog_value9(PC_4); 00019 AnalogIn analog_value10(PB_1); 00020 00021 void Trigger_send(int address, int data){ 00022 unsigned char mask; 00023 mask = 0x01 << address; 00024 trigger_status &= (~mask); 00025 if(data == 0){ 00026 trigger_status += mask; 00027 } 00028 TriggerOut.write((trigger_status & 0x0F) << 12); 00029 return; 00030 } 00031 00032 unsigned char ADC_get(int num){ 00033 unsigned short data = 0; 00034 switch(num){ 00035 case(0): 00036 data = analog_value1.read_u16(); 00037 break; 00038 case(1): 00039 data = analog_value2.read_u16(); 00040 break; 00041 case(2): 00042 data = analog_value3.read_u16(); 00043 break; 00044 case(3): 00045 data = analog_value4.read_u16(); 00046 break; 00047 case(4): 00048 data = analog_value5.read_u16(); 00049 break; 00050 case(5): 00051 data = analog_value6.read_u16(); 00052 break; 00053 case(6): 00054 data = analog_value7.read_u16(); 00055 break; 00056 case(7): 00057 data = analog_value8.read_u16(); 00058 break; 00059 case(8): 00060 data = analog_value9.read_u16(); 00061 break; 00062 case(9): 00063 data = analog_value10.read_u16(); 00064 break; 00065 } 00066 return(data>>9); 00067 } 00068 00069 void DAC_out(int address, int data){ 00070 DataBus.write(data<<5); 00071 switch(address){ 00072 case(0): 00073 LatchPulse.write(0x01F0); 00074 break; 00075 case(1): 00076 LatchPulse.write(0x01E8); 00077 break; 00078 case(2): 00079 LatchPulse.write(0x01D8); 00080 break; 00081 case(3): 00082 LatchPulse.write(0x01B8); 00083 break; 00084 case(4): 00085 LatchPulse.write(0x0178); 00086 break; 00087 case(5): 00088 LatchPulse.write(0x00F8); 00089 break; 00090 default: 00091 break; 00092 } 00093 LatchPulse.write(0x01F8); 00094 return; 00095 } 00096 00097 int rx_fifo_check(void){ 00098 unsigned char data; 00099 if(rx_top != rx_end){ 00100 data = rxFIFO[rx_end]; 00101 ++rx_end &= 255; 00102 if (data > 127){ 00103 status = data; 00104 dcb = 0; 00105 return(0); 00106 } 00107 else if(status > 0xEF){ 00108 return(0); 00109 } 00110 else if( (status > 0xBF) && (status < 0xE0) ){ 00111 midi_message = (status<<16) + (data<<8); 00112 dcb = 0; 00113 return(1); 00114 } 00115 else if(dcb==0){ 00116 keyno = data; 00117 dcb++; 00118 return(0); 00119 } 00120 else{ 00121 midi_message = (status<<16) + (keyno<<8) + data; 00122 dcb = 0; 00123 return(1); 00124 } 00125 } 00126 return(0); 00127 } 00128 00129 void rx_fifoset(void){ 00130 rxFIFO[rx_top] = MIDI.getc(); 00131 ++rx_top &= 255; 00132 return; 00133 } 00134 00135 void tx_fifo_check(void){ 00136 if(MIDI.writeable() == 1){ 00137 if(tx_top != tx_end){ 00138 MIDI.putc(txFIFO[tx_end]); 00139 ++tx_end &= 255; 00140 } 00141 } 00142 return; 00143 } 00144 00145 void tx_fifoset(unsigned char data){ 00146 txFIFO[tx_top] = data; 00147 ++tx_top &= 255; 00148 return; 00149 }
Generated on Sat Jul 23 2022 12:43:57 by
1.7.2