DDS AD9832 and DPM AD5235 Control Test Program
main.cpp@0:fd709b6d9199, 2012-05-30 (annotated)
- Committer:
- mio
- Date:
- Wed May 30 01:41:50 2012 +0000
- Revision:
- 0:fd709b6d9199
DDS and DPM Control Test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mio | 0:fd709b6d9199 | 1 | /*AD9834 DDS Test 2011/07/14 MLabo*/ |
mio | 0:fd709b6d9199 | 2 | /*AD9832 DDS Test based on 2011/07/14 MLabo, by Fuyuno,Sakura */ |
mio | 0:fd709b6d9199 | 3 | /*AD5235 DPM Test based on AD9832 DDS Test by Fuyuno,Sakura */ |
mio | 0:fd709b6d9199 | 4 | /*AD5235 DPM and AD9832 DDS Test by Fuyuno,Sakura */ |
mio | 0:fd709b6d9199 | 5 | #include "mbed.h" |
mio | 0:fd709b6d9199 | 6 | |
mio | 0:fd709b6d9199 | 7 | // Signal pair(SCLK:SCLKD,SDATA:SDI) may share same pins.... |
mio | 0:fd709b6d9199 | 8 | // Usage : 38400bps 8N1 , '*' cmd is change control target |
mio | 0:fd709b6d9199 | 9 | |
mio | 0:fd709b6d9199 | 10 | // SPI for DPM |
mio | 0:fd709b6d9199 | 11 | DigitalOut CS(p8); |
mio | 0:fd709b6d9199 | 12 | DigitalOut SCLK(p7); |
mio | 0:fd709b6d9199 | 13 | DigitalOut SDI(p5); |
mio | 0:fd709b6d9199 | 14 | |
mio | 0:fd709b6d9199 | 15 | // SPI for DDS |
mio | 0:fd709b6d9199 | 16 | DigitalOut FSYN(p14); |
mio | 0:fd709b6d9199 | 17 | DigitalOut SCLKD(p13); |
mio | 0:fd709b6d9199 | 18 | DigitalOut SDATA(p11); |
mio | 0:fd709b6d9199 | 19 | |
mio | 0:fd709b6d9199 | 20 | Serial pc(USBTX,USBRX); |
mio | 0:fd709b6d9199 | 21 | |
mio | 0:fd709b6d9199 | 22 | #define XTAL_FREQ ((double)16160000.0) |
mio | 0:fd709b6d9199 | 23 | |
mio | 0:fd709b6d9199 | 24 | void serial_out(uint16_t data) { |
mio | 0:fd709b6d9199 | 25 | FSYN = 0; |
mio | 0:fd709b6d9199 | 26 | data & 0x8000? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1; |
mio | 0:fd709b6d9199 | 27 | data & 0x4000? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1; |
mio | 0:fd709b6d9199 | 28 | data & 0x2000? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1; |
mio | 0:fd709b6d9199 | 29 | data & 0x1000? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1; |
mio | 0:fd709b6d9199 | 30 | data & 0x0800? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1; |
mio | 0:fd709b6d9199 | 31 | data & 0x0400? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1; |
mio | 0:fd709b6d9199 | 32 | data & 0x0200? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1; |
mio | 0:fd709b6d9199 | 33 | data & 0x0100? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1; |
mio | 0:fd709b6d9199 | 34 | data & 0x0080? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1; |
mio | 0:fd709b6d9199 | 35 | data & 0x0040? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1; |
mio | 0:fd709b6d9199 | 36 | data & 0x0020? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1; |
mio | 0:fd709b6d9199 | 37 | data & 0x0010? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1; |
mio | 0:fd709b6d9199 | 38 | data & 0x0008? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1; |
mio | 0:fd709b6d9199 | 39 | data & 0x0004? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1; |
mio | 0:fd709b6d9199 | 40 | data & 0x0002? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1; |
mio | 0:fd709b6d9199 | 41 | data & 0x0001? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1; |
mio | 0:fd709b6d9199 | 42 | FSYN = 1; |
mio | 0:fd709b6d9199 | 43 | } |
mio | 0:fd709b6d9199 | 44 | |
mio | 0:fd709b6d9199 | 45 | typedef union { |
mio | 0:fd709b6d9199 | 46 | uint32_t UI; |
mio | 0:fd709b6d9199 | 47 | uint8_t B[4]; |
mio | 0:fd709b6d9199 | 48 | } FREQDATA ; |
mio | 0:fd709b6d9199 | 49 | |
mio | 0:fd709b6d9199 | 50 | void AD9832_Init(void) { |
mio | 0:fd709b6d9199 | 51 | FREQDATA FreqReg ; |
mio | 0:fd709b6d9199 | 52 | FreqReg.UI = 0 ; |
mio | 0:fd709b6d9199 | 53 | serial_out(0xF800); |
mio | 0:fd709b6d9199 | 54 | serial_out(0x3300 + FreqReg.B[3]); |
mio | 0:fd709b6d9199 | 55 | serial_out(0x2200 + FreqReg.B[2]); |
mio | 0:fd709b6d9199 | 56 | serial_out(0x3100 + FreqReg.B[1]); |
mio | 0:fd709b6d9199 | 57 | serial_out(0x2000 + FreqReg.B[0]); |
mio | 0:fd709b6d9199 | 58 | serial_out(0xC000); |
mio | 0:fd709b6d9199 | 59 | } |
mio | 0:fd709b6d9199 | 60 | |
mio | 0:fd709b6d9199 | 61 | void AD9832_SetFreq(double freq) { |
mio | 0:fd709b6d9199 | 62 | FREQDATA FreqReg ; |
mio | 0:fd709b6d9199 | 63 | FreqReg.UI = (uint32_t)(freq * (double)(0x100000000UL) / (XTAL_FREQ) + 0.5); |
mio | 0:fd709b6d9199 | 64 | serial_out(0x3300 + FreqReg.B[3]); |
mio | 0:fd709b6d9199 | 65 | serial_out(0x2200 + FreqReg.B[2]); |
mio | 0:fd709b6d9199 | 66 | serial_out(0x3100 + FreqReg.B[1]); |
mio | 0:fd709b6d9199 | 67 | serial_out(0x2000 + FreqReg.B[0]); |
mio | 0:fd709b6d9199 | 68 | } |
mio | 0:fd709b6d9199 | 69 | |
mio | 0:fd709b6d9199 | 70 | void serial_out24(uint32_t data) { |
mio | 0:fd709b6d9199 | 71 | CS = 0; |
mio | 0:fd709b6d9199 | 72 | data & 0x800000? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1; |
mio | 0:fd709b6d9199 | 73 | data & 0x400000? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1; |
mio | 0:fd709b6d9199 | 74 | data & 0x200000? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1; |
mio | 0:fd709b6d9199 | 75 | data & 0x100000? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1; |
mio | 0:fd709b6d9199 | 76 | data & 0x080000? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1; |
mio | 0:fd709b6d9199 | 77 | data & 0x040000? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1; |
mio | 0:fd709b6d9199 | 78 | data & 0x020000? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1; |
mio | 0:fd709b6d9199 | 79 | data & 0x010000? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1; |
mio | 0:fd709b6d9199 | 80 | data & 0x008000? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1; |
mio | 0:fd709b6d9199 | 81 | data & 0x004000? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1; |
mio | 0:fd709b6d9199 | 82 | data & 0x002000? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1; |
mio | 0:fd709b6d9199 | 83 | data & 0x001000? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1; |
mio | 0:fd709b6d9199 | 84 | data & 0x000800? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1; |
mio | 0:fd709b6d9199 | 85 | data & 0x000400? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1; |
mio | 0:fd709b6d9199 | 86 | data & 0x000200? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1; |
mio | 0:fd709b6d9199 | 87 | data & 0x000100? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1; |
mio | 0:fd709b6d9199 | 88 | data & 0x000080? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1; |
mio | 0:fd709b6d9199 | 89 | data & 0x000040? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1; |
mio | 0:fd709b6d9199 | 90 | data & 0x000020? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1; |
mio | 0:fd709b6d9199 | 91 | data & 0x000010? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1; |
mio | 0:fd709b6d9199 | 92 | data & 0x000008? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1; |
mio | 0:fd709b6d9199 | 93 | data & 0x000004? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1; |
mio | 0:fd709b6d9199 | 94 | data & 0x000002? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1; |
mio | 0:fd709b6d9199 | 95 | data & 0x000001? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1; |
mio | 0:fd709b6d9199 | 96 | CS = 1; |
mio | 0:fd709b6d9199 | 97 | } |
mio | 0:fd709b6d9199 | 98 | |
mio | 0:fd709b6d9199 | 99 | // Writes data X to the RDAC1 register, |
mio | 0:fd709b6d9199 | 100 | void AD5235_SET(int chan,int value) { |
mio | 0:fd709b6d9199 | 101 | uint32_t cmd ; |
mio | 0:fd709b6d9199 | 102 | cmd = 0xB00000 | ((chan == 1) ? 0x010000 : 0x000000) | (value & 0x03FF) ; |
mio | 0:fd709b6d9199 | 103 | serial_out24(cmd); |
mio | 0:fd709b6d9199 | 104 | } |
mio | 0:fd709b6d9199 | 105 | |
mio | 0:fd709b6d9199 | 106 | void AD5235_SAVE(int chan) { |
mio | 0:fd709b6d9199 | 107 | uint32_t cmd ; |
mio | 0:fd709b6d9199 | 108 | cmd = 0x200000 | ((chan == 1) ? 0x010000 : 0x000000) ; |
mio | 0:fd709b6d9199 | 109 | serial_out24(cmd); |
mio | 0:fd709b6d9199 | 110 | } |
mio | 0:fd709b6d9199 | 111 | |
mio | 0:fd709b6d9199 | 112 | int main() { |
mio | 0:fd709b6d9199 | 113 | double freq = 60.0; |
mio | 0:fd709b6d9199 | 114 | int val ; |
mio | 0:fd709b6d9199 | 115 | char buf[256] ; |
mio | 0:fd709b6d9199 | 116 | int i,ptr ; |
mio | 0:fd709b6d9199 | 117 | |
mio | 0:fd709b6d9199 | 118 | int chan = 1 ; |
mio | 0:fd709b6d9199 | 119 | |
mio | 0:fd709b6d9199 | 120 | pc.baud(38400); |
mio | 0:fd709b6d9199 | 121 | SCLK = 1; |
mio | 0:fd709b6d9199 | 122 | SDI = 0; |
mio | 0:fd709b6d9199 | 123 | CS = 1; |
mio | 0:fd709b6d9199 | 124 | |
mio | 0:fd709b6d9199 | 125 | SCLKD = 1; |
mio | 0:fd709b6d9199 | 126 | SDATA = 0; |
mio | 0:fd709b6d9199 | 127 | FSYN = 1; |
mio | 0:fd709b6d9199 | 128 | |
mio | 0:fd709b6d9199 | 129 | AD9832_Init(); |
mio | 0:fd709b6d9199 | 130 | AD9832_SetFreq(freq) ; |
mio | 0:fd709b6d9199 | 131 | while(1) { |
mio | 0:fd709b6d9199 | 132 | while (1) { |
mio | 0:fd709b6d9199 | 133 | pc.printf("\r\nAD5235>"); |
mio | 0:fd709b6d9199 | 134 | ptr = 0; |
mio | 0:fd709b6d9199 | 135 | while(1) { |
mio | 0:fd709b6d9199 | 136 | if (pc.readable()) { |
mio | 0:fd709b6d9199 | 137 | i = pc.getc() ; |
mio | 0:fd709b6d9199 | 138 | if (i == 0x0D) { |
mio | 0:fd709b6d9199 | 139 | buf[ptr] = '\0' ; |
mio | 0:fd709b6d9199 | 140 | break ; |
mio | 0:fd709b6d9199 | 141 | } |
mio | 0:fd709b6d9199 | 142 | pc.putc(i) ; |
mio | 0:fd709b6d9199 | 143 | buf[ptr++] = i ; |
mio | 0:fd709b6d9199 | 144 | } |
mio | 0:fd709b6d9199 | 145 | } |
mio | 0:fd709b6d9199 | 146 | if (buf[0] == '*') break ; |
mio | 0:fd709b6d9199 | 147 | val = atoi(buf) ; |
mio | 0:fd709b6d9199 | 148 | AD5235_SET(chan,val) ; |
mio | 0:fd709b6d9199 | 149 | //AD5235_SAVE(chan) ; |
mio | 0:fd709b6d9199 | 150 | pc.printf("\r\nRVAL SET to Chan %d to %04X",chan,val); |
mio | 0:fd709b6d9199 | 151 | } |
mio | 0:fd709b6d9199 | 152 | while(1) { |
mio | 0:fd709b6d9199 | 153 | pc.printf("\r\nAD9832>"); |
mio | 0:fd709b6d9199 | 154 | ptr = 0; |
mio | 0:fd709b6d9199 | 155 | while(1) { |
mio | 0:fd709b6d9199 | 156 | if (pc.readable()) { |
mio | 0:fd709b6d9199 | 157 | i = pc.getc() ; |
mio | 0:fd709b6d9199 | 158 | if (i == 0x0D) { |
mio | 0:fd709b6d9199 | 159 | buf[ptr] = '\0' ; |
mio | 0:fd709b6d9199 | 160 | break ; |
mio | 0:fd709b6d9199 | 161 | } |
mio | 0:fd709b6d9199 | 162 | pc.putc(i) ; |
mio | 0:fd709b6d9199 | 163 | buf[ptr++] = i ; |
mio | 0:fd709b6d9199 | 164 | } |
mio | 0:fd709b6d9199 | 165 | } |
mio | 0:fd709b6d9199 | 166 | if (buf[0] == '*') break ; |
mio | 0:fd709b6d9199 | 167 | freq = atof(buf) ; |
mio | 0:fd709b6d9199 | 168 | pc.printf("\r\nFreq SET:%g",freq); |
mio | 0:fd709b6d9199 | 169 | AD9832_SetFreq(freq) ; |
mio | 0:fd709b6d9199 | 170 | } |
mio | 0:fd709b6d9199 | 171 | } |
mio | 0:fd709b6d9199 | 172 | } |