シーケンサーのデータをSPIで送るテスト

Dependencies:   Sequence mbed-rtos mbed

Committer:
ryood
Date:
Tue May 31 00:00:37 2016 +0000
Revision:
1:a9cbde6ba5a5
Parent:
0:21e39bc75e31
PSoC4?SPI Slave????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryood 0:21e39bc75e31 1 #include "mbed.h"
ryood 0:21e39bc75e31 2 #include "Sequence.h"
ryood 0:21e39bc75e31 3 #include "SequenceSender.h"
ryood 0:21e39bc75e31 4
ryood 0:21e39bc75e31 5 #define SEQUENCE_N 16
ryood 0:21e39bc75e31 6
ryood 1:a9cbde6ba5a5 7 #define SPI_RATE (1000000)
ryood 0:21e39bc75e31 8 #define SPI_WAIT (wait_us(1))
ryood 0:21e39bc75e31 9 #define DCO_PACKET_HEADER (0x55)
ryood 0:21e39bc75e31 10 #define DCO_WAVE_FORM (0x00)
ryood 0:21e39bc75e31 11 #define DCO_PULSE_WIDTH (0x80)
ryood 0:21e39bc75e31 12
ryood 1:a9cbde6ba5a5 13 #define DBG_TRACE 1
ryood 0:21e39bc75e31 14
ryood 0:21e39bc75e31 15 class SpiSequenceSender : public SequenceSender {
ryood 0:21e39bc75e31 16 public:
ryood 0:21e39bc75e31 17 SpiSequenceSender(SPI* _pSpim, PinName _DcoCS, Sequence* _sequences, int _sequenceNum, int _samplingRate=5, int _bpm=120) :
ryood 0:21e39bc75e31 18 SequenceSender(_sequences, _sequenceNum, _samplingRate, _bpm),
ryood 0:21e39bc75e31 19 pSpiM(_pSpim), DcoCS(_DcoCS) {}
ryood 0:21e39bc75e31 20
ryood 0:21e39bc75e31 21 virtual void outDco(uint32_t frequency)
ryood 0:21e39bc75e31 22 {
ryood 0:21e39bc75e31 23 uint16_t frequency16 = frequency >> 16;
ryood 0:21e39bc75e31 24 #if(DBG_TRACE)
ryood 0:21e39bc75e31 25 printf("%d\t", frequency16);
ryood 0:21e39bc75e31 26 printf("%d\t", DCO_PACKET_HEADER);
ryood 0:21e39bc75e31 27 printf("%d\t", DCO_WAVE_FORM);
ryood 0:21e39bc75e31 28 printf("%d\t", DCO_PULSE_WIDTH);
ryood 0:21e39bc75e31 29 printf("%d\t", frequency16 >> 8);
ryood 0:21e39bc75e31 30 printf("%d\t", frequency16 & 0xff);
ryood 0:21e39bc75e31 31 printf("\r\n");
ryood 0:21e39bc75e31 32 #endif
ryood 0:21e39bc75e31 33 DcoCS = 0;
ryood 0:21e39bc75e31 34 pSpiM->write(DCO_PACKET_HEADER);
ryood 0:21e39bc75e31 35 pSpiM->write(DCO_WAVE_FORM);
ryood 0:21e39bc75e31 36 pSpiM->write(DCO_PULSE_WIDTH);
ryood 0:21e39bc75e31 37 pSpiM->write(frequency16 >> 8);
ryood 0:21e39bc75e31 38 pSpiM->write(frequency16 & 0xff);
ryood 0:21e39bc75e31 39 SPI_WAIT;
ryood 0:21e39bc75e31 40 DcoCS = 1;
ryood 0:21e39bc75e31 41 }
ryood 0:21e39bc75e31 42
ryood 0:21e39bc75e31 43 private:
ryood 0:21e39bc75e31 44 SPI* pSpiM;
ryood 0:21e39bc75e31 45 DigitalOut DcoCS;
ryood 0:21e39bc75e31 46 };
ryood 0:21e39bc75e31 47
ryood 0:21e39bc75e31 48 SPI spiMaster(SPI_MOSI, SPI_MISO, SPI_SCK);
ryood 0:21e39bc75e31 49
ryood 0:21e39bc75e31 50 Sequence sequence[SEQUENCE_N];
ryood 0:21e39bc75e31 51 SpiSequenceSender sequenceSender(&spiMaster, D10, sequence, SEQUENCE_N, 100);
ryood 0:21e39bc75e31 52
ryood 0:21e39bc75e31 53 int main()
ryood 0:21e39bc75e31 54 {
ryood 0:21e39bc75e31 55 spiMaster.format(8, 0);
ryood 0:21e39bc75e31 56 spiMaster.frequency(SPI_RATE);
ryood 0:21e39bc75e31 57
ryood 0:21e39bc75e31 58 // Test SequencerSender Run
ryood 0:21e39bc75e31 59 //
ryood 0:21e39bc75e31 60 sequenceSender.setBpm(20);
ryood 0:21e39bc75e31 61 for (int i = 0; i < SEQUENCE_N; i++) {
ryood 0:21e39bc75e31 62 Sequence& seq = sequenceSender.getSequences()[i];
ryood 0:21e39bc75e31 63 seq.setPitch(0);
ryood 0:21e39bc75e31 64 seq.setOctave(0);
ryood 0:21e39bc75e31 65 seq.tie = true;
ryood 0:21e39bc75e31 66 }
ryood 0:21e39bc75e31 67
ryood 0:21e39bc75e31 68 sequence[3].setOctave(1);
ryood 0:21e39bc75e31 69 sequence[3].tie = false;
ryood 0:21e39bc75e31 70 sequence[7].setOctave(1);
ryood 0:21e39bc75e31 71 sequence[11].setOctave(1);
ryood 0:21e39bc75e31 72 sequence[11].tie = false;
ryood 0:21e39bc75e31 73 sequence[15].setOctave(1);
ryood 0:21e39bc75e31 74
ryood 0:21e39bc75e31 75 sequenceSender.run(0);
ryood 0:21e39bc75e31 76 }