/* * midi.c * * Created: 12.06.2017 20:43:47 * Author: Jonas */ #include "midi.h" const uint16_t midi_code_frequency_table[] = {8,9,9,10,10,11,12,12,13,14,15,15,16,17,18,19,21,22,23,25,26,28,29,31,33,35,37,39,41,44,46,49,52,55,58,62,65,69,73,78,82,87,93,98,104,110,117,123,131,139,147,156,165,175,185,196,208,220,233,247,262,277,294,311,330,349,370,392,415,440,466,494,523,554,587,622,659,698,740,784,831,880,932,988,1047,1109,1175,1245,1319,1397,1480,1568,1661,1760,1865,1976,2093,2217,2349,2489,2637,2794,2960,3136,3322,3520,3729,3951,4186,4435,4699,4978,5274,5588,5920,6272}; ISR(USART_RXC_vect) { char data[3] = {0x00, 0x00, 0x00}; char command, /*channel,*/ note/*, velocity*/; UCSRB &= ~(1<> 4) & 0x0f; // Shift command into first 4 bits; note = data[1]; /*velocity = data2;*/ //PORTA = ~command; switch(command) { case 0x08: //Note off PORTA = 1; midi_update_note(note, 0); break; case 0x09: //Note on PORTA = 2; midi_update_note(note, 1); break; /* case 0x0A:break; //Note Fade Out case 0x0B:break; //Control Change case 0x0C:break; //Channel Fade Out case 0x0E:break; //Note Pitch change */ default:break; } } void midi_setup() { midi_active_channels = 0x00; DDRA = 0xff; PORTA = 0xff; //UART init unsigned int ubrr = (F_CPU / (16 * _MIDI_LINK_SPEED)) - 1; UBRRH = (unsigned char) (ubrr>>8) & 0xff; UBRRL = (unsigned char) ubrr & 0xff; UCSRB = (1<