This is a part of the Kinetiszer project.

Dependencies:   FastPWM SoundEngine board mbed-src

Committer:
Clemo
Date:
Tue Oct 28 20:10:07 2014 +0000
Revision:
2:7a7657a79a13
Parent:
1:d6a4b42d6188
First publication (untested)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Clemo 0:fdec2a8ac3b2 1 #include "mbed.h"
Clemo 0:fdec2a8ac3b2 2 #include "FastPWM.h"
Clemo 0:fdec2a8ac3b2 3 #include "atmegatron.h"
Clemo 0:fdec2a8ac3b2 4
Clemo 0:fdec2a8ac3b2 5
Clemo 0:fdec2a8ac3b2 6 uint32_t sample_rate = 64000;
Clemo 0:fdec2a8ac3b2 7 FastPWM audio1(PTD1,1);
Clemo 0:fdec2a8ac3b2 8 FastPWM audio2(PTD3,1);
Clemo 0:fdec2a8ac3b2 9
Clemo 0:fdec2a8ac3b2 10 Ticker tick;
Clemo 1:d6a4b42d6188 11
Clemo 0:fdec2a8ac3b2 12 DigitalOut led_green(PTE24);
Clemo 1:d6a4b42d6188 13 DigitalOut led_red(PTB20);
Clemo 0:fdec2a8ac3b2 14
Clemo 0:fdec2a8ac3b2 15 DigitalIn encoder1_a(PTA0); // phase A
Clemo 0:fdec2a8ac3b2 16 DigitalIn encoder1_b(PTE27); // phase B
Clemo 0:fdec2a8ac3b2 17 DigitalIn encoder1_k(PTD2); // integrated pushbutton
Clemo 0:fdec2a8ac3b2 18
Clemo 0:fdec2a8ac3b2 19 DigitalIn encoder2_a(PTC4); // phase A
Clemo 0:fdec2a8ac3b2 20 DigitalIn encoder2_b(PTE25); // phase B
Clemo 0:fdec2a8ac3b2 21 DigitalIn encoder2_k(PTD0); // integrated pushbutton
Clemo 0:fdec2a8ac3b2 22
Clemo 0:fdec2a8ac3b2 23 AnalogIn pot2(A5);
Clemo 0:fdec2a8ac3b2 24 AnalogIn pot3(A4);
Clemo 0:fdec2a8ac3b2 25 AnalogIn pot4(A3);
Clemo 0:fdec2a8ac3b2 26 AnalogIn pot5(A2);
Clemo 0:fdec2a8ac3b2 27 AnalogIn pot6(A1);
Clemo 0:fdec2a8ac3b2 28 AnalogIn pot7(A0);
Clemo 0:fdec2a8ac3b2 29
Clemo 0:fdec2a8ac3b2 30
Clemo 0:fdec2a8ac3b2 31 int main(void)
Clemo 0:fdec2a8ac3b2 32 {
Clemo 0:fdec2a8ac3b2 33 // Systick at 1 kHz.
Clemo 0:fdec2a8ac3b2 34 tick.attach_us(&SysTick_Handler,1000);
Clemo 0:fdec2a8ac3b2 35
Clemo 0:fdec2a8ac3b2 36 // Setup PWM.
Clemo 0:fdec2a8ac3b2 37 audio1.period_us(1000000.0/sample_rate);
Clemo 0:fdec2a8ac3b2 38 audio1.pulsewidth_us(0.5*1000000.0/sample_rate); // 50%
Clemo 0:fdec2a8ac3b2 39 audio2.period_us(1000000.0/sample_rate);
Clemo 0:fdec2a8ac3b2 40 audio2.pulsewidth_us(0.5*1000000.0/sample_rate); // 50%
Clemo 0:fdec2a8ac3b2 41
Clemo 0:fdec2a8ac3b2 42 // Setup rotary encoders.
Clemo 0:fdec2a8ac3b2 43 encoder1_a.mode(PullUp);
Clemo 0:fdec2a8ac3b2 44 encoder1_b.mode(PullUp);
Clemo 0:fdec2a8ac3b2 45 encoder1_k.mode(PullUp);
Clemo 0:fdec2a8ac3b2 46 encoder2_a.mode(PullUp);
Clemo 0:fdec2a8ac3b2 47 encoder2_b.mode(PullUp);
Clemo 0:fdec2a8ac3b2 48 encoder2_k.mode(PullUp);
Clemo 0:fdec2a8ac3b2 49
Clemo 0:fdec2a8ac3b2 50 // Initialize random number generator.
Clemo 0:fdec2a8ac3b2 51 randomSeed(0); // TODO: find a better seed.
Clemo 0:fdec2a8ac3b2 52
Clemo 0:fdec2a8ac3b2 53 // Sound engin setup.
Clemo 0:fdec2a8ac3b2 54 setup();
Clemo 0:fdec2a8ac3b2 55
Clemo 0:fdec2a8ac3b2 56 while (true)
Clemo 0:fdec2a8ac3b2 57 {
Clemo 0:fdec2a8ac3b2 58 loop_priority_low();
Clemo 0:fdec2a8ac3b2 59 // The idea is to call loop_priority_high from the systick ISR to
Clemo 0:fdec2a8ac3b2 60 // fix the sample calculation rate at a known value (1 kHz).
Clemo 0:fdec2a8ac3b2 61 //loop_priority_high();
Clemo 0:fdec2a8ac3b2 62 }
Clemo 0:fdec2a8ac3b2 63 }