AD9832 DDS Sinewave (Based on MLabo's AD9834 DDS Sinewave)

Dependencies:   mbed

Committer:
mio
Date:
Mon May 28 01:07:55 2012 +0000
Revision:
2:e12ef0540b3c
Parent:
1:323280ad1468
*FSYNC->FSYN for avoid symbol error when Exported
*library changed from mbed to export

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mio 0:df9eb1db9177 1 /*AD9834 DDS Test 2011/07/14 MLabo*/
mio 0:df9eb1db9177 2 /*AD9832 DDS Test based on 2011/07/14 MLabo, by Sakura,Fuyuno */
mio 0:df9eb1db9177 3 #include "mbed.h"
mio 0:df9eb1db9177 4
mio 0:df9eb1db9177 5 #define XTAL_FREQ ((double)16160000.0)
mio 0:df9eb1db9177 6
mio 2:e12ef0540b3c 7 DigitalOut FSYN(p8);
mio 0:df9eb1db9177 8 DigitalOut SCLK(p7);
mio 0:df9eb1db9177 9 DigitalOut SDATA(p5);
mio 0:df9eb1db9177 10 Serial pc(USBTX,USBRX);
mio 0:df9eb1db9177 11
mio 0:df9eb1db9177 12 void serial_out(uint16_t data) {
mio 2:e12ef0540b3c 13 FSYN = 0;
mio 0:df9eb1db9177 14 data & 0x8000? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 15 data & 0x4000? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 16 data & 0x2000? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 17 data & 0x1000? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 18 data & 0x0800? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 19 data & 0x0400? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 20 data & 0x0200? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 21 data & 0x0100? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 22 data & 0x0080? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 23 data & 0x0040? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 24 data & 0x0020? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 25 data & 0x0010? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 26 data & 0x0008? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 27 data & 0x0004? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 28 data & 0x0002? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 29 data & 0x0001? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 2:e12ef0540b3c 30 FSYN = 1;
mio 0:df9eb1db9177 31 }
mio 0:df9eb1db9177 32
mio 0:df9eb1db9177 33 typedef union {
mio 2:e12ef0540b3c 34 uint32_t UI;
mio 2:e12ef0540b3c 35 uint8_t B[4];
mio 0:df9eb1db9177 36 } FREQDATA ;
mio 0:df9eb1db9177 37
mio 0:df9eb1db9177 38 void AD9832_Init(void) {
mio 0:df9eb1db9177 39 FREQDATA FreqReg ;
mio 0:df9eb1db9177 40 FreqReg.UI = 0 ;
mio 2:e12ef0540b3c 41 serial_out(0xF800);
mio 2:e12ef0540b3c 42 serial_out(0x3300 + FreqReg.B[3]);
mio 2:e12ef0540b3c 43 serial_out(0x2200 + FreqReg.B[2]);
mio 2:e12ef0540b3c 44 serial_out(0x3100 + FreqReg.B[1]);
mio 2:e12ef0540b3c 45 serial_out(0x2000 + FreqReg.B[0]);
mio 2:e12ef0540b3c 46 serial_out(0xC000);
mio 0:df9eb1db9177 47 }
mio 0:df9eb1db9177 48
mio 0:df9eb1db9177 49 void AD9832_SetFreq(double freq) {
mio 0:df9eb1db9177 50 FREQDATA FreqReg ;
mio 0:df9eb1db9177 51 FreqReg.UI = (uint32_t)(freq * (double)(0x100000000UL) / (XTAL_FREQ) + 0.5);
mio 2:e12ef0540b3c 52 serial_out(0x3300 + FreqReg.B[3]);
mio 2:e12ef0540b3c 53 serial_out(0x2200 + FreqReg.B[2]);
mio 2:e12ef0540b3c 54 serial_out(0x3100 + FreqReg.B[1]);
mio 2:e12ef0540b3c 55 serial_out(0x2000 + FreqReg.B[0]);
mio 0:df9eb1db9177 56 }
mio 0:df9eb1db9177 57
mio 0:df9eb1db9177 58 int main() {
mio 0:df9eb1db9177 59 double freq ;
mio 0:df9eb1db9177 60 char buf[256] ;
mio 0:df9eb1db9177 61 int i,ptr ;
mio 0:df9eb1db9177 62
mio 0:df9eb1db9177 63 pc.baud(38400);
mio 0:df9eb1db9177 64 SCLK = 1;
mio 0:df9eb1db9177 65 SDATA = 0;
mio 2:e12ef0540b3c 66 FSYN = 1;
mio 0:df9eb1db9177 67 AD9832_Init();
mio 0:df9eb1db9177 68 AD9832_SetFreq(60.0) ;
mio 0:df9eb1db9177 69 while(1) {
mio 0:df9eb1db9177 70 pc.printf("\r\nAD9832>");
mio 0:df9eb1db9177 71 ptr = 0;
mio 0:df9eb1db9177 72 while(1) {
mio 0:df9eb1db9177 73 if (pc.readable()) {
mio 0:df9eb1db9177 74 i = pc.getc() ;
mio 0:df9eb1db9177 75 if (i == 0x0D) {
mio 0:df9eb1db9177 76 buf[ptr] = '\0' ;
mio 0:df9eb1db9177 77 break ;
mio 0:df9eb1db9177 78 }
mio 0:df9eb1db9177 79 pc.putc(i) ;
mio 0:df9eb1db9177 80 buf[ptr++] = i ;
mio 0:df9eb1db9177 81 }
mio 0:df9eb1db9177 82 }
mio 0:df9eb1db9177 83 freq = atof(buf) ;
mio 0:df9eb1db9177 84 pc.printf("\r\nFreq SET:%g",freq);
mio 0:df9eb1db9177 85 AD9832_SetFreq(freq) ;
mio 0:df9eb1db9177 86 }
mio 0:df9eb1db9177 87 }