Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: DDRO_Farrari mbed
Fork of DDRO_Farrari by
board_test.cpp@0:84a8bcfbdec9, 2013-10-07 (annotated)
- Committer:
- liangzhen
- Date:
- Mon Oct 07 22:58:19 2013 +0000
- Revision:
- 0:84a8bcfbdec9
power sensor tested;
Who changed what in which revision?
| User | Revision | Line number | New contents of line | 
|---|---|---|---|
| liangzhen | 0:84a8bcfbdec9 | 1 | #include "board_test.h" | 
| liangzhen | 0:84a8bcfbdec9 | 2 | |
| liangzhen | 0:84a8bcfbdec9 | 3 | |
| liangzhen | 0:84a8bcfbdec9 | 4 | void mem_test(JTAG &jtag) | 
| liangzhen | 0:84a8bcfbdec9 | 5 | { | 
| liangzhen | 0:84a8bcfbdec9 | 6 | |
| liangzhen | 0:84a8bcfbdec9 | 7 | jtag.PowerupDAP(); | 
| liangzhen | 0:84a8bcfbdec9 | 8 | unsigned int base = 0x10000000; | 
| liangzhen | 0:84a8bcfbdec9 | 9 | unsigned int size = 2000; | 
| liangzhen | 0:84a8bcfbdec9 | 10 | unsigned int* data; | 
| liangzhen | 0:84a8bcfbdec9 | 11 | data = new unsigned int[size]; | 
| liangzhen | 0:84a8bcfbdec9 | 12 | |
| liangzhen | 0:84a8bcfbdec9 | 13 | for(unsigned int i=0; i<size; i++){ | 
| liangzhen | 0:84a8bcfbdec9 | 14 | data[i] = i; | 
| liangzhen | 0:84a8bcfbdec9 | 15 | } | 
| liangzhen | 0:84a8bcfbdec9 | 16 | |
| liangzhen | 0:84a8bcfbdec9 | 17 | pc.printf("Performing memWrite\r\n"); | 
| liangzhen | 0:84a8bcfbdec9 | 18 | jtag.memWrite(base, data, size); | 
| liangzhen | 0:84a8bcfbdec9 | 19 | |
| liangzhen | 0:84a8bcfbdec9 | 20 | pc.printf("Checking memWrite\r\n"); | 
| liangzhen | 0:84a8bcfbdec9 | 21 | for(unsigned int i=0; i<size; i++){ | 
| liangzhen | 0:84a8bcfbdec9 | 22 | unsigned int d = jtag.readMemory(base + i*4); | 
| liangzhen | 0:84a8bcfbdec9 | 23 | //pc.printf("MEM[%X] = %X\r\n", i, d); | 
| liangzhen | 0:84a8bcfbdec9 | 24 | if(d != i){ | 
| liangzhen | 0:84a8bcfbdec9 | 25 | pc.printf("MEMERROR: MEM[%X] = %X\r\n", i, d); | 
| liangzhen | 0:84a8bcfbdec9 | 26 | } | 
| liangzhen | 0:84a8bcfbdec9 | 27 | } | 
| liangzhen | 0:84a8bcfbdec9 | 28 | |
| liangzhen | 0:84a8bcfbdec9 | 29 | jtag.writeMemory(base + 4*20, 0xdeadbeef); | 
| liangzhen | 0:84a8bcfbdec9 | 30 | |
| liangzhen | 0:84a8bcfbdec9 | 31 | pc.printf("Performing memRead\r\n"); | 
| liangzhen | 0:84a8bcfbdec9 | 32 | jtag.memRead(base, data, size, true, true); | 
| liangzhen | 0:84a8bcfbdec9 | 33 | |
| liangzhen | 0:84a8bcfbdec9 | 34 | pc.printf("Mem test done\r\n"); | 
| liangzhen | 0:84a8bcfbdec9 | 35 | delete data; | 
| liangzhen | 0:84a8bcfbdec9 | 36 | |
| liangzhen | 0:84a8bcfbdec9 | 37 | } | 
| liangzhen | 0:84a8bcfbdec9 | 38 | |
| liangzhen | 0:84a8bcfbdec9 | 39 | void lcd_test() | 
| liangzhen | 0:84a8bcfbdec9 | 40 | { | 
| liangzhen | 0:84a8bcfbdec9 | 41 | |
| liangzhen | 0:84a8bcfbdec9 | 42 | lcd_default(); | 
| liangzhen | 0:84a8bcfbdec9 | 43 | wait(1); | 
| liangzhen | 0:84a8bcfbdec9 | 44 | |
| liangzhen | 0:84a8bcfbdec9 | 45 | lcd_printf("Initial Power On"); | 
| liangzhen | 0:84a8bcfbdec9 | 46 | wait(1); | 
| liangzhen | 0:84a8bcfbdec9 | 47 | lcd_clear( ); | 
| liangzhen | 0:84a8bcfbdec9 | 48 | wait(1); | 
| liangzhen | 0:84a8bcfbdec9 | 49 | |
| liangzhen | 0:84a8bcfbdec9 | 50 | lcd_goto( LINE4_BEGIN ); | 
| liangzhen | 0:84a8bcfbdec9 | 51 | lcd_printf("Line 4"); | 
| liangzhen | 0:84a8bcfbdec9 | 52 | wait(1); | 
| liangzhen | 0:84a8bcfbdec9 | 53 | lcd_goto( LINE2_BEGIN ); | 
| liangzhen | 0:84a8bcfbdec9 | 54 | lcd_printf("Line 2"); | 
| liangzhen | 0:84a8bcfbdec9 | 55 | wait(1); | 
| liangzhen | 0:84a8bcfbdec9 | 56 | |
| liangzhen | 0:84a8bcfbdec9 | 57 | lcd_clear_line( 4); | 
| liangzhen | 0:84a8bcfbdec9 | 58 | lcd_home(); | 
| liangzhen | 0:84a8bcfbdec9 | 59 | lcd_printf("Line 1"); | 
| liangzhen | 0:84a8bcfbdec9 | 60 | lcd_clear(); | 
| liangzhen | 0:84a8bcfbdec9 | 61 | wait(1); | 
| liangzhen | 0:84a8bcfbdec9 | 62 | |
| liangzhen | 0:84a8bcfbdec9 | 63 | lcd_printf("ABCDEF"); | 
| liangzhen | 0:84a8bcfbdec9 | 64 | wait(1); | 
| liangzhen | 0:84a8bcfbdec9 | 65 | lcd_backspace(); lcd_backspace(); lcd_backspace(); | 
| liangzhen | 0:84a8bcfbdec9 | 66 | wait(1); | 
| liangzhen | 0:84a8bcfbdec9 | 67 | lcd_cursor_left(); lcd_cursor_left(); lcd_cursor_left(); | 
| liangzhen | 0:84a8bcfbdec9 | 68 | lcd_printf("def"); | 
| liangzhen | 0:84a8bcfbdec9 | 69 | wait(1); | 
| liangzhen | 0:84a8bcfbdec9 | 70 | lcd_cursor_right(); lcd_cursor_right(); lcd_cursor_right(); | 
| liangzhen | 0:84a8bcfbdec9 | 71 | lcd_printf("abc"); | 
| liangzhen | 0:84a8bcfbdec9 | 72 | wait(1); | 
| liangzhen | 0:84a8bcfbdec9 | 73 | lcd_clear(); | 
| liangzhen | 0:84a8bcfbdec9 | 74 | wait(1); | 
| liangzhen | 0:84a8bcfbdec9 | 75 | |
| liangzhen | 0:84a8bcfbdec9 | 76 | lcd_goto( LINE1_BEGIN ); lcd_printf("LINE1"); | 
| liangzhen | 0:84a8bcfbdec9 | 77 | lcd_goto( LINE2_BEGIN ); lcd_printf("LINE2"); | 
| liangzhen | 0:84a8bcfbdec9 | 78 | lcd_goto( LINE3_BEGIN ); lcd_printf("LINE3"); | 
| liangzhen | 0:84a8bcfbdec9 | 79 | lcd_goto( LINE4_BEGIN ); lcd_printf("LINE4"); | 
| liangzhen | 0:84a8bcfbdec9 | 80 | wait(1); | 
| liangzhen | 0:84a8bcfbdec9 | 81 | |
| liangzhen | 0:84a8bcfbdec9 | 82 | int i=0; | 
| liangzhen | 0:84a8bcfbdec9 | 83 | while(1) { | 
| liangzhen | 0:84a8bcfbdec9 | 84 | lcd_set_contrast( (5*i)%50 ); | 
| liangzhen | 0:84a8bcfbdec9 | 85 | lcd_backlight_level( i%8 ); | 
| liangzhen | 0:84a8bcfbdec9 | 86 | |
| liangzhen | 0:84a8bcfbdec9 | 87 | lcd_shift_right(); wait_ms(50); | 
| liangzhen | 0:84a8bcfbdec9 | 88 | lcd_shift_right(); wait_ms(50); | 
| liangzhen | 0:84a8bcfbdec9 | 89 | lcd_shift_right(); wait_ms(50); | 
| liangzhen | 0:84a8bcfbdec9 | 90 | lcd_shift_right(); wait_ms(50); | 
| liangzhen | 0:84a8bcfbdec9 | 91 | lcd_shift_right(); wait_ms(50); | 
| liangzhen | 0:84a8bcfbdec9 | 92 | lcd_shift_right(); wait_ms(50); | 
| liangzhen | 0:84a8bcfbdec9 | 93 | lcd_shift_right(); wait_ms(50); | 
| liangzhen | 0:84a8bcfbdec9 | 94 | |
| liangzhen | 0:84a8bcfbdec9 | 95 | lcd_shift_left(); wait_ms(50); | 
| liangzhen | 0:84a8bcfbdec9 | 96 | lcd_shift_left(); wait_ms(50); | 
| liangzhen | 0:84a8bcfbdec9 | 97 | lcd_shift_left(); wait_ms(50); | 
| liangzhen | 0:84a8bcfbdec9 | 98 | lcd_shift_left(); wait_ms(50); | 
| liangzhen | 0:84a8bcfbdec9 | 99 | lcd_shift_left(); wait_ms(50); | 
| liangzhen | 0:84a8bcfbdec9 | 100 | lcd_shift_left(); wait_ms(50); | 
| liangzhen | 0:84a8bcfbdec9 | 101 | lcd_shift_left(); wait_ms(50); | 
| liangzhen | 0:84a8bcfbdec9 | 102 | |
| liangzhen | 0:84a8bcfbdec9 | 103 | i++; | 
| liangzhen | 0:84a8bcfbdec9 | 104 | wait_ms(100); | 
| liangzhen | 0:84a8bcfbdec9 | 105 | } | 
| liangzhen | 0:84a8bcfbdec9 | 106 | } | 
| liangzhen | 0:84a8bcfbdec9 | 107 | |
| liangzhen | 0:84a8bcfbdec9 | 108 | |
| liangzhen | 0:84a8bcfbdec9 | 109 | void i2ctest(){ | 
| liangzhen | 0:84a8bcfbdec9 | 110 | |
| liangzhen | 0:84a8bcfbdec9 | 111 | char data[4] = "abc"; | 
| liangzhen | 0:84a8bcfbdec9 | 112 | int A = 0; | 
| liangzhen | 0:84a8bcfbdec9 | 113 | for (A = 0; A<=0xFF; A++) { | 
| liangzhen | 0:84a8bcfbdec9 | 114 | if (lcd.write(A,data,3,false)==0) { | 
| liangzhen | 0:84a8bcfbdec9 | 115 | pc.printf (" GOT LCD %X\r\n", A); | 
| liangzhen | 0:84a8bcfbdec9 | 116 | } | 
| liangzhen | 0:84a8bcfbdec9 | 117 | } | 
| liangzhen | 0:84a8bcfbdec9 | 118 | |
| liangzhen | 0:84a8bcfbdec9 | 119 | } | 
| liangzhen | 0:84a8bcfbdec9 | 120 | |
| liangzhen | 0:84a8bcfbdec9 | 121 | void analog_test() | 
| liangzhen | 0:84a8bcfbdec9 | 122 | { | 
| liangzhen | 0:84a8bcfbdec9 | 123 | |
| liangzhen | 0:84a8bcfbdec9 | 124 | power_chan(ADVDD, 0.10); | 
| liangzhen | 0:84a8bcfbdec9 | 125 | wait(POWER_UP_TIME); | 
| liangzhen | 0:84a8bcfbdec9 | 126 | power_chan(PADVDD, 0.15); | 
| liangzhen | 0:84a8bcfbdec9 | 127 | wait(POWER_UP_TIME); | 
| liangzhen | 0:84a8bcfbdec9 | 128 | power_chan(DVDD, 0.20); | 
| liangzhen | 0:84a8bcfbdec9 | 129 | wait(POWER_UP_TIME); | 
| liangzhen | 0:84a8bcfbdec9 | 130 | power_chan(ADVDD2, 0.25); | 
| liangzhen | 0:84a8bcfbdec9 | 131 | wait(POWER_UP_TIME); | 
| liangzhen | 0:84a8bcfbdec9 | 132 | power_chan(COREVDD, 0.30); | 
| liangzhen | 0:84a8bcfbdec9 | 133 | wait(POWER_UP_TIME); | 
| liangzhen | 0:84a8bcfbdec9 | 134 | power_chan(DVDD2, 0.35); | 
| liangzhen | 0:84a8bcfbdec9 | 135 | wait(POWER_UP_TIME); | 
| liangzhen | 0:84a8bcfbdec9 | 136 | power_chan(SENSORVDD, 0.40); | 
| liangzhen | 0:84a8bcfbdec9 | 137 | wait(POWER_UP_TIME); | 
| liangzhen | 0:84a8bcfbdec9 | 138 | power_chan(SENSORLOWVDD, 0.45); | 
| liangzhen | 0:84a8bcfbdec9 | 139 | wait(POWER_UP_TIME); | 
| liangzhen | 0:84a8bcfbdec9 | 140 | power_chan(SENSORSTRESSVDD, 0.50); | 
| liangzhen | 0:84a8bcfbdec9 | 141 | wait(POWER_UP_TIME); | 
| liangzhen | 0:84a8bcfbdec9 | 142 | power_chan(CLOCKVDD, 0.55); | 
| liangzhen | 0:84a8bcfbdec9 | 143 | wait(POWER_UP_TIME); | 
| liangzhen | 0:84a8bcfbdec9 | 144 | power_chan(MEM1VDD, 0.60); | 
| liangzhen | 0:84a8bcfbdec9 | 145 | wait(POWER_UP_TIME); | 
| liangzhen | 0:84a8bcfbdec9 | 146 | power_chan(MEM2VDD, 0.65); | 
| liangzhen | 0:84a8bcfbdec9 | 147 | wait(POWER_UP_TIME); | 
| liangzhen | 0:84a8bcfbdec9 | 148 | power_chan(PLLAVDD, 0.70); | 
| liangzhen | 0:84a8bcfbdec9 | 149 | wait(POWER_UP_TIME); | 
| liangzhen | 0:84a8bcfbdec9 | 150 | power_chan(RING_OSC_NBIAS, 0.75); | 
| liangzhen | 0:84a8bcfbdec9 | 151 | power_indicator = 1; | 
| liangzhen | 0:84a8bcfbdec9 | 152 | } | 
| liangzhen | 0:84a8bcfbdec9 | 153 | |
| liangzhen | 0:84a8bcfbdec9 | 154 | void scan_set_test() | 
| liangzhen | 0:84a8bcfbdec9 | 155 | { | 
| liangzhen | 0:84a8bcfbdec9 | 156 | |
| liangzhen | 0:84a8bcfbdec9 | 157 | rotate_chain(); | 
| liangzhen | 0:84a8bcfbdec9 | 158 | rotate_chain(); | 
| liangzhen | 0:84a8bcfbdec9 | 159 | int g = get_scan_bits("PLL_LFTUNE"); | 
| liangzhen | 0:84a8bcfbdec9 | 160 | pc.printf("initially %d\r\n", g); // should be 0 | 
| liangzhen | 0:84a8bcfbdec9 | 161 | |
| liangzhen | 0:84a8bcfbdec9 | 162 | set_scan_bits("PLL_LFTUNE", 27); | 
| liangzhen | 0:84a8bcfbdec9 | 163 | rotate_chain(); | 
| liangzhen | 0:84a8bcfbdec9 | 164 | load_chip(); | 
| liangzhen | 0:84a8bcfbdec9 | 165 | |
| liangzhen | 0:84a8bcfbdec9 | 166 | //load_chain(); | 
| liangzhen | 0:84a8bcfbdec9 | 167 | rotate_chain(); | 
| liangzhen | 0:84a8bcfbdec9 | 168 | |
| liangzhen | 0:84a8bcfbdec9 | 169 | |
| liangzhen | 0:84a8bcfbdec9 | 170 | g = get_scan_bits("PLL_LFTUNE"); | 
| liangzhen | 0:84a8bcfbdec9 | 171 | pc.printf("then %d\r\n", g); // should be 27 | 
| liangzhen | 0:84a8bcfbdec9 | 172 | |
| liangzhen | 0:84a8bcfbdec9 | 173 | pc.printf("The 13th line of range is %d\r\n", get_binline_by_num("/local/Prange.txt", 13)); | 
| liangzhen | 0:84a8bcfbdec9 | 174 | |
| liangzhen | 0:84a8bcfbdec9 | 175 | } | 
| liangzhen | 0:84a8bcfbdec9 | 176 | |
| liangzhen | 0:84a8bcfbdec9 | 177 | void jtag_test() | 
| liangzhen | 0:84a8bcfbdec9 | 178 | { | 
| liangzhen | 0:84a8bcfbdec9 | 179 | JTAG jtag; | 
| liangzhen | 0:84a8bcfbdec9 | 180 | for(char ii=0x0; ii<=0xf; ii++){ | 
| liangzhen | 0:84a8bcfbdec9 | 181 | jtag.setIR(ii); | 
| liangzhen | 0:84a8bcfbdec9 | 182 | |
| liangzhen | 0:84a8bcfbdec9 | 183 | //jtag.leaveState(); | 
| liangzhen | 0:84a8bcfbdec9 | 184 | jtag.setState('d'); | 
| liangzhen | 0:84a8bcfbdec9 | 185 | |
| liangzhen | 0:84a8bcfbdec9 | 186 | int rett = jtag.shiftBits(0xdeadbeef >> 1, 32); | 
| liangzhen | 0:84a8bcfbdec9 | 187 | jtag.leaveState(); | 
| liangzhen | 0:84a8bcfbdec9 | 188 | pc.printf("ii %x, rett %x\r\n", ii, rett); | 
| liangzhen | 0:84a8bcfbdec9 | 189 | |
| liangzhen | 0:84a8bcfbdec9 | 190 | } | 
| liangzhen | 0:84a8bcfbdec9 | 191 | |
| liangzhen | 0:84a8bcfbdec9 | 192 | } | 
| liangzhen | 0:84a8bcfbdec9 | 193 | void pll_test() | 
| liangzhen | 0:84a8bcfbdec9 | 194 | { | 
| liangzhen | 0:84a8bcfbdec9 | 195 | scan_pll(1, 1, 126, 1, 12, 32); | 
| liangzhen | 0:84a8bcfbdec9 | 196 | unsigned long long freq = calc_pll_freqs(1, 1, 126, 1, 12, 32); | 
| liangzhen | 0:84a8bcfbdec9 | 197 | freq = freq / 1000000; // in MHz | 
| liangzhen | 0:84a8bcfbdec9 | 198 | int fMHz = freq; | 
| liangzhen | 0:84a8bcfbdec9 | 199 | |
| liangzhen | 0:84a8bcfbdec9 | 200 | pc.printf("pll freq: %d MHz", fMHz); | 
| liangzhen | 0:84a8bcfbdec9 | 201 | |
| liangzhen | 0:84a8bcfbdec9 | 202 | set_scan_bits("use_scan", 1); | 
| liangzhen | 0:84a8bcfbdec9 | 203 | set_scan_bits("PLL_RESET", 1); | 
| liangzhen | 0:84a8bcfbdec9 | 204 | set_scan_bits("intclk_source", 2); | 
| liangzhen | 0:84a8bcfbdec9 | 205 | set_scan_bits("extclk_source", 1); | 
| liangzhen | 0:84a8bcfbdec9 | 206 | set_scan_bits("ext_div_by", 10); | 
| liangzhen | 0:84a8bcfbdec9 | 207 | rotate_chain(); | 
| liangzhen | 0:84a8bcfbdec9 | 208 | load_chip(); | 
| liangzhen | 0:84a8bcfbdec9 | 209 | |
| liangzhen | 0:84a8bcfbdec9 | 210 | set_scan_bits("PLL_RESET", 0); | 
| liangzhen | 0:84a8bcfbdec9 | 211 | rotate_chain(); | 
| liangzhen | 0:84a8bcfbdec9 | 212 | load_chip(); | 
| liangzhen | 0:84a8bcfbdec9 | 213 | |
| liangzhen | 0:84a8bcfbdec9 | 214 | PORESETn = 1; | 
| liangzhen | 0:84a8bcfbdec9 | 215 | CORERESETn = 1; | 
| liangzhen | 0:84a8bcfbdec9 | 216 | set_scan_bits("RESET_scan", 1); | 
| liangzhen | 0:84a8bcfbdec9 | 217 | set_scan_bits("CORERESET_scan", 1); | 
| liangzhen | 0:84a8bcfbdec9 | 218 | |
| liangzhen | 0:84a8bcfbdec9 | 219 | } | 
