Task 5.2.3 Solution

Committer:
noutram
Date:
Thu Jul 13 14:57:06 2017 +0000
Revision:
1:7e8900437bb6
Parent:
0:c616f46e44a5
updated for mbed-os 5.5

Who changed what in which revision?

UserRevisionLine numberNew contents of line
noutram 0:c616f46e44a5 1 #include "mbed.h"
noutram 0:c616f46e44a5 2
noutram 0:c616f46e44a5 3 #define Fs 1000
noutram 0:c616f46e44a5 4 #define T (1.0/Fs)
noutram 0:c616f46e44a5 5 #define PI 3.1415926541
noutram 0:c616f46e44a5 6
noutram 0:c616f46e44a5 7 PwmOut mypwm(PWM_OUT);
noutram 0:c616f46e44a5 8
noutram 0:c616f46e44a5 9 //This GPIO is used for Chip Select
noutram 0:c616f46e44a5 10 DigitalOut DAC_CS(D10);
noutram 0:c616f46e44a5 11
noutram 0:c616f46e44a5 12 //SPI Object
noutram 0:c616f46e44a5 13 SPI spi(D11, D12, D13);
noutram 0:c616f46e44a5 14
noutram 0:c616f46e44a5 15 //Ticker for setting the output sampling rate
noutram 0:c616f46e44a5 16 Ticker t;
noutram 0:c616f46e44a5 17
noutram 0:c616f46e44a5 18 //Discrete time
noutram 0:c616f46e44a5 19 unsigned int n=0;
noutram 0:c616f46e44a5 20
noutram 0:c616f46e44a5 21 //Frequency f
noutram 0:c616f46e44a5 22 double f = 10.0;
noutram 0:c616f46e44a5 23
noutram 0:c616f46e44a5 24 //Prototype for the ticker ISR
noutram 0:c616f46e44a5 25 void writeSample();
noutram 0:c616f46e44a5 26
noutram 0:c616f46e44a5 27 int main() {
noutram 0:c616f46e44a5 28
noutram 0:c616f46e44a5 29 //Set speed of the SPI interface
noutram 0:c616f46e44a5 30 spi.frequency(20000);
noutram 0:c616f46e44a5 31
noutram 0:c616f46e44a5 32 //16 bit words, mode 0 clock
noutram 0:c616f46e44a5 33 spi.format(16,0);
noutram 0:c616f46e44a5 34
noutram 0:c616f46e44a5 35 //Write at Fs Hz
noutram 0:c616f46e44a5 36 t.attach(writeSample, T);
noutram 0:c616f46e44a5 37
noutram 0:c616f46e44a5 38 while(1) {
noutram 0:c616f46e44a5 39 sleep();
noutram 0:c616f46e44a5 40 }
noutram 0:c616f46e44a5 41 }
noutram 0:c616f46e44a5 42
noutram 0:c616f46e44a5 43 //ISR for ticker
noutram 0:c616f46e44a5 44 void writeSample()
noutram 0:c616f46e44a5 45 {
noutram 0:c616f46e44a5 46 //Enable the selected slave device
noutram 0:c616f46e44a5 47 DAC_CS = 0;
noutram 0:c616f46e44a5 48
noutram 0:c616f46e44a5 49 //Write a header (top 4 bits) and value (bottom 12 bits)
noutram 0:c616f46e44a5 50 double y = cos(2.0*PI*n*f*T);
noutram 0:c616f46e44a5 51 unsigned int val = (unsigned int)(2048.0 * (y + 1.0));
noutram 0:c616f46e44a5 52 spi.write(0x7000 | val);
noutram 0:c616f46e44a5 53
noutram 0:c616f46e44a5 54 //Disable the selected slave device (and update the output)
noutram 0:c616f46e44a5 55 DAC_CS = 1;
noutram 0:c616f46e44a5 56
noutram 0:c616f46e44a5 57 n++;
noutram 0:c616f46e44a5 58 }