|
|
@@ -2,68 +2,62 @@ |
|
|
|
#include "adc.h" |
|
|
|
#include "dac.h" |
|
|
|
#include "uart.h" |
|
|
|
#include "timer.h" |
|
|
|
#include <stdio.h> |
|
|
|
#include <math.h> |
|
|
|
|
|
|
|
#define TEST_LEN 128 |
|
|
|
|
|
|
|
uint32_t samples[TEST_LEN]; |
|
|
|
uint32_t mean; |
|
|
|
uint32_t stdev; |
|
|
|
|
|
|
|
/* Read TEST_LEN samples and compute mean & stdev. */ |
|
|
|
void test_adc(void) |
|
|
|
{ |
|
|
|
uint32_t tmp = 0; |
|
|
|
int i; |
|
|
|
|
|
|
|
for (i = 0; i < TEST_LEN; i++) { |
|
|
|
samples[i] = adc_read(); |
|
|
|
tmp += samples[i]; |
|
|
|
} |
|
|
|
|
|
|
|
mean = tmp / TEST_LEN; |
|
|
|
|
|
|
|
tmp = 0; |
|
|
|
for (i = 0; i < TEST_LEN; i++) |
|
|
|
tmp += (samples[i] - mean) * (samples[i] - mean); |
|
|
|
stdev = sqrt(tmp); |
|
|
|
} |
|
|
|
|
|
|
|
int main(void) |
|
|
|
{ |
|
|
|
uint32_t v; |
|
|
|
char ch; |
|
|
|
int32_t i; |
|
|
|
int32_t j; |
|
|
|
config_init(); |
|
|
|
uart1_init(115200); |
|
|
|
|
|
|
|
tmr1_init(); |
|
|
|
tmr1_wait_ms(100); |
|
|
|
|
|
|
|
adc_init(); |
|
|
|
dac_init(); |
|
|
|
uart1_put_string("ADC/DAC test\r\n"); |
|
|
|
|
|
|
|
for (;;) { |
|
|
|
switch((ch = uart1_get())) { |
|
|
|
case 'r': |
|
|
|
uart1_put_string("read"); |
|
|
|
v = adc_read(); |
|
|
|
uart1_put_string(" 0x"); |
|
|
|
uart1_put_hex32(v); |
|
|
|
v = adc_convert(v); |
|
|
|
uart1_put_string(" 0x"); |
|
|
|
uart1_put_hex32(v); |
|
|
|
uart1_put_string(" "); |
|
|
|
uart1_put_dec(v); |
|
|
|
uart1_put_string("\r\n"); |
|
|
|
break; |
|
|
|
case 'c': |
|
|
|
uart1_put_string("convert"); |
|
|
|
adc_start_conversion(); |
|
|
|
while (!adc_is_conversion_ready()) |
|
|
|
uart1_put('.'); |
|
|
|
uart1_put_string("done\r\n"); |
|
|
|
break; |
|
|
|
case '1'...'9': |
|
|
|
v = (ch - '1') * 0x2000L; |
|
|
|
if (v > 65535) v = 65535; |
|
|
|
uart1_put_string("write 0x"); |
|
|
|
uart1_put_hex16(v); |
|
|
|
uart1_put_string("\r\n"); |
|
|
|
dac_write(v); |
|
|
|
break; |
|
|
|
case 't': |
|
|
|
uart1_put_string("toggling, keypress to end\r\n"); |
|
|
|
while (!uart1_can_get()) { |
|
|
|
dac_write(0x0000); |
|
|
|
dac_write(0xFFFF); |
|
|
|
} |
|
|
|
uart1_get(); |
|
|
|
break; |
|
|
|
case 's': |
|
|
|
uart1_put_string("sweeps, keypress to end\r\n"); |
|
|
|
while (!uart1_can_get()) |
|
|
|
for (v = 0; v < 65536; v++) |
|
|
|
dac_write(v); |
|
|
|
uart1_get(); |
|
|
|
break; |
|
|
|
default: |
|
|
|
uart1_put_string("ADC: Read Convert\r\n"); |
|
|
|
uart1_put_string("DAC: 123456789 Toggle Sweep\r\n"); |
|
|
|
break; |
|
|
|
top: |
|
|
|
for (i = 0; i < 32768; i ++) { |
|
|
|
dac_write(i); |
|
|
|
tmr1_wait_ms(1); |
|
|
|
for (j = 0; j < TEST_LEN; j++) { |
|
|
|
uart1_put_dec(i); |
|
|
|
uart1_put(' '); |
|
|
|
uart1_put_dec(adc_convert(adc_read())); |
|
|
|
uart1_put_string("\r\n"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
uart1_put_string("-----\r\n"); |
|
|
|
goto top; |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |