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

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }