mods

Dependencies:   mbed MCP4822 USBDevice

Committer:
kanope_benny
Date:
Thu Feb 25 12:18:54 2021 +0000
Revision:
9:c2a2c38ae084
Parent:
8:c6ec6b9f6a55
init

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kanope_benny 9:c2a2c38ae084 1 #if 1
kanope_benny 8:c6ec6b9f6a55 2 #include "mbed.h"
kanope_benny 9:c2a2c38ae084 3 #include "USBMIDI.h"
kanope_benny 9:c2a2c38ae084 4 #include "MCP4822.h"
kanope_benny 8:c6ec6b9f6a55 5
kanope_benny 8:c6ec6b9f6a55 6
kanope_benny 8:c6ec6b9f6a55 7 void setup(void)
kanope_benny 8:c6ec6b9f6a55 8 {
kanope_benny 8:c6ec6b9f6a55 9 RCC_ClkInitTypeDef RCC_ClkInitStruct;
kanope_benny 8:c6ec6b9f6a55 10 RCC_OscInitTypeDef RCC_OscInitStruct;
kanope_benny 8:c6ec6b9f6a55 11
kanope_benny 8:c6ec6b9f6a55 12 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE;
kanope_benny 8:c6ec6b9f6a55 13 RCC_OscInitStruct.HSEState = RCC_HSE_ON;
kanope_benny 8:c6ec6b9f6a55 14
kanope_benny 8:c6ec6b9f6a55 15 RCC_OscInitStruct.LSIState = RCC_LSI_ON;
kanope_benny 8:c6ec6b9f6a55 16 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
kanope_benny 8:c6ec6b9f6a55 17 RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
kanope_benny 8:c6ec6b9f6a55 18
kanope_benny 8:c6ec6b9f6a55 19 RCC_OscInitStruct.PLL.PLLM = 25; // VCO input clock = 1 MHz (25 MHz / 25)
kanope_benny 8:c6ec6b9f6a55 20 RCC_OscInitStruct.PLL.PLLN = 192; // VCO output clock = 192 MHz (1 MHz * 192)
kanope_benny 8:c6ec6b9f6a55 21 RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; // PLLCLK = 96 MHz (192 MHz / 2)
kanope_benny 8:c6ec6b9f6a55 22 RCC_OscInitStruct.PLL.PLLQ = 4; // USB clock = 48 MHz (192 MHz / 4) --> Good for USB
kanope_benny 8:c6ec6b9f6a55 23
kanope_benny 8:c6ec6b9f6a55 24 HAL_RCC_OscConfig(&RCC_OscInitStruct);
kanope_benny 8:c6ec6b9f6a55 25
kanope_benny 8:c6ec6b9f6a55 26 RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1;
kanope_benny 8:c6ec6b9f6a55 27 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
kanope_benny 8:c6ec6b9f6a55 28 RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
kanope_benny 8:c6ec6b9f6a55 29 HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
kanope_benny 8:c6ec6b9f6a55 30
kanope_benny 8:c6ec6b9f6a55 31 SystemCoreClockUpdate();
kanope_benny 8:c6ec6b9f6a55 32 SystemCoreClock = 96000000;
kanope_benny 8:c6ec6b9f6a55 33
kanope_benny 8:c6ec6b9f6a55 34 //HAL_RCC_MCOConfig(RCC_MCO2, RCC_MCO2SOURCE_SYSCLK, RCC_MCODIV_1); // output SYSCLOCK to pin PC9 to monitor frequency
kanope_benny 8:c6ec6b9f6a55 35 }
kanope_benny 8:c6ec6b9f6a55 36
kanope_benny 9:c2a2c38ae084 37 DigitalOut myled( PC_13);
kanope_benny 9:c2a2c38ae084 38 DigitalOut gate_A( PB_2);
kanope_benny 9:c2a2c38ae084 39 DigitalOut gate_B( PB_10);
kanope_benny 9:c2a2c38ae084 40 SPI spi( PA_7, PA_6, PA_5);
kanope_benny 9:c2a2c38ae084 41 MCP4822 dac(spi, PB_1, PB_0 );
kanope_benny 9:c2a2c38ae084 42
kanope_benny 9:c2a2c38ae084 43 void show_message(MIDIMessage msg) {
kanope_benny 9:c2a2c38ae084 44 switch (msg.type()) {
kanope_benny 9:c2a2c38ae084 45 case MIDIMessage::NoteOffType:
kanope_benny 9:c2a2c38ae084 46 //TODO
kanope_benny 9:c2a2c38ae084 47 break;
kanope_benny 9:c2a2c38ae084 48 case MIDIMessage::NoteOnType:
kanope_benny 9:c2a2c38ae084 49 // TODO
kanope_benny 9:c2a2c38ae084 50 //cf = msg.key();
kanope_benny 9:c2a2c38ae084 51 //cf = msg.velocity();
kanope_benny 9:c2a2c38ae084 52
kanope_benny 9:c2a2c38ae084 53 break;
kanope_benny 9:c2a2c38ae084 54 case MIDIMessage::PolyphonicAftertouchType:
kanope_benny 9:c2a2c38ae084 55 // TODO code
kanope_benny 9:c2a2c38ae084 56 break;
kanope_benny 9:c2a2c38ae084 57 case MIDIMessage::ControlChangeType:
kanope_benny 9:c2a2c38ae084 58 // TODO code
kanope_benny 9:c2a2c38ae084 59 break;
kanope_benny 9:c2a2c38ae084 60 case MIDIMessage::AllNotesOffType:
kanope_benny 9:c2a2c38ae084 61 // TODO
kanope_benny 9:c2a2c38ae084 62 break;
kanope_benny 9:c2a2c38ae084 63 case MIDIMessage::ErrorType:
kanope_benny 9:c2a2c38ae084 64 // TODO code
kanope_benny 9:c2a2c38ae084 65 break;
kanope_benny 9:c2a2c38ae084 66 case MIDIMessage::ProgramChangeType:
kanope_benny 9:c2a2c38ae084 67 // TODO code
kanope_benny 9:c2a2c38ae084 68 break;
kanope_benny 9:c2a2c38ae084 69 case MIDIMessage::ChannelAftertouchType:
kanope_benny 9:c2a2c38ae084 70 // TODO code
kanope_benny 9:c2a2c38ae084 71 break;
kanope_benny 9:c2a2c38ae084 72 case MIDIMessage::PitchWheelType:
kanope_benny 9:c2a2c38ae084 73 // TODO code
kanope_benny 9:c2a2c38ae084 74 break;
kanope_benny 9:c2a2c38ae084 75 case MIDIMessage::SysExType:
kanope_benny 9:c2a2c38ae084 76 // TODO code
kanope_benny 9:c2a2c38ae084 77 break;
kanope_benny 9:c2a2c38ae084 78 default:
kanope_benny 9:c2a2c38ae084 79 // leds = 0;
kanope_benny 9:c2a2c38ae084 80 break;
kanope_benny 9:c2a2c38ae084 81 }
kanope_benny 9:c2a2c38ae084 82 }
kanope_benny 8:c6ec6b9f6a55 83
kanope_benny 8:c6ec6b9f6a55 84 int main() {
kanope_benny 8:c6ec6b9f6a55 85
kanope_benny 8:c6ec6b9f6a55 86 setup();
kanope_benny 8:c6ec6b9f6a55 87
kanope_benny 9:c2a2c38ae084 88 USBMIDI midi;
kanope_benny 9:c2a2c38ae084 89
kanope_benny 9:c2a2c38ae084 90
kanope_benny 9:c2a2c38ae084 91
kanope_benny 9:c2a2c38ae084 92 midi.attach(show_message);
kanope_benny 8:c6ec6b9f6a55 93
kanope_benny 8:c6ec6b9f6a55 94 while (1) {
kanope_benny 9:c2a2c38ae084 95 for(int i=48; i<83; i++) { // send some messages!
kanope_benny 9:c2a2c38ae084 96 midi.write(MIDIMessage::NoteOn(i));
kanope_benny 9:c2a2c38ae084 97 dac.a(0,1024);
kanope_benny 9:c2a2c38ae084 98 dac.b(0,1024);
kanope_benny 9:c2a2c38ae084 99 gate_A = 1 ;
kanope_benny 9:c2a2c38ae084 100 gate_B = 1 ;
kanope_benny 9:c2a2c38ae084 101
kanope_benny 9:c2a2c38ae084 102 wait(0.25);
kanope_benny 9:c2a2c38ae084 103 midi.write(MIDIMessage::NoteOff(i));
kanope_benny 9:c2a2c38ae084 104 gate_A = 0 ;
kanope_benny 9:c2a2c38ae084 105 gate_B = 0 ;
kanope_benny 9:c2a2c38ae084 106 dac.a(0,512);
kanope_benny 9:c2a2c38ae084 107 dac.b(0,512);
kanope_benny 9:c2a2c38ae084 108
kanope_benny 9:c2a2c38ae084 109 wait(0.5);
kanope_benny 9:c2a2c38ae084 110 myled = !myled; // LED
kanope_benny 9:c2a2c38ae084 111 }
kanope_benny 8:c6ec6b9f6a55 112 }
kanope_benny 9:c2a2c38ae084 113 }
kanope_benny 8:c6ec6b9f6a55 114 #endif
kanope_benny 9:c2a2c38ae084 115 #if 0
samux 3:7990c80e953c 116 #include "mbed.h"
samux 3:7990c80e953c 117 #include "USBMIDI.h"
samux 3:7990c80e953c 118
samux 3:7990c80e953c 119
kanope_benny 8:c6ec6b9f6a55 120 void setup(void)
kanope_benny 8:c6ec6b9f6a55 121 {
kanope_benny 8:c6ec6b9f6a55 122 RCC_ClkInitTypeDef RCC_ClkInitStruct;
kanope_benny 8:c6ec6b9f6a55 123 RCC_OscInitTypeDef RCC_OscInitStruct;
kanope_benny 8:c6ec6b9f6a55 124
kanope_benny 8:c6ec6b9f6a55 125 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE;
kanope_benny 8:c6ec6b9f6a55 126 RCC_OscInitStruct.HSEState = RCC_HSE_ON;
kanope_benny 8:c6ec6b9f6a55 127
kanope_benny 8:c6ec6b9f6a55 128 RCC_OscInitStruct.LSIState = RCC_LSI_ON;
kanope_benny 8:c6ec6b9f6a55 129 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
kanope_benny 8:c6ec6b9f6a55 130 RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
kanope_benny 8:c6ec6b9f6a55 131
kanope_benny 8:c6ec6b9f6a55 132 RCC_OscInitStruct.PLL.PLLM = 25; // VCO input clock = 1 MHz (25 MHz / 25)
kanope_benny 8:c6ec6b9f6a55 133 RCC_OscInitStruct.PLL.PLLN = 192; // VCO output clock = 192 MHz (1 MHz * 192)
kanope_benny 8:c6ec6b9f6a55 134 RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; // PLLCLK = 96 MHz (192 MHz / 2)
kanope_benny 8:c6ec6b9f6a55 135 RCC_OscInitStruct.PLL.PLLQ = 4; // USB clock = 48 MHz (192 MHz / 4) --> Good for USB
kanope_benny 8:c6ec6b9f6a55 136
kanope_benny 8:c6ec6b9f6a55 137 HAL_RCC_OscConfig(&RCC_OscInitStruct);
kanope_benny 8:c6ec6b9f6a55 138
kanope_benny 8:c6ec6b9f6a55 139 RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1;
kanope_benny 8:c6ec6b9f6a55 140 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
kanope_benny 8:c6ec6b9f6a55 141 RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
kanope_benny 8:c6ec6b9f6a55 142 HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
kanope_benny 8:c6ec6b9f6a55 143
kanope_benny 8:c6ec6b9f6a55 144 SystemCoreClockUpdate();
kanope_benny 8:c6ec6b9f6a55 145 SystemCoreClock = 96000000;
kanope_benny 8:c6ec6b9f6a55 146
kanope_benny 8:c6ec6b9f6a55 147 //HAL_RCC_MCOConfig(RCC_MCO2, RCC_MCO2SOURCE_SYSCLK, RCC_MCODIV_1); // output SYSCLOCK to pin PC9 to monitor frequency
kanope_benny 8:c6ec6b9f6a55 148 }
kanope_benny 8:c6ec6b9f6a55 149
kanope_benny 9:c2a2c38ae084 150 DigitalOut myled( PC_13);
kanope_benny 8:c6ec6b9f6a55 151
kanope_benny 8:c6ec6b9f6a55 152 int main() {
kanope_benny 8:c6ec6b9f6a55 153
kanope_benny 8:c6ec6b9f6a55 154 setup();
kanope_benny 8:c6ec6b9f6a55 155
kanope_benny 8:c6ec6b9f6a55 156 USBMIDI midi;
kanope_benny 8:c6ec6b9f6a55 157
kanope_benny 8:c6ec6b9f6a55 158
samux 3:7990c80e953c 159 while (1) {
samux 3:7990c80e953c 160 for(int i=48; i<83; i++) { // send some messages!
samux 3:7990c80e953c 161 midi.write(MIDIMessage::NoteOn(i));
samux 3:7990c80e953c 162 wait(0.25);
samux 3:7990c80e953c 163 midi.write(MIDIMessage::NoteOff(i));
samux 3:7990c80e953c 164 wait(0.5);
kanope_benny 8:c6ec6b9f6a55 165 myled = !myled; // LED
samux 3:7990c80e953c 166 }
samux 3:7990c80e953c 167 }
samux 3:7990c80e953c 168 }
kanope_benny 9:c2a2c38ae084 169 #endif
kanope_benny 9:c2a2c38ae084 170