AD9832 DDS Sinewave (Based on MLabo's AD9834 DDS Sinewave)
main.cpp@1:323280ad1468, 2012-05-28 (annotated)
- Committer:
- mio
- Date:
- Mon May 28 00:23:21 2012 +0000
- Revision:
- 1:323280ad1468
- Parent:
- 0:df9eb1db9177
- Child:
- 2:e12ef0540b3c
remove #include for TEXT LCD
Who changed what in which revision?
User | Revision | Line number | New 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 | 0:df9eb1db9177 | 7 | DigitalOut FSYNC(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 | 0:df9eb1db9177 | 13 | FSYNC = 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 | 0:df9eb1db9177 | 30 | FSYNC = 1; |
mio | 0:df9eb1db9177 | 31 | } |
mio | 0:df9eb1db9177 | 32 | |
mio | 0:df9eb1db9177 | 33 | typedef union { |
mio | 0:df9eb1db9177 | 34 | uint32_t UI; |
mio | 0:df9eb1db9177 | 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 | 0:df9eb1db9177 | 41 | serial_out(0xF800); |
mio | 0:df9eb1db9177 | 42 | serial_out(0x3300 + FreqReg.B[3]); |
mio | 0:df9eb1db9177 | 43 | serial_out(0x2200 + FreqReg.B[2]); |
mio | 0:df9eb1db9177 | 44 | serial_out(0x3100 + FreqReg.B[1]); |
mio | 0:df9eb1db9177 | 45 | serial_out(0x2000 + FreqReg.B[0]); |
mio | 0:df9eb1db9177 | 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 | 0:df9eb1db9177 | 52 | serial_out(0x3300 + FreqReg.B[3]); |
mio | 0:df9eb1db9177 | 53 | serial_out(0x2200 + FreqReg.B[2]); |
mio | 0:df9eb1db9177 | 54 | serial_out(0x3100 + FreqReg.B[1]); |
mio | 0:df9eb1db9177 | 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 | 0:df9eb1db9177 | 66 | FSYNC = 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 | } |