NucleoF401RE MIDI - 10ch A/D, 6ch D/A, 6ch Triggers Controller for LittleBitsSynth in [http://nagasm.org/ASL/mbed3/] "MIDI_test_03" circuit - http://nagasm.org/ASL/mbed3/fig1/circuit2.jpg
MIDI_sub3.h@0:f6a989e8125b, 2014-12-21 (annotated)
- Committer:
- nagasm
- Date:
- Sun Dec 21 23:41:13 2014 +0000
- Revision:
- 0:f6a989e8125b
NucleoF401RE MIDI - 10ch A/D, 6ch D/A, 6ch Triggers Controller; for LittleBitsSynth; in [http://nagasm.org/ASL/mbed3/]; "MIDI_test_03"; circuit - http://nagasm.org/ASL/mbed3/fig1/circuit2.jpg
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nagasm | 0:f6a989e8125b | 1 | unsigned char rxFIFO[256], txFIFO[256], adc_old[10], trigger_status; |
nagasm | 0:f6a989e8125b | 2 | unsigned char rx_top, rx_end, tx_top, tx_end, status, keyno, dcb; |
nagasm | 0:f6a989e8125b | 3 | int midi_message, adc_no; |
nagasm | 0:f6a989e8125b | 4 | |
nagasm | 0:f6a989e8125b | 5 | RawSerial MIDI(PA_2, PA_3); |
nagasm | 0:f6a989e8125b | 6 | DigitalOut myled(LED1); |
nagasm | 0:f6a989e8125b | 7 | PortOut DataBus(PortA, 0x1FE0); // PA_12 --- PA_5 |
nagasm | 0:f6a989e8125b | 8 | PortOut LatchPulse(PortB, 0x01F8); // PB_8 --- PB_3 |
nagasm | 0:f6a989e8125b | 9 | PortOut TriggerOut(PortB, 0xF000); // PB_15 --- PB_12 |
nagasm | 0:f6a989e8125b | 10 | AnalogIn analog_value1(PA_0); |
nagasm | 0:f6a989e8125b | 11 | AnalogIn analog_value2(PA_1); |
nagasm | 0:f6a989e8125b | 12 | AnalogIn analog_value3(PA_4); |
nagasm | 0:f6a989e8125b | 13 | AnalogIn analog_value4(PB_0); |
nagasm | 0:f6a989e8125b | 14 | AnalogIn analog_value5(PC_1); |
nagasm | 0:f6a989e8125b | 15 | AnalogIn analog_value6(PC_0); |
nagasm | 0:f6a989e8125b | 16 | AnalogIn analog_value7(PC_2); |
nagasm | 0:f6a989e8125b | 17 | AnalogIn analog_value8(PC_3); |
nagasm | 0:f6a989e8125b | 18 | AnalogIn analog_value9(PC_4); |
nagasm | 0:f6a989e8125b | 19 | AnalogIn analog_value10(PB_1); |
nagasm | 0:f6a989e8125b | 20 | |
nagasm | 0:f6a989e8125b | 21 | void Trigger_send(int address, int data){ |
nagasm | 0:f6a989e8125b | 22 | unsigned char mask; |
nagasm | 0:f6a989e8125b | 23 | mask = 0x01 << address; |
nagasm | 0:f6a989e8125b | 24 | trigger_status &= (~mask); |
nagasm | 0:f6a989e8125b | 25 | if(data == 0){ |
nagasm | 0:f6a989e8125b | 26 | trigger_status += mask; |
nagasm | 0:f6a989e8125b | 27 | } |
nagasm | 0:f6a989e8125b | 28 | TriggerOut.write((trigger_status & 0x0F) << 12); |
nagasm | 0:f6a989e8125b | 29 | return; |
nagasm | 0:f6a989e8125b | 30 | } |
nagasm | 0:f6a989e8125b | 31 | |
nagasm | 0:f6a989e8125b | 32 | unsigned char ADC_get(int num){ |
nagasm | 0:f6a989e8125b | 33 | unsigned short data = 0; |
nagasm | 0:f6a989e8125b | 34 | switch(num){ |
nagasm | 0:f6a989e8125b | 35 | case(0): |
nagasm | 0:f6a989e8125b | 36 | data = analog_value1.read_u16(); |
nagasm | 0:f6a989e8125b | 37 | break; |
nagasm | 0:f6a989e8125b | 38 | case(1): |
nagasm | 0:f6a989e8125b | 39 | data = analog_value2.read_u16(); |
nagasm | 0:f6a989e8125b | 40 | break; |
nagasm | 0:f6a989e8125b | 41 | case(2): |
nagasm | 0:f6a989e8125b | 42 | data = analog_value3.read_u16(); |
nagasm | 0:f6a989e8125b | 43 | break; |
nagasm | 0:f6a989e8125b | 44 | case(3): |
nagasm | 0:f6a989e8125b | 45 | data = analog_value4.read_u16(); |
nagasm | 0:f6a989e8125b | 46 | break; |
nagasm | 0:f6a989e8125b | 47 | case(4): |
nagasm | 0:f6a989e8125b | 48 | data = analog_value5.read_u16(); |
nagasm | 0:f6a989e8125b | 49 | break; |
nagasm | 0:f6a989e8125b | 50 | case(5): |
nagasm | 0:f6a989e8125b | 51 | data = analog_value6.read_u16(); |
nagasm | 0:f6a989e8125b | 52 | break; |
nagasm | 0:f6a989e8125b | 53 | case(6): |
nagasm | 0:f6a989e8125b | 54 | data = analog_value7.read_u16(); |
nagasm | 0:f6a989e8125b | 55 | break; |
nagasm | 0:f6a989e8125b | 56 | case(7): |
nagasm | 0:f6a989e8125b | 57 | data = analog_value8.read_u16(); |
nagasm | 0:f6a989e8125b | 58 | break; |
nagasm | 0:f6a989e8125b | 59 | case(8): |
nagasm | 0:f6a989e8125b | 60 | data = analog_value9.read_u16(); |
nagasm | 0:f6a989e8125b | 61 | break; |
nagasm | 0:f6a989e8125b | 62 | case(9): |
nagasm | 0:f6a989e8125b | 63 | data = analog_value10.read_u16(); |
nagasm | 0:f6a989e8125b | 64 | break; |
nagasm | 0:f6a989e8125b | 65 | } |
nagasm | 0:f6a989e8125b | 66 | return(data>>9); |
nagasm | 0:f6a989e8125b | 67 | } |
nagasm | 0:f6a989e8125b | 68 | |
nagasm | 0:f6a989e8125b | 69 | void DAC_out(int address, int data){ |
nagasm | 0:f6a989e8125b | 70 | DataBus.write(data<<5); |
nagasm | 0:f6a989e8125b | 71 | switch(address){ |
nagasm | 0:f6a989e8125b | 72 | case(0): |
nagasm | 0:f6a989e8125b | 73 | LatchPulse.write(0x01F0); |
nagasm | 0:f6a989e8125b | 74 | break; |
nagasm | 0:f6a989e8125b | 75 | case(1): |
nagasm | 0:f6a989e8125b | 76 | LatchPulse.write(0x01E8); |
nagasm | 0:f6a989e8125b | 77 | break; |
nagasm | 0:f6a989e8125b | 78 | case(2): |
nagasm | 0:f6a989e8125b | 79 | LatchPulse.write(0x01D8); |
nagasm | 0:f6a989e8125b | 80 | break; |
nagasm | 0:f6a989e8125b | 81 | case(3): |
nagasm | 0:f6a989e8125b | 82 | LatchPulse.write(0x01B8); |
nagasm | 0:f6a989e8125b | 83 | break; |
nagasm | 0:f6a989e8125b | 84 | case(4): |
nagasm | 0:f6a989e8125b | 85 | LatchPulse.write(0x0178); |
nagasm | 0:f6a989e8125b | 86 | break; |
nagasm | 0:f6a989e8125b | 87 | case(5): |
nagasm | 0:f6a989e8125b | 88 | LatchPulse.write(0x00F8); |
nagasm | 0:f6a989e8125b | 89 | break; |
nagasm | 0:f6a989e8125b | 90 | default: |
nagasm | 0:f6a989e8125b | 91 | break; |
nagasm | 0:f6a989e8125b | 92 | } |
nagasm | 0:f6a989e8125b | 93 | LatchPulse.write(0x01F8); |
nagasm | 0:f6a989e8125b | 94 | return; |
nagasm | 0:f6a989e8125b | 95 | } |
nagasm | 0:f6a989e8125b | 96 | |
nagasm | 0:f6a989e8125b | 97 | int rx_fifo_check(void){ |
nagasm | 0:f6a989e8125b | 98 | unsigned char data; |
nagasm | 0:f6a989e8125b | 99 | if(rx_top != rx_end){ |
nagasm | 0:f6a989e8125b | 100 | data = rxFIFO[rx_end]; |
nagasm | 0:f6a989e8125b | 101 | ++rx_end &= 255; |
nagasm | 0:f6a989e8125b | 102 | if (data > 127){ |
nagasm | 0:f6a989e8125b | 103 | status = data; |
nagasm | 0:f6a989e8125b | 104 | dcb = 0; |
nagasm | 0:f6a989e8125b | 105 | return(0); |
nagasm | 0:f6a989e8125b | 106 | } |
nagasm | 0:f6a989e8125b | 107 | else if(status > 0xEF){ |
nagasm | 0:f6a989e8125b | 108 | return(0); |
nagasm | 0:f6a989e8125b | 109 | } |
nagasm | 0:f6a989e8125b | 110 | else if( (status > 0xBF) && (status < 0xE0) ){ |
nagasm | 0:f6a989e8125b | 111 | midi_message = (status<<16) + (data<<8); |
nagasm | 0:f6a989e8125b | 112 | dcb = 0; |
nagasm | 0:f6a989e8125b | 113 | return(1); |
nagasm | 0:f6a989e8125b | 114 | } |
nagasm | 0:f6a989e8125b | 115 | else if(dcb==0){ |
nagasm | 0:f6a989e8125b | 116 | keyno = data; |
nagasm | 0:f6a989e8125b | 117 | dcb++; |
nagasm | 0:f6a989e8125b | 118 | return(0); |
nagasm | 0:f6a989e8125b | 119 | } |
nagasm | 0:f6a989e8125b | 120 | else{ |
nagasm | 0:f6a989e8125b | 121 | midi_message = (status<<16) + (keyno<<8) + data; |
nagasm | 0:f6a989e8125b | 122 | dcb = 0; |
nagasm | 0:f6a989e8125b | 123 | return(1); |
nagasm | 0:f6a989e8125b | 124 | } |
nagasm | 0:f6a989e8125b | 125 | } |
nagasm | 0:f6a989e8125b | 126 | return(0); |
nagasm | 0:f6a989e8125b | 127 | } |
nagasm | 0:f6a989e8125b | 128 | |
nagasm | 0:f6a989e8125b | 129 | void rx_fifoset(void){ |
nagasm | 0:f6a989e8125b | 130 | rxFIFO[rx_top] = MIDI.getc(); |
nagasm | 0:f6a989e8125b | 131 | ++rx_top &= 255; |
nagasm | 0:f6a989e8125b | 132 | return; |
nagasm | 0:f6a989e8125b | 133 | } |
nagasm | 0:f6a989e8125b | 134 | |
nagasm | 0:f6a989e8125b | 135 | void tx_fifo_check(void){ |
nagasm | 0:f6a989e8125b | 136 | if(MIDI.writeable() == 1){ |
nagasm | 0:f6a989e8125b | 137 | if(tx_top != tx_end){ |
nagasm | 0:f6a989e8125b | 138 | MIDI.putc(txFIFO[tx_end]); |
nagasm | 0:f6a989e8125b | 139 | ++tx_end &= 255; |
nagasm | 0:f6a989e8125b | 140 | } |
nagasm | 0:f6a989e8125b | 141 | } |
nagasm | 0:f6a989e8125b | 142 | return; |
nagasm | 0:f6a989e8125b | 143 | } |
nagasm | 0:f6a989e8125b | 144 | |
nagasm | 0:f6a989e8125b | 145 | void tx_fifoset(unsigned char data){ |
nagasm | 0:f6a989e8125b | 146 | txFIFO[tx_top] = data; |
nagasm | 0:f6a989e8125b | 147 | ++tx_top &= 255; |
nagasm | 0:f6a989e8125b | 148 | return; |
nagasm | 0:f6a989e8125b | 149 | } |