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

Dependencies:   Sequence mbed-rtos mbed Amp Envelope FilterController

Fork of SpiSequencerSender_Test by Ryo Od

Committer:
ryood
Date:
Sun Jun 12 03:02:22 2016 +0000
Revision:
5:4abac408b827
Parent:
4:dd1582f2e5df
Child:
6:fc10eac60b91
waveShape?pulseWidth?????????

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 #include "Sequence.h"
ryood 0:21e39bc75e31 4 #include "SequenceSender.h"
ryood 0:21e39bc75e31 5
ryood 0:21e39bc75e31 6 #define SEQUENCE_N 16
ryood 0:21e39bc75e31 7
ryood 4:dd1582f2e5df 8 #define WAVESHAPE_SQUARE 0
ryood 4:dd1582f2e5df 9 #define WAVESHAPE_SAW 1
ryood 4:dd1582f2e5df 10 #define WAVESHAPE_N 2
ryood 4:dd1582f2e5df 11
ryood 2:1cad4b1dc3b7 12 #define SPI_RATE (8000000)
ryood 0:21e39bc75e31 13 #define SPI_WAIT (wait_us(1))
ryood 0:21e39bc75e31 14 #define DCO_PACKET_HEADER (0x55)
ryood 0:21e39bc75e31 15
ryood 2:1cad4b1dc3b7 16 #define DBG_TRACE 0
ryood 0:21e39bc75e31 17
ryood 0:21e39bc75e31 18 class SpiSequenceSender : public SequenceSender {
ryood 0:21e39bc75e31 19 public:
ryood 0:21e39bc75e31 20 SpiSequenceSender(SPI* _pSpim, PinName _DcoCS, Sequence* _sequences, int _sequenceNum, int _samplingRate=5, int _bpm=120) :
ryood 0:21e39bc75e31 21 SequenceSender(_sequences, _sequenceNum, _samplingRate, _bpm),
ryood 5:4abac408b827 22 pSpiM(_pSpim), DcoCS(_DcoCS), waveShape(WAVESHAPE_SQUARE), pulseWidth(127) {}
ryood 0:21e39bc75e31 23
ryood 0:21e39bc75e31 24 virtual void outDco(uint32_t frequency)
ryood 0:21e39bc75e31 25 {
ryood 0:21e39bc75e31 26 uint16_t frequency16 = frequency >> 16;
ryood 4:dd1582f2e5df 27
ryood 4:dd1582f2e5df 28 #if(DBG_TRACE)
ryood 0:21e39bc75e31 29 printf("%d\t", frequency16);
ryood 0:21e39bc75e31 30 printf("%d\t", DCO_PACKET_HEADER);
ryood 0:21e39bc75e31 31 printf("%d\t", DCO_WAVE_FORM);
ryood 0:21e39bc75e31 32 printf("%d\t", DCO_PULSE_WIDTH);
ryood 0:21e39bc75e31 33 printf("%d\t", frequency16 >> 8);
ryood 0:21e39bc75e31 34 printf("%d\t", frequency16 & 0xff);
ryood 0:21e39bc75e31 35 printf("\r\n");
ryood 4:dd1582f2e5df 36 #endif
ryood 4:dd1582f2e5df 37
ryood 0:21e39bc75e31 38 DcoCS = 0;
ryood 0:21e39bc75e31 39 pSpiM->write(DCO_PACKET_HEADER);
ryood 5:4abac408b827 40 pSpiM->write(waveShape);
ryood 5:4abac408b827 41 pSpiM->write(pulseWidth);
ryood 0:21e39bc75e31 42 pSpiM->write(frequency16 >> 8);
ryood 0:21e39bc75e31 43 pSpiM->write(frequency16 & 0xff);
ryood 0:21e39bc75e31 44 SPI_WAIT;
ryood 0:21e39bc75e31 45 DcoCS = 1;
ryood 0:21e39bc75e31 46 }
ryood 5:4abac408b827 47
ryood 5:4abac408b827 48 void setWaveShape(uint8_t _waveShape) {
ryood 5:4abac408b827 49 if (_waveShape < WAVESHAPE_N) {
ryood 5:4abac408b827 50 waveShape = _waveShape;
ryood 5:4abac408b827 51 }
ryood 5:4abac408b827 52 }
ryood 5:4abac408b827 53
ryood 5:4abac408b827 54 uint8_t getWaveShape() {
ryood 5:4abac408b827 55 return waveShape;
ryood 5:4abac408b827 56 }
ryood 5:4abac408b827 57
ryood 5:4abac408b827 58 void setPulseWidth(uint8_t _pulseWidth) {
ryood 5:4abac408b827 59 pulseWidth = _pulseWidth;
ryood 5:4abac408b827 60 }
ryood 5:4abac408b827 61
ryood 5:4abac408b827 62 uint8_t getPulseWidth() {
ryood 5:4abac408b827 63 return pulseWidth;
ryood 5:4abac408b827 64 }
ryood 0:21e39bc75e31 65
ryood 0:21e39bc75e31 66 private:
ryood 0:21e39bc75e31 67 SPI* pSpiM;
ryood 0:21e39bc75e31 68 DigitalOut DcoCS;
ryood 5:4abac408b827 69 uint8_t waveShape;
ryood 5:4abac408b827 70 uint8_t pulseWidth;
ryood 0:21e39bc75e31 71 };
ryood 0:21e39bc75e31 72
ryood 0:21e39bc75e31 73 SPI spiMaster(SPI_MOSI, SPI_MISO, SPI_SCK);
ryood 0:21e39bc75e31 74
ryood 0:21e39bc75e31 75 Sequence sequence[SEQUENCE_N];
ryood 4:dd1582f2e5df 76 SpiSequenceSender sequenceSender(&spiMaster, D10, sequence, SEQUENCE_N, 5);
ryood 0:21e39bc75e31 77
ryood 0:21e39bc75e31 78 int main()
ryood 0:21e39bc75e31 79 {
ryood 0:21e39bc75e31 80 spiMaster.format(8, 0);
ryood 0:21e39bc75e31 81 spiMaster.frequency(SPI_RATE);
ryood 0:21e39bc75e31 82
ryood 0:21e39bc75e31 83 // Test SequencerSender Run
ryood 0:21e39bc75e31 84 //
ryood 4:dd1582f2e5df 85 sequenceSender.setBpm(120);
ryood 0:21e39bc75e31 86 for (int i = 0; i < SEQUENCE_N; i++) {
ryood 0:21e39bc75e31 87 Sequence& seq = sequenceSender.getSequences()[i];
ryood 5:4abac408b827 88 seq.setPitch(0);
ryood 4:dd1582f2e5df 89 seq.setOctave(-1);
ryood 0:21e39bc75e31 90 seq.tie = true;
ryood 0:21e39bc75e31 91 }
ryood 0:21e39bc75e31 92
ryood 5:4abac408b827 93 sequence[3].setOctave(2);
ryood 5:4abac408b827 94 sequence[7].setOctave(1);
ryood 5:4abac408b827 95 sequence[11].setOctave(0);
ryood 5:4abac408b827 96 sequence[15].setOctave(1);
ryood 0:21e39bc75e31 97
ryood 0:21e39bc75e31 98 sequenceSender.run(0);
ryood 5:4abac408b827 99
ryood 5:4abac408b827 100 for (;;) {
ryood 5:4abac408b827 101 sequenceSender.setPulseWidth(sequenceSender.getPulseWidth() + 4);
ryood 5:4abac408b827 102 Thread::wait(100);
ryood 5:4abac408b827 103 sequenceSender.setWaveShape(WAVESHAPE_SAW);
ryood 5:4abac408b827 104 Thread::wait(100);
ryood 5:4abac408b827 105 sequenceSender.setWaveShape(WAVESHAPE_SQUARE);
ryood 5:4abac408b827 106 }
ryood 0:21e39bc75e31 107 }