シーケンサーのデータをSPIで送るテスト。UART出力停止

Dependencies:   Sequence mbed-rtos mbed Amp Envelope FilterController

Fork of SpiSequencerSender_Test by Ryo Od

Committer:
ryood
Date:
Tue Aug 02 22:37:09 2016 +0000
Revision:
14:c173e03ee3ad
Parent:
13:b0f988a239df
???????????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryood 0:21e39bc75e31 1 #include "mbed.h"
ryood 5:4abac408b827 2 #include "rtos.h"
ryood 0:21e39bc75e31 3
ryood 6:fc10eac60b91 4 #define UART_TRACE (0)
ryood 6:fc10eac60b91 5 #include "SpiSequenceSender.h"
ryood 9:3e4e08578e1c 6 #include "EnvelopeGenerator.h"
ryood 9:3e4e08578e1c 7 #include "SpiAmpController.h"
ryood 12:c248781608af 8 #include "SpiFilterController.h"
ryood 0:21e39bc75e31 9
ryood 6:fc10eac60b91 10 #define SEQUENCE_N (16)
ryood 6:fc10eac60b91 11 #define SPI_RATE (8000000)
ryood 0:21e39bc75e31 12
ryood 14:c173e03ee3ad 13 const int samplingPeriod = 1; // ms
ryood 10:fb04f9959fd9 14 const int bpm = 120;
ryood 10:fb04f9959fd9 15 const int envelopeLength = (60 * 1000 / (bpm * 4)) / samplingPeriod;
ryood 14:c173e03ee3ad 16 const int waveShape = SpiSequenceSender::WAVESHAPE_SAW;
ryood 14:c173e03ee3ad 17 const int baseNoteNumber = 48;
ryood 14:c173e03ee3ad 18
ryood 14:c173e03ee3ad 19 // Initial Sequence
ryood 14:c173e03ee3ad 20 const int noteOn[SEQUENCE_N] = { 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0 };
ryood 14:c173e03ee3ad 21 const int octave[SEQUENCE_N] = {-1,-1,-1, 0, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 };
ryood 14:c173e03ee3ad 22 const int pitch[SEQUENCE_N] = { 9, 7, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 };
ryood 14:c173e03ee3ad 23 const int tie[SEQUENCE_N] = { 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0 };
ryood 10:fb04f9959fd9 24
ryood 13:b0f988a239df 25 //AnalogIn levelIn(A0);
ryood 13:b0f988a239df 26 AnalogIn durationIn(A2);
ryood 13:b0f988a239df 27 AnalogIn decayIn(A1);
ryood 13:b0f988a239df 28 AnalogIn sustainIn(A0);
ryood 13:b0f988a239df 29 AnalogIn cutoffIn(A3);
ryood 13:b0f988a239df 30 AnalogIn resonanceIn(A4);
ryood 10:fb04f9959fd9 31
ryood 0:21e39bc75e31 32 SPI spiMaster(SPI_MOSI, SPI_MISO, SPI_SCK);
ryood 0:21e39bc75e31 33
ryood 0:21e39bc75e31 34 Sequence sequence[SEQUENCE_N];
ryood 10:fb04f9959fd9 35 SpiSequenceSender sequenceSender(&spiMaster, D9, sequence, SEQUENCE_N, samplingPeriod, bpm);
ryood 6:fc10eac60b91 36
ryood 10:fb04f9959fd9 37 Envelope envelope(4095, envelopeLength, envelopeLength*3/4, envelopeLength/2, 2047);
ryood 9:3e4e08578e1c 38 EnvelopeGenerator envelopeGenerator;
ryood 9:3e4e08578e1c 39 SpiAmpController ampController(&spiMaster, D8, D7);
ryood 6:fc10eac60b91 40
ryood 12:c248781608af 41 SpiFilterController filterController(&spiMaster, D10);
ryood 0:21e39bc75e31 42
ryood 8:de409197ff95 43 void callbackFunction(int ticks)
ryood 8:de409197ff95 44 {
ryood 8:de409197ff95 45 if (ticks == 0) {
ryood 9:3e4e08578e1c 46 envelopeGenerator.init(envelope);
ryood 8:de409197ff95 47 }
ryood 14:c173e03ee3ad 48
ryood 14:c173e03ee3ad 49 if (sequenceSender.getSequences()[sequenceSender.getStep()].noteOn) {
ryood 14:c173e03ee3ad 50 uint16_t level = envelopeGenerator.getModLevel();
ryood 14:c173e03ee3ad 51 ampController.outDca(level);
ryood 14:c173e03ee3ad 52 } else {
ryood 14:c173e03ee3ad 53 ampController.outDca(0);
ryood 14:c173e03ee3ad 54 }
ryood 9:3e4e08578e1c 55 envelopeGenerator.update();
ryood 12:c248781608af 56
ryood 12:c248781608af 57 filterController.outDCF();
ryood 8:de409197ff95 58 }
ryood 8:de409197ff95 59
ryood 0:21e39bc75e31 60 int main()
ryood 0:21e39bc75e31 61 {
ryood 0:21e39bc75e31 62 spiMaster.format(8, 0);
ryood 0:21e39bc75e31 63 spiMaster.frequency(SPI_RATE);
ryood 0:21e39bc75e31 64
ryood 0:21e39bc75e31 65 // Test SequencerSender Run
ryood 0:21e39bc75e31 66 //
ryood 14:c173e03ee3ad 67 Sequence::baseNoteNumber = baseNoteNumber;
ryood 10:fb04f9959fd9 68 sequenceSender.setBpm(bpm);
ryood 14:c173e03ee3ad 69
ryood 0:21e39bc75e31 70 for (int i = 0; i < SEQUENCE_N; i++) {
ryood 0:21e39bc75e31 71 Sequence& seq = sequenceSender.getSequences()[i];
ryood 14:c173e03ee3ad 72 seq.setPitch(pitch[i]);
ryood 14:c173e03ee3ad 73 seq.setOctave(octave[i]);
ryood 14:c173e03ee3ad 74 seq.noteOn = noteOn[i];
ryood 14:c173e03ee3ad 75 seq.tie = tie[i];
ryood 0:21e39bc75e31 76 }
ryood 6:fc10eac60b91 77
ryood 9:3e4e08578e1c 78 envelopeGenerator.init(envelope);
ryood 12:c248781608af 79
ryood 12:c248781608af 80 sequenceSender.attachUpdate(&callbackFunction);
ryood 14:c173e03ee3ad 81 sequenceSender.setWaveShape(waveShape);
ryood 0:21e39bc75e31 82 sequenceSender.run(0);
ryood 5:4abac408b827 83
ryood 5:4abac408b827 84 for (;;) {
ryood 10:fb04f9959fd9 85 /*
ryood 5:4abac408b827 86 sequenceSender.setPulseWidth(sequenceSender.getPulseWidth() + 4);
ryood 6:fc10eac60b91 87 Thread::wait(500);
ryood 6:fc10eac60b91 88 sequenceSender.setWaveShape(SpiSequenceSender::WAVESHAPE_SAW);
ryood 6:fc10eac60b91 89 Thread::wait(500);
ryood 6:fc10eac60b91 90 sequenceSender.setWaveShape(SpiSequenceSender::WAVESHAPE_SQUARE);
ryood 10:fb04f9959fd9 91 */
ryood 13:b0f988a239df 92 //envelope.setLevel(levelIn * 4095);
ryood 13:b0f988a239df 93 envelope.setLevel(4095);
ryood 10:fb04f9959fd9 94 envelope.setDuration(durationIn * envelopeLength);
ryood 10:fb04f9959fd9 95 envelope.setDecay(decayIn * envelopeLength);
ryood 10:fb04f9959fd9 96 envelope.setSustain(sustainIn * 4095);
ryood 12:c248781608af 97
ryood 12:c248781608af 98 filterController.setCutoff(cutoffIn * 255);
ryood 12:c248781608af 99 filterController.setResonance(resonanceIn * 255);
ryood 12:c248781608af 100
ryood 14:c173e03ee3ad 101 #if(UART_TRACE)
ryood 12:c248781608af 102 printf("%d\t%d\t%d\t%d\t%d\t%d\r\n",
ryood 12:c248781608af 103 filterController.getCutoff(),
ryood 12:c248781608af 104 filterController.getResonance(),
ryood 12:c248781608af 105 envelope.getLevel(),
ryood 12:c248781608af 106 envelope.getDuration(),
ryood 12:c248781608af 107 envelope.getDecay(),
ryood 12:c248781608af 108 envelope.getSustain()
ryood 12:c248781608af 109 );
ryood 14:c173e03ee3ad 110 #endif
ryood 5:4abac408b827 111 }
ryood 0:21e39bc75e31 112 }