mbed code for Farrari board

Dependencies:   DDRO_Farrari mbed

Fork of DDRO_Farrari by Liangzhen Lai

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers board_test.cpp Source File

board_test.cpp

00001 #include "board_test.h"
00002 
00003 
00004 void mem_test(JTAG &jtag)
00005 {
00006 
00007     jtag.PowerupDAP();
00008     unsigned int base = 0x10000000;
00009     unsigned int size = 2000;
00010     unsigned int* data;
00011     data = new unsigned int[size];
00012     
00013     for(unsigned int i=0; i<size; i++){
00014         data[i] = i;
00015     }
00016     
00017     pc.printf("Performing memWrite\r\n");
00018     jtag.memWrite(base, data, size);
00019 
00020     pc.printf("Checking memWrite\r\n");
00021     for(unsigned int i=0; i<size; i++){
00022         unsigned int d = jtag.readMemory(base + i*4);
00023         //pc.printf("MEM[%X] = %X\r\n", i, d);
00024         if(d != i){
00025             pc.printf("MEMERROR: MEM[%X] = %X\r\n", i, d);
00026         }
00027     }
00028 
00029     jtag.writeMemory(base + 4*20, 0xdeadbeef);
00030 
00031     pc.printf("Performing memRead\r\n");
00032     jtag.memRead(base, data, size, true, true);
00033     
00034     pc.printf("Mem test done\r\n");
00035     delete data;
00036     
00037 }
00038 
00039 void lcd_test()
00040 {
00041 
00042     lcd_default();
00043     wait(1);
00044     
00045     lcd_printf("Initial Power On");
00046     wait(1);
00047     lcd_clear( );
00048     wait(1);
00049  
00050     lcd_goto( LINE4_BEGIN );
00051     lcd_printf("Line 4");
00052     wait(1);
00053     lcd_goto( LINE2_BEGIN );
00054     lcd_printf("Line 2");
00055     wait(1);
00056     
00057     lcd_clear_line( 4);
00058     lcd_home();
00059     lcd_printf("Line 1");
00060     lcd_clear();
00061     wait(1);
00062 
00063     lcd_printf("ABCDEF");
00064     wait(1);
00065     lcd_backspace(); lcd_backspace(); lcd_backspace();
00066     wait(1);
00067     lcd_cursor_left(); lcd_cursor_left(); lcd_cursor_left();
00068     lcd_printf("def");
00069     wait(1);
00070     lcd_cursor_right(); lcd_cursor_right(); lcd_cursor_right();
00071     lcd_printf("abc");
00072     wait(1);
00073     lcd_clear();
00074     wait(1);
00075     
00076     lcd_goto( LINE1_BEGIN ); lcd_printf("LINE1");
00077     lcd_goto( LINE2_BEGIN ); lcd_printf("LINE2");
00078     lcd_goto( LINE3_BEGIN ); lcd_printf("LINE3");
00079     lcd_goto( LINE4_BEGIN ); lcd_printf("LINE4");
00080     wait(1);
00081     
00082     int i=0;
00083     while(1) {
00084         lcd_set_contrast( (5*i)%50 );
00085         lcd_backlight_level( i%8 );
00086         
00087         lcd_shift_right(); wait_ms(50); 
00088         lcd_shift_right(); wait_ms(50);
00089         lcd_shift_right(); wait_ms(50);
00090         lcd_shift_right(); wait_ms(50);
00091         lcd_shift_right(); wait_ms(50);
00092         lcd_shift_right(); wait_ms(50);
00093         lcd_shift_right(); wait_ms(50);
00094         
00095         lcd_shift_left(); wait_ms(50);
00096         lcd_shift_left(); wait_ms(50);
00097         lcd_shift_left(); wait_ms(50);
00098         lcd_shift_left(); wait_ms(50);
00099         lcd_shift_left(); wait_ms(50);
00100         lcd_shift_left(); wait_ms(50);
00101         lcd_shift_left(); wait_ms(50);
00102         
00103         i++;
00104         wait_ms(100);
00105     }
00106 }
00107 
00108 
00109 void i2ctest(){
00110 
00111     char data[4] = "abc";
00112     int A = 0;
00113     for (A = 0; A<=0xFF; A++) {
00114         if (lcd.write(A,data,3,false)==0) {
00115             pc.printf (" GOT LCD %X\r\n", A);
00116         }
00117     }
00118         
00119 }
00120 
00121 void analog_test()
00122 {
00123     
00124     power_chan(ADVDD, 0.10);
00125     wait(POWER_UP_TIME);
00126     power_chan(PADVDD, 0.15);
00127     wait(POWER_UP_TIME);
00128     power_chan(DVDD, 0.20);
00129     wait(POWER_UP_TIME);
00130     power_chan(ADVDD2, 0.25);
00131     wait(POWER_UP_TIME);
00132     power_chan(COREVDD, 0.30);
00133     wait(POWER_UP_TIME);
00134     power_chan(DVDD2, 0.35);
00135     wait(POWER_UP_TIME);
00136     power_chan(SENSORVDD, 0.40);
00137     wait(POWER_UP_TIME);
00138     power_chan(SENSORLOWVDD, 0.45);
00139     wait(POWER_UP_TIME);
00140     power_chan(SENSORSTRESSVDD, 0.50);
00141     wait(POWER_UP_TIME);
00142     power_chan(CLOCKVDD, 0.55);
00143     wait(POWER_UP_TIME);
00144     power_chan(MEM1VDD, 0.60);
00145     wait(POWER_UP_TIME);
00146     power_chan(MEM2VDD, 0.65);
00147     wait(POWER_UP_TIME);
00148     power_chan(PLLAVDD, 0.70);
00149     wait(POWER_UP_TIME);
00150     power_chan(RING_OSC_NBIAS, 0.75);
00151     power_indicator = 1;
00152 }
00153 
00154 void scan_set_test()
00155 {
00156 
00157     rotate_chain();
00158     rotate_chain();
00159     int g = get_scan_bits("PLL_LFTUNE");
00160     pc.printf("initially %d\r\n", g); // should be 0
00161     
00162     set_scan_bits("PLL_LFTUNE", 27);
00163     rotate_chain();
00164     load_chip();
00165     
00166     //load_chain();
00167     rotate_chain();
00168     
00169     
00170     g = get_scan_bits("PLL_LFTUNE");
00171     pc.printf("then %d\r\n", g); // should be 27
00172  
00173     pc.printf("The 13th line of range is %d\r\n", get_binline_by_num("/local/Prange.txt", 13));
00174  
00175 }
00176 
00177 void jtag_test()
00178 {
00179     JTAG jtag;
00180     for(char ii=0x0; ii<=0xf; ii++){
00181     jtag.setIR(ii);
00182 
00183     //jtag.leaveState();
00184     jtag.setState('d');
00185         
00186     int rett = jtag.shiftBits(0xdeadbeef >> 1, 32);
00187     jtag.leaveState();
00188     pc.printf("ii %x, rett %x\r\n", ii, rett);
00189      
00190 }     
00191 
00192 }
00193 void pll_test()
00194 {
00195     scan_pll(1, 1, 126, 1, 12, 32);
00196     unsigned long long freq = calc_pll_freqs(1, 1, 126, 1, 12, 32);
00197     freq = freq / 1000000; // in MHz
00198     int fMHz = freq;
00199     
00200     pc.printf("pll freq: %d MHz", fMHz);
00201     
00202     set_scan_bits("use_scan", 1);
00203     set_scan_bits("PLL_RESET", 1);
00204     set_scan_bits("intclk_source", 2);
00205     set_scan_bits("extclk_source", 1);
00206     set_scan_bits("ext_div_by", 10);
00207     rotate_chain();
00208     load_chip();
00209 
00210     set_scan_bits("PLL_RESET", 0);
00211     rotate_chain();
00212     load_chip();
00213     
00214     PORESETn = 1;
00215     CORERESETn = 1;
00216     set_scan_bits("RESET_scan", 1);
00217     set_scan_bits("CORERESET_scan", 1);
00218 
00219 }