Midi USB
Dependencies: MMA8451Q TSI USBDevice mbed
main.cpp@0:331077fb2797, 2015-06-24 (annotated)
- Committer:
- Erick7652
- Date:
- Wed Jun 24 21:36:29 2015 +0000
- Revision:
- 0:331077fb2797
frdm-kl25z Midi-USB
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Erick7652 | 0:331077fb2797 | 1 | #include "mbed.h" |
Erick7652 | 0:331077fb2797 | 2 | #include "USBMIDI.h" |
Erick7652 | 0:331077fb2797 | 3 | #include "MMA8451Q.h" |
Erick7652 | 0:331077fb2797 | 4 | #include "TSISensor.h" |
Erick7652 | 0:331077fb2797 | 5 | |
Erick7652 | 0:331077fb2797 | 6 | #define MMA8451_I2C_ADDRESS (0x1d<<1) |
Erick7652 | 0:331077fb2797 | 7 | |
Erick7652 | 0:331077fb2797 | 8 | USBMIDI midi; // notes 48 al 82 |
Erick7652 | 0:331077fb2797 | 9 | DigitalOut myled(LED1); |
Erick7652 | 0:331077fb2797 | 10 | |
Erick7652 | 0:331077fb2797 | 11 | |
Erick7652 | 0:331077fb2797 | 12 | void LLW_IRQHandler(void){ |
Erick7652 | 0:331077fb2797 | 13 | if (LLWU->F2 & LLWU_F2_WUF11_MASK) { |
Erick7652 | 0:331077fb2797 | 14 | LLWU->F2 |= LLWU_F2_WUF11_MASK; // write one to clear the flag |
Erick7652 | 0:331077fb2797 | 15 | } |
Erick7652 | 0:331077fb2797 | 16 | } |
Erick7652 | 0:331077fb2797 | 17 | |
Erick7652 | 0:331077fb2797 | 18 | void LLW_Init(void){ |
Erick7652 | 0:331077fb2797 | 19 | LLWU->F2 |= LLWU_F2_WUF11_MASK; |
Erick7652 | 0:331077fb2797 | 20 | LLWU->PE3 = 0x80; |
Erick7652 | 0:331077fb2797 | 21 | LLWU->ME = 0x01; |
Erick7652 | 0:331077fb2797 | 22 | } |
Erick7652 | 0:331077fb2797 | 23 | |
Erick7652 | 0:331077fb2797 | 24 | void Enter_VLLS0(void){ |
Erick7652 | 0:331077fb2797 | 25 | myled = 0; |
Erick7652 | 0:331077fb2797 | 26 | volatile unsigned int dummyread; |
Erick7652 | 0:331077fb2797 | 27 | int i; |
Erick7652 | 0:331077fb2797 | 28 | SMC->PMPROT = SMC_PMPROT_AVLLS_MASK; |
Erick7652 | 0:331077fb2797 | 29 | if ((SMC->PMSTAT & SMC_PMSTAT_PMSTAT_MASK)== 4){ |
Erick7652 | 0:331077fb2797 | 30 | SMC->PMCTRL &= ~SMC_PMCTRL_RUNM_MASK; // go back to RUN mode temporarily |
Erick7652 | 0:331077fb2797 | 31 | for (i=0;i<0xff;i++) |
Erick7652 | 0:331077fb2797 | 32 | { |
Erick7652 | 0:331077fb2797 | 33 | if ((SMC->PMSTAT & SMC_PMSTAT_PMSTAT_MASK)== 1) |
Erick7652 | 0:331077fb2797 | 34 | break; |
Erick7652 | 0:331077fb2797 | 35 | } |
Erick7652 | 0:331077fb2797 | 36 | } |
Erick7652 | 0:331077fb2797 | 37 | |
Erick7652 | 0:331077fb2797 | 38 | /* Set the STOPM field to 0b100 for VLLS0 mode */ |
Erick7652 | 0:331077fb2797 | 39 | SMC->PMCTRL &= ~SMC_PMCTRL_STOPM_MASK; |
Erick7652 | 0:331077fb2797 | 40 | SMC->PMCTRL |= SMC_PMCTRL_STOPM(0x4); |
Erick7652 | 0:331077fb2797 | 41 | /* set VLLSM = 00 * and PORPO = 1 */ |
Erick7652 | 0:331077fb2797 | 42 | SMC->STOPCTRL &= ~SMC_STOPCTRL_VLLSM_MASK; |
Erick7652 | 0:331077fb2797 | 43 | SMC->STOPCTRL = SMC_STOPCTRL_VLLSM(0) | SMC_STOPCTRL_PORPO_MASK; |
Erick7652 | 0:331077fb2797 | 44 | /*wait for write to complete to SMC before stopping core */ |
Erick7652 | 0:331077fb2797 | 45 | dummyread = SMC->STOPCTRL; |
Erick7652 | 0:331077fb2797 | 46 | dummyread++; |
Erick7652 | 0:331077fb2797 | 47 | |
Erick7652 | 0:331077fb2797 | 48 | /* Now execute the stop instruction to go into VLLS0 */ |
Erick7652 | 0:331077fb2797 | 49 | /* Set the SLEEPDEEP bit to enable deep sleep mode (STOP) */ |
Erick7652 | 0:331077fb2797 | 50 | //SCB->SCR |= SCB_SCR_SLEEPDEEP_MASK; |
Erick7652 | 0:331077fb2797 | 51 | SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; |
Erick7652 | 0:331077fb2797 | 52 | __wfi(); |
Erick7652 | 0:331077fb2797 | 53 | } |
Erick7652 | 0:331077fb2797 | 54 | |
Erick7652 | 0:331077fb2797 | 55 | int main() { |
Erick7652 | 0:331077fb2797 | 56 | |
Erick7652 | 0:331077fb2797 | 57 | float click =0; |
Erick7652 | 0:331077fb2797 | 58 | int16_t x = 0; |
Erick7652 | 0:331077fb2797 | 59 | int16_t z = 0; |
Erick7652 | 0:331077fb2797 | 60 | int16_t y = 0; |
Erick7652 | 0:331077fb2797 | 61 | TSISensor tsi; |
Erick7652 | 0:331077fb2797 | 62 | MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS); |
Erick7652 | 0:331077fb2797 | 63 | NVIC_EnableIRQ(LLW_IRQn); |
Erick7652 | 0:331077fb2797 | 64 | |
Erick7652 | 0:331077fb2797 | 65 | while (1) { |
Erick7652 | 0:331077fb2797 | 66 | |
Erick7652 | 0:331077fb2797 | 67 | x = -1*acc.getAccY(); |
Erick7652 | 0:331077fb2797 | 68 | y = 1*acc.getAccX(); |
Erick7652 | 0:331077fb2797 | 69 | z = 1*acc.getAccZ(); |
Erick7652 | 0:331077fb2797 | 70 | |
Erick7652 | 0:331077fb2797 | 71 | click=tsi.readPercentage(); |
Erick7652 | 0:331077fb2797 | 72 | |
Erick7652 | 0:331077fb2797 | 73 | if (y>0) Enter_VLLS0(); |
Erick7652 | 0:331077fb2797 | 74 | |
Erick7652 | 0:331077fb2797 | 75 | |
Erick7652 | 0:331077fb2797 | 76 | if (x>0){ |
Erick7652 | 0:331077fb2797 | 77 | if (click>0.70){ |
Erick7652 | 0:331077fb2797 | 78 | midi.write(MIDIMessage::NoteOn(63)); |
Erick7652 | 0:331077fb2797 | 79 | wait(0.25); |
Erick7652 | 0:331077fb2797 | 80 | midi.write(MIDIMessage::NoteOff(63)); |
Erick7652 | 0:331077fb2797 | 81 | wait(0.5); |
Erick7652 | 0:331077fb2797 | 82 | } |
Erick7652 | 0:331077fb2797 | 83 | |
Erick7652 | 0:331077fb2797 | 84 | if((click<0.70)&&(click>0.30)){ |
Erick7652 | 0:331077fb2797 | 85 | midi.write(MIDIMessage::NoteOn(68)); |
Erick7652 | 0:331077fb2797 | 86 | wait(0.25); |
Erick7652 | 0:331077fb2797 | 87 | midi.write(MIDIMessage::NoteOff(68)); |
Erick7652 | 0:331077fb2797 | 88 | wait(0.5); |
Erick7652 | 0:331077fb2797 | 89 | |
Erick7652 | 0:331077fb2797 | 90 | } |
Erick7652 | 0:331077fb2797 | 91 | |
Erick7652 | 0:331077fb2797 | 92 | if((click<0.30)&&(click>0)){ |
Erick7652 | 0:331077fb2797 | 93 | midi.write(MIDIMessage::NoteOn(73)); |
Erick7652 | 0:331077fb2797 | 94 | wait(0.25); |
Erick7652 | 0:331077fb2797 | 95 | midi.write(MIDIMessage::NoteOff(73)); |
Erick7652 | 0:331077fb2797 | 96 | wait(0.5); |
Erick7652 | 0:331077fb2797 | 97 | } |
Erick7652 | 0:331077fb2797 | 98 | |
Erick7652 | 0:331077fb2797 | 99 | } |
Erick7652 | 0:331077fb2797 | 100 | wait(0.0001); |
Erick7652 | 0:331077fb2797 | 101 | |
Erick7652 | 0:331077fb2797 | 102 | |
Erick7652 | 0:331077fb2797 | 103 | } |
Erick7652 | 0:331077fb2797 | 104 | |
Erick7652 | 0:331077fb2797 | 105 | } |