Nucleo Sequencer of my Base Machine

Dependencies:   Amp AverageAnalogIn Envelope FilterController Sequence BaseMachineComon mbed-rtos mbed

Fork of SpiSequenceSender_Test by Ryo Od

Committer:
ryood
Date:
Thu Jun 09 14:30:13 2016 +0000
Revision:
4:dd1582f2e5df
Parent:
3:e5f26ae1bff3
Child:
5:4abac408b827
PSoC4 DCO?????????????

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