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

Dependencies:   Sequence mbed-rtos mbed Amp Envelope FilterController

Fork of SpiSequencerSender_Test by Ryo Od

Committer:
ryood
Date:
Sun Jun 26 10:19:32 2016 +0000
Revision:
11:42ba71e533ba
Parent:
10:fb04f9959fd9
Child:
12:c248781608af
printf???????

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 0:21e39bc75e31 8
ryood 6:fc10eac60b91 9 #define SEQUENCE_N (16)
ryood 6:fc10eac60b91 10 #define SPI_RATE (8000000)
ryood 0:21e39bc75e31 11
ryood 10:fb04f9959fd9 12 const int samplingPeriod = 1; // ms
ryood 10:fb04f9959fd9 13 const int bpm = 120;
ryood 10:fb04f9959fd9 14 const int envelopeLength = (60 * 1000 / (bpm * 4)) / samplingPeriod;
ryood 10:fb04f9959fd9 15
ryood 10:fb04f9959fd9 16 AnalogIn levelIn(A0);
ryood 10:fb04f9959fd9 17 AnalogIn durationIn(A1);
ryood 10:fb04f9959fd9 18 AnalogIn decayIn(A2);
ryood 10:fb04f9959fd9 19 AnalogIn sustainIn(A3);
ryood 10:fb04f9959fd9 20
ryood 0:21e39bc75e31 21 SPI spiMaster(SPI_MOSI, SPI_MISO, SPI_SCK);
ryood 0:21e39bc75e31 22
ryood 0:21e39bc75e31 23 Sequence sequence[SEQUENCE_N];
ryood 10:fb04f9959fd9 24 SpiSequenceSender sequenceSender(&spiMaster, D9, sequence, SEQUENCE_N, samplingPeriod, bpm);
ryood 6:fc10eac60b91 25
ryood 10:fb04f9959fd9 26 Envelope envelope(4095, envelopeLength, envelopeLength*3/4, envelopeLength/2, 2047);
ryood 9:3e4e08578e1c 27 EnvelopeGenerator envelopeGenerator;
ryood 9:3e4e08578e1c 28 SpiAmpController ampController(&spiMaster, D8, D7);
ryood 6:fc10eac60b91 29
ryood 10:fb04f9959fd9 30
ryood 6:fc10eac60b91 31 class TestClass {
ryood 6:fc10eac60b91 32 public:
ryood 6:fc10eac60b91 33 void callbackFunction(int ticks)
ryood 6:fc10eac60b91 34 {
ryood 7:ed01846ee0a5 35 if (ticks == 0) {
ryood 9:3e4e08578e1c 36 envelopeGenerator.init(envelope);
ryood 7:ed01846ee0a5 37 }
ryood 10:fb04f9959fd9 38 uint16_t level = envelopeGenerator.getModLevel();
ryood 11:42ba71e533ba 39 //printf("m,%d\r\n", level);
ryood 10:fb04f9959fd9 40 ampController.outDca(level);
ryood 10:fb04f9959fd9 41 envelopeGenerator.update();
ryood 10:fb04f9959fd9 42 }
ryood 6:fc10eac60b91 43 } testClass;
ryood 0:21e39bc75e31 44
ryood 8:de409197ff95 45 void callbackFunction(int ticks)
ryood 8:de409197ff95 46 {
ryood 8:de409197ff95 47 if (ticks == 0) {
ryood 9:3e4e08578e1c 48 envelopeGenerator.init(envelope);
ryood 8:de409197ff95 49 }
ryood 9:3e4e08578e1c 50 uint16_t level = envelopeGenerator.getModLevel();
ryood 9:3e4e08578e1c 51 //printf("g,%d\r\n", level);
ryood 9:3e4e08578e1c 52 ampController.outDca(level);
ryood 9:3e4e08578e1c 53 envelopeGenerator.update();
ryood 8:de409197ff95 54 }
ryood 8:de409197ff95 55
ryood 0:21e39bc75e31 56 int main()
ryood 0:21e39bc75e31 57 {
ryood 0:21e39bc75e31 58 spiMaster.format(8, 0);
ryood 0:21e39bc75e31 59 spiMaster.frequency(SPI_RATE);
ryood 0:21e39bc75e31 60
ryood 0:21e39bc75e31 61 // Test SequencerSender Run
ryood 0:21e39bc75e31 62 //
ryood 10:fb04f9959fd9 63 sequenceSender.setBpm(bpm);
ryood 0:21e39bc75e31 64 for (int i = 0; i < SEQUENCE_N; i++) {
ryood 0:21e39bc75e31 65 Sequence& seq = sequenceSender.getSequences()[i];
ryood 6:fc10eac60b91 66 seq.setPitch(i);
ryood 4:dd1582f2e5df 67 seq.setOctave(-1);
ryood 0:21e39bc75e31 68 seq.tie = true;
ryood 0:21e39bc75e31 69 }
ryood 0:21e39bc75e31 70
ryood 5:4abac408b827 71 sequence[3].setOctave(2);
ryood 5:4abac408b827 72 sequence[7].setOctave(1);
ryood 5:4abac408b827 73 sequence[11].setOctave(0);
ryood 5:4abac408b827 74 sequence[15].setOctave(1);
ryood 6:fc10eac60b91 75
ryood 9:3e4e08578e1c 76 envelopeGenerator.init(envelope);
ryood 7:ed01846ee0a5 77
ryood 10:fb04f9959fd9 78 sequenceSender.attachUpdate(&testClass, &TestClass::callbackFunction);
ryood 10:fb04f9959fd9 79 //sequenceSender.attachUpdate(&callbackFunction);
ryood 0:21e39bc75e31 80 sequenceSender.run(0);
ryood 5:4abac408b827 81
ryood 5:4abac408b827 82 for (;;) {
ryood 10:fb04f9959fd9 83 /*
ryood 5:4abac408b827 84 sequenceSender.setPulseWidth(sequenceSender.getPulseWidth() + 4);
ryood 6:fc10eac60b91 85 Thread::wait(500);
ryood 6:fc10eac60b91 86 sequenceSender.setWaveShape(SpiSequenceSender::WAVESHAPE_SAW);
ryood 6:fc10eac60b91 87 Thread::wait(500);
ryood 6:fc10eac60b91 88 sequenceSender.setWaveShape(SpiSequenceSender::WAVESHAPE_SQUARE);
ryood 10:fb04f9959fd9 89 */
ryood 10:fb04f9959fd9 90 envelope.setLevel(levelIn * 4095);
ryood 10:fb04f9959fd9 91 envelope.setDuration(durationIn * envelopeLength);
ryood 10:fb04f9959fd9 92 envelope.setDecay(decayIn * envelopeLength);
ryood 10:fb04f9959fd9 93 envelope.setSustain(sustainIn * 4095);
ryood 5:4abac408b827 94 }
ryood 0:21e39bc75e31 95 }