Yoichi Nagashima / Mbed 2 deprecated NucleoF401RE_LittleBitsSynth_controller

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers MIDI_sub3.h Source File

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 }