mods
Dependencies: mbed MCP4822 USBDevice
main.cpp@9:c2a2c38ae084, 2021-02-25 (annotated)
- 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?
User | Revision | Line number | New 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 |