Liangzhen Lai / Mbed 2 deprecated DDRO_scan
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 //input control for DDRO
00003 
00004 Ticker CLK;
00005 
00006 Serial pc(USBTX, USBRX); // tx, rx
00007 
00008 DigitalOut ref_clk(p5);
00009 DigitalOut count(p6);
00010 DigitalOut read(p7);
00011 DigitalOut enable(p8);
00012 DigitalOut S0(p9);
00013 DigitalOut S1(p10);
00014 DigitalOut S2(p11);
00015 DigitalOut S3(p12);
00016 DigitalOut S4(p13);
00017 DigitalOut S5(p14);
00018 DigitalOut OS(p15);
00019 DigitalIn FDO(p16);
00020 DigitalIn O0(p21);
00021 DigitalIn O1(p22);
00022 DigitalIn O2(p23);
00023 DigitalIn O3(p24);
00024 DigitalIn O4(p25);
00025 DigitalIn O5(p26);
00026 DigitalIn O6(p27);
00027 DigitalIn O7(p28);
00028 
00029 void clk_gen()
00030 {
00031     ref_clk = !ref_clk;
00032 }
00033 
00034 void assign_s(int selection)
00035 {
00036     int remainder = selection;
00037     S0 = selection % 2;
00038     selection = selection / 2;
00039     S1 = selection % 2;
00040     selection = selection / 2;
00041     S2 = selection % 2;
00042     selection = selection / 2;
00043     S3 = selection % 2;
00044     selection = selection / 2;
00045     S4 = selection % 2;
00046     selection = selection / 2;
00047     S5 = selection % 2;
00048 }
00049 
00050 int read_out()
00051 {
00052     int out;
00053     out = 0;
00054     OS = 1;
00055     out += O7.read();
00056     out *= 2;
00057     out += O6.read();
00058     out *= 2;
00059     out += O5.read();
00060     out *= 2;
00061     out += O4.read();
00062     out *= 2;
00063     out += O3.read();
00064     out *= 2;
00065     out += O2.read();
00066     out *= 2;
00067     out += O1.read();
00068     out *= 2;
00069     out += O0.read();
00070     out *= 2;
00071     OS = 0;
00072     wait(0.001);
00073     out += O7.read();
00074     out *= 2;
00075     out += O6.read();
00076     out *= 2;
00077     out += O5.read();
00078     out *= 2;
00079     out += O4.read();
00080     out *= 2;
00081     out += O3.read();
00082     out *= 2;
00083     out += O2.read();
00084     out *= 2;
00085     out += O1.read();
00086     out *= 2;
00087     out += O0.read();
00088     return out;
00089 }
00090 
00091 int main() {
00092   pc.printf("Testing Starts here\n");
00093   O0.mode(OpenDrain);
00094   O1.mode(OpenDrain);
00095   O2.mode(OpenDrain);
00096   O3.mode(OpenDrain);
00097   O4.mode(OpenDrain);
00098   O5.mode(OpenDrain);
00099   O6.mode(OpenDrain);
00100   O7.mode(OpenDrain);
00101   count = 0;
00102   read = 0;
00103   enable = 0;
00104   int i;
00105   for (i=0;i<64;i++)
00106   {
00107     //measure using 0.01
00108     int select = i;
00109     pc.printf("%d ", select);
00110     enable = 0;
00111     count = 0;
00112     read = 0;
00113     assign_s(select);
00114     CLK.attach(&clk_gen, 0.01);
00115     wait(0.1);
00116     enable = 1;
00117     count = 0;
00118     wait(0.001);
00119     count = 0;
00120     wait(0.001);
00121     count = 1;
00122     wait(0.001);
00123     count = 0;
00124     wait(0.1);
00125     read = 0;
00126     read = 1;
00127     read = 0;
00128     enable = 0;
00129     int out = read_out();
00130     pc.printf("%d ", out);
00131     OS = 1;
00132     wait(0.1);
00133     pc.printf("%d%d%d%d%d%d%d%d",O7.read(),O6.read(),O5.read(),O4.read(),O3.read(),O2.read(),O1.read(),O0.read());
00134     wait(0.1);
00135     OS = 0;
00136     pc.printf("%d%d%d%d%d%d%d%d ",O7.read(),O6.read(),O5.read(),O4.read(),O3.read(),O2.read(),O1.read(),O0.read());
00137     
00138     //measure using 0.1
00139     CLK.detach();
00140     enable = 0;
00141     count = 0;
00142     read = 0;
00143     CLK.attach(&clk_gen, 0.04);
00144     wait(0.2);
00145     enable = 1;
00146     count = 0;
00147     wait(0.001);
00148     count = 0;
00149     wait(0.001);
00150     count = 1;
00151     wait(0.001);
00152     count = 0;
00153     wait(0.2);
00154     read = 0;
00155     read = 1;
00156     read = 0;
00157     enable = 0;
00158     out = read_out();
00159     pc.printf("%d ", out);
00160     OS = 1;
00161     wait(0.1);
00162     pc.printf("%d%d%d%d%d%d%d%d",O7.read(),O6.read(),O5.read(),O4.read(),O3.read(),O2.read(),O1.read(),O0.read());
00163     wait(0.1);
00164     OS = 0;
00165     pc.printf("%d%d%d%d%d%d%d%d\n",O7.read(),O6.read(),O5.read(),O4.read(),O3.read(),O2.read(),O1.read(),O0.read());    
00166   }
00167 }