Production Test Program (PTP) for the LPC4088 Experiment Base Board

Dependencies:   EALib I2S LM75B SDFileSystem mbed

Committer:
embeddedartists
Date:
Wed Aug 27 14:24:59 2014 +0000
Revision:
1:47680ec5d783
Parent:
0:0d5190d379d3
Child:
2:2f4b7535ceb3
Got the display and touch to work. Only audio tests missing

Who changed what in which revision?

UserRevisionLine numberNew contents of line
embeddedartists 0:0d5190d379d3 1 /******************************************************************************
embeddedartists 0:0d5190d379d3 2 * Includes
embeddedartists 0:0d5190d379d3 3 *****************************************************************************/
embeddedartists 0:0d5190d379d3 4 #include "mbed.h"
embeddedartists 0:0d5190d379d3 5
embeddedartists 0:0d5190d379d3 6 #include "MCIFileSystem.h"
embeddedartists 0:0d5190d379d3 7 #include "SDFileSystem.h"
embeddedartists 0:0d5190d379d3 8 #include "LM75B.h"
embeddedartists 0:0d5190d379d3 9 #include "MMA7455.h"
embeddedartists 0:0d5190d379d3 10 #include "WM8731.h"
embeddedartists 0:0d5190d379d3 11 #include "TextLCD.h"
embeddedartists 0:0d5190d379d3 12 #include "DmTftHX8353C.h"
embeddedartists 0:0d5190d379d3 13 #include "BubbleDemo.h"
embeddedartists 1:47680ec5d783 14 #include "AR1021I2C.h"
embeddedartists 1:47680ec5d783 15 #include "Graphics.h"
embeddedartists 1:47680ec5d783 16
embeddedartists 1:47680ec5d783 17 #include "LcdController.h"
embeddedartists 1:47680ec5d783 18 #include "EaLcdBoardGPIO.h"
embeddedartists 1:47680ec5d783 19 #include "sdram.h"
embeddedartists 0:0d5190d379d3 20
embeddedartists 0:0d5190d379d3 21 /******************************************************************************
embeddedartists 0:0d5190d379d3 22 * Typedefs and defines
embeddedartists 0:0d5190d379d3 23 *****************************************************************************/
embeddedartists 0:0d5190d379d3 24
embeddedartists 1:47680ec5d783 25 #define ACC_XMIN (1<<0)
embeddedartists 1:47680ec5d783 26 #define ACC_XMAX (1<<1)
embeddedartists 1:47680ec5d783 27 #define ACC_YMIN (1<<2)
embeddedartists 1:47680ec5d783 28 #define ACC_YMAX (1<<3)
embeddedartists 1:47680ec5d783 29 #define ACC_ZMIN (1<<4)
embeddedartists 1:47680ec5d783 30 #define ACC_ZMAX (1<<5)
embeddedartists 1:47680ec5d783 31
embeddedartists 1:47680ec5d783 32 #define ACC_MIN_LIMIT (-50)
embeddedartists 1:47680ec5d783 33 #define ACC_MAX_LIMIT ( 50)
embeddedartists 1:47680ec5d783 34
embeddedartists 0:0d5190d379d3 35 #define BUTTON_PRESSED 0
embeddedartists 0:0d5190d379d3 36 #define BUTTON_RELEASED 1
embeddedartists 0:0d5190d379d3 37
embeddedartists 0:0d5190d379d3 38 #define LED_ON 0
embeddedartists 0:0d5190d379d3 39 #define LED_OFF 1
embeddedartists 0:0d5190d379d3 40
embeddedartists 1:47680ec5d783 41 #if 0
embeddedartists 1:47680ec5d783 42 // Enters eternal loop
embeddedartists 1:47680ec5d783 43 #define handleError(__a, __b) do { \
embeddedartists 1:47680ec5d783 44 printf("Error " #__a ": %s\n", (__b)); \
embeddedartists 1:47680ec5d783 45 resetLEDs(); \
embeddedartists 1:47680ec5d783 46 ledRed = LED_ON; \
embeddedartists 1:47680ec5d783 47 ledGreen = LED_OFF; \
embeddedartists 1:47680ec5d783 48 ledBlue = LED_OFF; \
embeddedartists 1:47680ec5d783 49 mbed_die(); \
embeddedartists 1:47680ec5d783 50 } while(0)
embeddedartists 1:47680ec5d783 51
embeddedartists 1:47680ec5d783 52 #define showTestResult() do {} while(0) // Never used in this setup
embeddedartists 1:47680ec5d783 53 #else
embeddedartists 1:47680ec5d783 54 bool allTestsPassed = true;
embeddedartists 1:47680ec5d783 55 // Leaves error handling to the end of the program
embeddedartists 1:47680ec5d783 56 #define handleError(__a, __b) do { \
embeddedartists 1:47680ec5d783 57 printf("Error " #__a ": %s\n", (__b)); \
embeddedartists 1:47680ec5d783 58 resetLEDs(); \
embeddedartists 1:47680ec5d783 59 *ledRed = LED_ON; \
embeddedartists 1:47680ec5d783 60 *ledGreen = LED_OFF; \
embeddedartists 1:47680ec5d783 61 *ledBlue = LED_OFF; \
embeddedartists 1:47680ec5d783 62 allTestsPassed = false; \
embeddedartists 1:47680ec5d783 63 return; \
embeddedartists 1:47680ec5d783 64 } while(0)
embeddedartists 1:47680ec5d783 65
embeddedartists 1:47680ec5d783 66 #define showTestResult() do { \
embeddedartists 1:47680ec5d783 67 resetLEDs(); \
embeddedartists 1:47680ec5d783 68 *ledRed = LED_OFF; \
embeddedartists 1:47680ec5d783 69 *ledGreen = LED_OFF; \
embeddedartists 1:47680ec5d783 70 *ledBlue = LED_OFF; \
embeddedartists 1:47680ec5d783 71 if (allTestsPassed) { \
embeddedartists 1:47680ec5d783 72 printf("\n\nTest Result: PASSED\n\n"); \
embeddedartists 1:47680ec5d783 73 *ledGreen = LED_ON; \
embeddedartists 1:47680ec5d783 74 } else { \
embeddedartists 1:47680ec5d783 75 printf("\n\nTest Result: FAILED\n\n"); \
embeddedartists 1:47680ec5d783 76 *ledRed = LED_ON; \
embeddedartists 1:47680ec5d783 77 } \
embeddedartists 1:47680ec5d783 78 } while(0)
embeddedartists 1:47680ec5d783 79 #endif
embeddedartists 0:0d5190d379d3 80
embeddedartists 0:0d5190d379d3 81 #define waitForButtonClick() do {while(button.read() == BUTTON_RELEASED); while(button.read() == BUTTON_PRESSED);} while(false)
embeddedartists 0:0d5190d379d3 82
embeddedartists 0:0d5190d379d3 83 /******************************************************************************
embeddedartists 0:0d5190d379d3 84 * Local variables
embeddedartists 0:0d5190d379d3 85 *****************************************************************************/
embeddedartists 0:0d5190d379d3 86
embeddedartists 0:0d5190d379d3 87 DigitalOut myled(LED1);
embeddedartists 0:0d5190d379d3 88 DigitalIn button(p23);
embeddedartists 0:0d5190d379d3 89
embeddedartists 0:0d5190d379d3 90 SPI shiftreg(p5, p6, p7); // mosi, miso, sclk,
embeddedartists 0:0d5190d379d3 91 DigitalOut shiftregCS(p30);
embeddedartists 0:0d5190d379d3 92
embeddedartists 1:47680ec5d783 93 DigitalOut* ledRed = NULL;
embeddedartists 1:47680ec5d783 94 DigitalOut* ledGreen = NULL;
embeddedartists 1:47680ec5d783 95 DigitalOut* ledBlue = NULL;
embeddedartists 0:0d5190d379d3 96
embeddedartists 0:0d5190d379d3 97 /******************************************************************************
embeddedartists 0:0d5190d379d3 98 * Local functions
embeddedartists 0:0d5190d379d3 99 *****************************************************************************/
embeddedartists 0:0d5190d379d3 100
embeddedartists 1:47680ec5d783 101 static void resetLEDs()
embeddedartists 1:47680ec5d783 102 {
embeddedartists 1:47680ec5d783 103 // Some peripherals may interfer with the RGB LED and as a result it
embeddedartists 1:47680ec5d783 104 // may be needed to reinitialize them so that PIN is again an GPIO.
embeddedartists 1:47680ec5d783 105 if (ledRed != NULL) {
embeddedartists 1:47680ec5d783 106 delete ledRed;
embeddedartists 1:47680ec5d783 107 }
embeddedartists 1:47680ec5d783 108 if (ledGreen != NULL) {
embeddedartists 1:47680ec5d783 109 delete ledGreen;
embeddedartists 1:47680ec5d783 110 }
embeddedartists 1:47680ec5d783 111 if (ledBlue != NULL) {
embeddedartists 1:47680ec5d783 112 delete ledBlue;
embeddedartists 1:47680ec5d783 113 }
embeddedartists 1:47680ec5d783 114 ledRed = new DigitalOut(p25);
embeddedartists 1:47680ec5d783 115 ledGreen = new DigitalOut(p28);
embeddedartists 1:47680ec5d783 116 ledBlue = new DigitalOut(p26);
embeddedartists 1:47680ec5d783 117
embeddedartists 1:47680ec5d783 118 *ledRed = LED_OFF;
embeddedartists 1:47680ec5d783 119 *ledGreen = LED_OFF;
embeddedartists 1:47680ec5d783 120 *ledBlue = LED_OFF;
embeddedartists 1:47680ec5d783 121 }
embeddedartists 1:47680ec5d783 122
embeddedartists 0:0d5190d379d3 123 static void test_micro_sd_card_mci()
embeddedartists 0:0d5190d379d3 124 {
embeddedartists 1:47680ec5d783 125 // The LPC4088 Experiment Base Board does not have the CardDetect signal
embeddedartists 1:47680ec5d783 126 // available so it must be set to NC here to work.
embeddedartists 1:47680ec5d783 127 MCIFileSystem mcifs("mci", NC);
embeddedartists 0:0d5190d379d3 128 FILE* fp = fopen("/mci/message.txt", "r");
embeddedartists 0:0d5190d379d3 129 if (fp != NULL) {
embeddedartists 0:0d5190d379d3 130 char buf[20];
embeddedartists 0:0d5190d379d3 131 int num = fread(buf, 1, sizeof(buf), fp);
embeddedartists 0:0d5190d379d3 132 if (num >= 10) {
embeddedartists 0:0d5190d379d3 133 buf[10] = '\0';
embeddedartists 0:0d5190d379d3 134 if (strcmp(buf, "eatest2014") == 0) {
embeddedartists 0:0d5190d379d3 135 printf("MCI SD Card works!\n");
embeddedartists 0:0d5190d379d3 136 fclose(fp);
embeddedartists 0:0d5190d379d3 137 return;
embeddedartists 0:0d5190d379d3 138 }
embeddedartists 0:0d5190d379d3 139 handleError(STATE_ERR_MCIFS, "Invalid data read from /mci/message.txt\n");
embeddedartists 0:0d5190d379d3 140 }
embeddedartists 0:0d5190d379d3 141 handleError(STATE_ERR_MCIFS, "Failed to read >= 10 bytes from /mci/message.txt\n");
embeddedartists 0:0d5190d379d3 142 }
embeddedartists 0:0d5190d379d3 143 handleError(STATE_ERR_MCIFS, "Failed to open /mci/message.txt\n");
embeddedartists 0:0d5190d379d3 144 }
embeddedartists 0:0d5190d379d3 145
embeddedartists 0:0d5190d379d3 146 static void test_micro_sd_card_spi()
embeddedartists 0:0d5190d379d3 147 {
embeddedartists 1:47680ec5d783 148 SDFileSystem spifs(p5, p6, p7, p8, "spi"); // mosi, miso, sclk, cs
embeddedartists 0:0d5190d379d3 149 FILE* fp = fopen("/spi/message.txt", "r");
embeddedartists 0:0d5190d379d3 150 if (fp != NULL) {
embeddedartists 0:0d5190d379d3 151 char buf[20];
embeddedartists 0:0d5190d379d3 152 int num = fread(buf, 1, sizeof(buf), fp);
embeddedartists 0:0d5190d379d3 153 if (num >= 10) {
embeddedartists 0:0d5190d379d3 154 buf[10] = '\0';
embeddedartists 0:0d5190d379d3 155 if (strcmp(buf, "eatest2014") == 0) {
embeddedartists 0:0d5190d379d3 156 printf("SPI SD Card works!\n");
embeddedartists 0:0d5190d379d3 157 fclose(fp);
embeddedartists 0:0d5190d379d3 158 return;
embeddedartists 0:0d5190d379d3 159 }
embeddedartists 0:0d5190d379d3 160 handleError(STATE_ERR_SPIFS, "Invalid data read from /spi/message.txt\n");
embeddedartists 0:0d5190d379d3 161 }
embeddedartists 0:0d5190d379d3 162 handleError(STATE_ERR_SPIFS, "Failed to read >= 10 bytes from /spi/message.txt\n");
embeddedartists 0:0d5190d379d3 163 }
embeddedartists 0:0d5190d379d3 164 handleError(STATE_ERR_SPIFS, "Failed to open /spi/message.txt\n");
embeddedartists 0:0d5190d379d3 165 }
embeddedartists 0:0d5190d379d3 166
embeddedartists 0:0d5190d379d3 167 static void test_acc()
embeddedartists 0:0d5190d379d3 168 {
embeddedartists 1:47680ec5d783 169 #if 1
embeddedartists 1:47680ec5d783 170 MMA7455 sensor(P0_27, P0_28);
embeddedartists 1:47680ec5d783 171
embeddedartists 1:47680ec5d783 172 //Try to initialize the accelerometer
embeddedartists 1:47680ec5d783 173 if (!sensor.setMode(MMA7455::ModeMeasurement)) {
embeddedartists 1:47680ec5d783 174 handleError(STATE_ERR_ACC, "Unable to set mode for MMA7455!\n");
embeddedartists 1:47680ec5d783 175 }
embeddedartists 1:47680ec5d783 176
embeddedartists 1:47680ec5d783 177 if (!sensor.calibrate()) {
embeddedartists 1:47680ec5d783 178 handleError(STATE_ERR_ACC, "Failed to calibrate MMA7455!\n");
embeddedartists 1:47680ec5d783 179 }
embeddedartists 1:47680ec5d783 180
embeddedartists 1:47680ec5d783 181 int val[3] = { 0, 0, 0};
embeddedartists 1:47680ec5d783 182 int max[3] = {-1000,-1000,-1000};
embeddedartists 1:47680ec5d783 183 int min[3] = { 1000, 1000, 1000};
embeddedartists 1:47680ec5d783 184 int i;
embeddedartists 1:47680ec5d783 185 Timer t;
embeddedartists 1:47680ec5d783 186 t.start();
embeddedartists 1:47680ec5d783 187 while (t.read() < 5) {
embeddedartists 1:47680ec5d783 188 if (!sensor.read(val[0], val[1], val[2])) {
embeddedartists 1:47680ec5d783 189 handleError(STATE_ERR_ACC, "Failed to read accelerometer data!\n");
embeddedartists 1:47680ec5d783 190 }
embeddedartists 1:47680ec5d783 191 printf("ACC: x,y,z = {%5d, %5d, %5d}\n", val[0], val[1], val[2]);
embeddedartists 1:47680ec5d783 192 for (i = 0; i < 3; i++) {
embeddedartists 1:47680ec5d783 193 if (val[i] < min[i]) {
embeddedartists 1:47680ec5d783 194 min[i] = val[i];
embeddedartists 1:47680ec5d783 195 }
embeddedartists 1:47680ec5d783 196 if (val[i] > max[i]) {
embeddedartists 1:47680ec5d783 197 max[i] = val[i];
embeddedartists 1:47680ec5d783 198 }
embeddedartists 1:47680ec5d783 199 }
embeddedartists 1:47680ec5d783 200 for (i = 0; i < 3; i++) {
embeddedartists 1:47680ec5d783 201 if ((max[i] - min[i]) < 2) {
embeddedartists 1:47680ec5d783 202 break;
embeddedartists 1:47680ec5d783 203 }
embeddedartists 1:47680ec5d783 204 if (i == 2) {
embeddedartists 1:47680ec5d783 205 printf("All three axis work\n");
embeddedartists 1:47680ec5d783 206 return;
embeddedartists 1:47680ec5d783 207 }
embeddedartists 1:47680ec5d783 208 }
embeddedartists 1:47680ec5d783 209 wait(0.1);
embeddedartists 1:47680ec5d783 210 }
embeddedartists 1:47680ec5d783 211 printf("Not enough variation X {%d..%d}, Y {%d..%d}, Z {%d..%d}!\n",
embeddedartists 1:47680ec5d783 212 min[0], max[0], min[1], max[1], min[2], max[2]);
embeddedartists 1:47680ec5d783 213 handleError(STATE_ERR_ACC, "Accelerometer data invalid\n");
embeddedartists 1:47680ec5d783 214 #else
embeddedartists 0:0d5190d379d3 215 MMA7455 sensor(P0_27, P0_28);
embeddedartists 0:0d5190d379d3 216
embeddedartists 0:0d5190d379d3 217 //Try to initialize the accelerometer
embeddedartists 0:0d5190d379d3 218 if (!sensor.setMode(MMA7455::ModeMeasurement)) {
embeddedartists 0:0d5190d379d3 219 handleError(STATE_ERR_ACC, "Unable to set mode for MMA7455!\n");
embeddedartists 0:0d5190d379d3 220 }
embeddedartists 0:0d5190d379d3 221
embeddedartists 0:0d5190d379d3 222 printf("Put on flat surface and press button to calibrate!\n");
embeddedartists 0:0d5190d379d3 223 while (button.read() != BUTTON_PRESSED) {}
embeddedartists 0:0d5190d379d3 224 while (button.read() == BUTTON_PRESSED) {}
embeddedartists 0:0d5190d379d3 225
embeddedartists 0:0d5190d379d3 226 if (!sensor.calibrate()) {
embeddedartists 0:0d5190d379d3 227 handleError(STATE_ERR_ACC, "Failed to calibrate MMA7455!\n");
embeddedartists 0:0d5190d379d3 228 }
embeddedartists 0:0d5190d379d3 229
embeddedartists 1:47680ec5d783 230 printf("Now tilt the board in all directions (max 10 seconds)...\n");
embeddedartists 0:0d5190d379d3 231 int x=0, y=0, z=0;
embeddedartists 1:47680ec5d783 232 uint8_t done = 0;
embeddedartists 1:47680ec5d783 233 char msg[30] = {0};
embeddedartists 0:0d5190d379d3 234
embeddedartists 0:0d5190d379d3 235 Timer t;
embeddedartists 0:0d5190d379d3 236 t.start();
embeddedartists 1:47680ec5d783 237 while ((t.read() < 10) && (done != 0x3f)) {
embeddedartists 0:0d5190d379d3 238 if (!sensor.read(x, y, z)) {
embeddedartists 0:0d5190d379d3 239 handleError(STATE_ERR_ACC, "Failed to read accelerometer data!\n");
embeddedartists 0:0d5190d379d3 240 }
embeddedartists 1:47680ec5d783 241 printf("ACC: x,y,z = {%5d, %5d, %5d} %s\n", x, y, z, msg);
embeddedartists 1:47680ec5d783 242 if ((x < ACC_MIN_LIMIT) && !(done & ACC_XMIN)) {
embeddedartists 1:47680ec5d783 243 done |= ACC_XMIN;
embeddedartists 1:47680ec5d783 244 printf("Tilted XMIN\n");
embeddedartists 1:47680ec5d783 245 } else if ((x > ACC_MAX_LIMIT) && !(done & ACC_XMAX)) {
embeddedartists 1:47680ec5d783 246 done |= ACC_XMAX;
embeddedartists 1:47680ec5d783 247 printf("Tilted XMAX\n");
embeddedartists 1:47680ec5d783 248 }
embeddedartists 1:47680ec5d783 249 if ((y < ACC_MIN_LIMIT) && !(done & ACC_YMIN)) {
embeddedartists 1:47680ec5d783 250 done |= ACC_YMIN;
embeddedartists 1:47680ec5d783 251 printf("Tilted YMIN\n");
embeddedartists 1:47680ec5d783 252 } else if ((y > ACC_MAX_LIMIT) && !(done & ACC_YMAX)) {
embeddedartists 1:47680ec5d783 253 done |= ACC_YMAX;
embeddedartists 1:47680ec5d783 254 printf("Tilted XMAX\n");
embeddedartists 1:47680ec5d783 255 }
embeddedartists 1:47680ec5d783 256 if ((z < ACC_MIN_LIMIT) && !(done & ACC_ZMIN)) {
embeddedartists 1:47680ec5d783 257 done |= ACC_ZMIN;
embeddedartists 1:47680ec5d783 258 printf("Tilted ZMIN\n");
embeddedartists 1:47680ec5d783 259 } else if ((z > ACC_MAX_LIMIT) && !(done & ACC_ZMAX)) {
embeddedartists 1:47680ec5d783 260 done |= ACC_ZMAX;
embeddedartists 1:47680ec5d783 261 printf("Tilted ZMAX\n");
embeddedartists 1:47680ec5d783 262 }
embeddedartists 1:47680ec5d783 263 wait(0.1);
embeddedartists 0:0d5190d379d3 264 }
embeddedartists 0:0d5190d379d3 265 printf("Done with ACC tests!\n");
embeddedartists 1:47680ec5d783 266 #endif
embeddedartists 0:0d5190d379d3 267 }
embeddedartists 0:0d5190d379d3 268
embeddedartists 0:0d5190d379d3 269 static void test_lm75()
embeddedartists 0:0d5190d379d3 270 {
embeddedartists 0:0d5190d379d3 271 //Create an LM75B object at 0x92/0x93 (ADDRESS_1)
embeddedartists 0:0d5190d379d3 272 LM75B sensor(P0_27, P0_28, LM75B::ADDRESS_1);
embeddedartists 1:47680ec5d783 273
embeddedartists 1:47680ec5d783 274 printf("Testing LM75 temperature sensor...\n");
embeddedartists 1:47680ec5d783 275
embeddedartists 0:0d5190d379d3 276 //Try to open the LM75B
embeddedartists 0:0d5190d379d3 277 if (sensor.open()) {
embeddedartists 0:0d5190d379d3 278 printf("LM75 Device detected!\n");
embeddedartists 0:0d5190d379d3 279
embeddedartists 0:0d5190d379d3 280 int i = 10;
embeddedartists 0:0d5190d379d3 281 while (i--) {
embeddedartists 1:47680ec5d783 282 float f = (float)sensor;
embeddedartists 0:0d5190d379d3 283 //Print the current temperature
embeddedartists 1:47680ec5d783 284 printf("Temp = %.3f\n", f);
embeddedartists 0:0d5190d379d3 285
embeddedartists 1:47680ec5d783 286 if ((f >= 15) && (f <= 45)) {
embeddedartists 1:47680ec5d783 287 printf("Temp in 15..45 range - test passed\n");
embeddedartists 1:47680ec5d783 288 break;
embeddedartists 1:47680ec5d783 289 }
embeddedartists 1:47680ec5d783 290
embeddedartists 0:0d5190d379d3 291 //Sleep for 0.5 seconds
embeddedartists 0:0d5190d379d3 292 wait(0.5);
embeddedartists 0:0d5190d379d3 293 }
embeddedartists 1:47680ec5d783 294 if (i == 0) {
embeddedartists 1:47680ec5d783 295 handleError(STATE_ERR_LM75, "LM75 No temp in range 15..45!\n");
embeddedartists 1:47680ec5d783 296 }
embeddedartists 0:0d5190d379d3 297 } else {
embeddedartists 0:0d5190d379d3 298 handleError(STATE_ERR_LM75, "LM75 Device not detected!\n");
embeddedartists 0:0d5190d379d3 299 }
embeddedartists 0:0d5190d379d3 300 }
embeddedartists 0:0d5190d379d3 301
embeddedartists 0:0d5190d379d3 302 static void test_trimpot()
embeddedartists 0:0d5190d379d3 303 {
embeddedartists 0:0d5190d379d3 304 AnalogIn trimpot(p15);
embeddedartists 1:47680ec5d783 305 bool min = false;
embeddedartists 1:47680ec5d783 306 bool max = false;
embeddedartists 0:0d5190d379d3 307
embeddedartists 0:0d5190d379d3 308 printf("Reading trimpot for 5 seconds...\n");
embeddedartists 0:0d5190d379d3 309
embeddedartists 0:0d5190d379d3 310 for (int i = 0; i < 50; i++) {
embeddedartists 1:47680ec5d783 311 float f = trimpot.read();
embeddedartists 1:47680ec5d783 312 printf("Trimpot = %.3f\n", f);
embeddedartists 1:47680ec5d783 313 if (f < 0.01f) {
embeddedartists 1:47680ec5d783 314 min = true;
embeddedartists 1:47680ec5d783 315 } else if (f > 0.99f) {
embeddedartists 1:47680ec5d783 316 max = true;
embeddedartists 1:47680ec5d783 317 }
embeddedartists 1:47680ec5d783 318 if (min && max) {
embeddedartists 1:47680ec5d783 319 printf("Test passed\n");
embeddedartists 1:47680ec5d783 320 return;
embeddedartists 1:47680ec5d783 321 }
embeddedartists 1:47680ec5d783 322
embeddedartists 0:0d5190d379d3 323 wait(0.1);
embeddedartists 1:47680ec5d783 324 }
embeddedartists 1:47680ec5d783 325 handleError(STATE_ERR_TRIMPOT, "Trimpot does not reach limits (0.01 - 0.99)!\n");
embeddedartists 0:0d5190d379d3 326 }
embeddedartists 0:0d5190d379d3 327
embeddedartists 0:0d5190d379d3 328 static void outputShiftReg(uint8_t val)
embeddedartists 0:0d5190d379d3 329 {
embeddedartists 0:0d5190d379d3 330 shiftregCS = 0;
embeddedartists 0:0d5190d379d3 331 shiftreg.write(val);
embeddedartists 0:0d5190d379d3 332 shiftregCS = 1;
embeddedartists 0:0d5190d379d3 333 }
embeddedartists 0:0d5190d379d3 334 static void test_shiftreg()
embeddedartists 0:0d5190d379d3 335 {
embeddedartists 0:0d5190d379d3 336 outputShiftReg(0x1);
embeddedartists 0:0d5190d379d3 337 wait(0.1);
embeddedartists 0:0d5190d379d3 338 outputShiftReg(0x2);
embeddedartists 0:0d5190d379d3 339 wait(0.1);
embeddedartists 0:0d5190d379d3 340 outputShiftReg(0x4);
embeddedartists 0:0d5190d379d3 341 wait(0.1);
embeddedartists 0:0d5190d379d3 342 outputShiftReg(0x8);
embeddedartists 0:0d5190d379d3 343 wait(0.1);
embeddedartists 0:0d5190d379d3 344 outputShiftReg(0x10);
embeddedartists 0:0d5190d379d3 345 wait(0.1);
embeddedartists 0:0d5190d379d3 346 outputShiftReg(0x20);
embeddedartists 0:0d5190d379d3 347 wait(0.1);
embeddedartists 0:0d5190d379d3 348 outputShiftReg(0x40);
embeddedartists 0:0d5190d379d3 349 wait(0.1);
embeddedartists 0:0d5190d379d3 350 outputShiftReg(0x80);
embeddedartists 0:0d5190d379d3 351 wait(0.1);
embeddedartists 0:0d5190d379d3 352 outputShiftReg(0x40);
embeddedartists 0:0d5190d379d3 353 wait(0.1);
embeddedartists 0:0d5190d379d3 354 outputShiftReg(0x20);
embeddedartists 0:0d5190d379d3 355 wait(0.1);
embeddedartists 0:0d5190d379d3 356 outputShiftReg(0x10);
embeddedartists 0:0d5190d379d3 357 wait(0.1);
embeddedartists 0:0d5190d379d3 358 outputShiftReg(0x8);
embeddedartists 0:0d5190d379d3 359 wait(0.1);
embeddedartists 0:0d5190d379d3 360 outputShiftReg(0x4);
embeddedartists 0:0d5190d379d3 361 wait(0.1);
embeddedartists 0:0d5190d379d3 362 outputShiftReg(0x2);
embeddedartists 0:0d5190d379d3 363 wait(0.1);
embeddedartists 0:0d5190d379d3 364 outputShiftReg(0x1);
embeddedartists 0:0d5190d379d3 365 wait(0.1);
embeddedartists 0:0d5190d379d3 366 outputShiftReg(0x0);
embeddedartists 0:0d5190d379d3 367 }
embeddedartists 0:0d5190d379d3 368
embeddedartists 0:0d5190d379d3 369
embeddedartists 0:0d5190d379d3 370 static void test_joystick()
embeddedartists 0:0d5190d379d3 371 {
embeddedartists 0:0d5190d379d3 372 DigitalIn up(p32);//p39);
embeddedartists 0:0d5190d379d3 373 DigitalIn down(p38);//p32);
embeddedartists 0:0d5190d379d3 374 DigitalIn left(p39);//p38);
embeddedartists 0:0d5190d379d3 375 DigitalIn right(p37);
embeddedartists 0:0d5190d379d3 376 DigitalIn center(p31);
embeddedartists 0:0d5190d379d3 377
embeddedartists 0:0d5190d379d3 378 printf("Reading joystick for 10 seconds or all directions...\n");
embeddedartists 0:0d5190d379d3 379 uint16_t mask = 0;
embeddedartists 0:0d5190d379d3 380
embeddedartists 0:0d5190d379d3 381 for (int i = 0; i < 100; i++) {
embeddedartists 0:0d5190d379d3 382 bool line = false;
embeddedartists 0:0d5190d379d3 383 if (up.read() == 0) { printf("UP "); line = true; mask |= 0x01; }
embeddedartists 0:0d5190d379d3 384 if (down.read() == 0) { printf("DOWN "); line = true; mask |= 0x02; }
embeddedartists 0:0d5190d379d3 385 if (left.read() == 0) { printf("LEFT "); line = true; mask |= 0x04; }
embeddedartists 0:0d5190d379d3 386 if (right.read() == 0) { printf("RIGHT "); line = true; mask |= 0x08; }
embeddedartists 0:0d5190d379d3 387 if (center.read() == 0) { printf("CENTER ");line = true; mask |= 0x10; }
embeddedartists 0:0d5190d379d3 388 if (line) {
embeddedartists 0:0d5190d379d3 389 printf("\n");
embeddedartists 0:0d5190d379d3 390 }
embeddedartists 0:0d5190d379d3 391 if (mask == 0x1F) {
embeddedartists 0:0d5190d379d3 392 printf("All directions tested. Done!\n");
embeddedartists 1:47680ec5d783 393 return;
embeddedartists 0:0d5190d379d3 394 }
embeddedartists 0:0d5190d379d3 395 wait(0.1);
embeddedartists 1:47680ec5d783 396 if (i%10 == 0) {
embeddedartists 1:47680ec5d783 397 printf("%ds\n", (100-i)/10);
embeddedartists 1:47680ec5d783 398 }
embeddedartists 1:47680ec5d783 399 }
embeddedartists 1:47680ec5d783 400 handleError(STATE_ERR_JOYSTICK, "Failed to detect all joystick directions\n");
embeddedartists 0:0d5190d379d3 401 }
embeddedartists 0:0d5190d379d3 402
embeddedartists 0:0d5190d379d3 403 static void test_rgb()
embeddedartists 0:0d5190d379d3 404 {
embeddedartists 1:47680ec5d783 405 printf("LED Tests: All off. Press button to continue\n");
embeddedartists 1:47680ec5d783 406 *ledRed = LED_OFF;
embeddedartists 1:47680ec5d783 407 *ledGreen = LED_OFF;
embeddedartists 1:47680ec5d783 408 *ledBlue = LED_OFF;
embeddedartists 0:0d5190d379d3 409 waitForButtonClick();
embeddedartists 0:0d5190d379d3 410
embeddedartists 1:47680ec5d783 411 printf("LED Tests: RED on. Press button to continue\n");
embeddedartists 1:47680ec5d783 412 *ledRed = LED_ON;
embeddedartists 1:47680ec5d783 413 *ledGreen = LED_OFF;
embeddedartists 1:47680ec5d783 414 *ledBlue = LED_OFF;
embeddedartists 0:0d5190d379d3 415 waitForButtonClick();
embeddedartists 0:0d5190d379d3 416
embeddedartists 1:47680ec5d783 417 printf("LED Tests: GREEN on. Press button to continue\n");
embeddedartists 1:47680ec5d783 418 *ledRed = LED_OFF;
embeddedartists 1:47680ec5d783 419 *ledGreen = LED_ON;
embeddedartists 1:47680ec5d783 420 *ledBlue = LED_OFF;
embeddedartists 0:0d5190d379d3 421 waitForButtonClick();
embeddedartists 0:0d5190d379d3 422
embeddedartists 1:47680ec5d783 423 printf("LED Tests: BLUE on. Press button to continue\n");
embeddedartists 1:47680ec5d783 424 *ledRed = LED_OFF;
embeddedartists 1:47680ec5d783 425 *ledGreen = LED_OFF;
embeddedartists 1:47680ec5d783 426 *ledBlue = LED_ON;
embeddedartists 0:0d5190d379d3 427 waitForButtonClick();
embeddedartists 0:0d5190d379d3 428
embeddedartists 1:47680ec5d783 429 printf("LED Tests: All on. Press button to continue\n");
embeddedartists 1:47680ec5d783 430 *ledRed = LED_ON;
embeddedartists 1:47680ec5d783 431 *ledGreen = LED_ON;
embeddedartists 1:47680ec5d783 432 *ledBlue = LED_ON;
embeddedartists 0:0d5190d379d3 433 waitForButtonClick();
embeddedartists 1:47680ec5d783 434
embeddedartists 1:47680ec5d783 435 // Turn them off again
embeddedartists 1:47680ec5d783 436 *ledRed = LED_OFF;
embeddedartists 1:47680ec5d783 437 *ledGreen = LED_OFF;
embeddedartists 1:47680ec5d783 438 *ledBlue = LED_OFF;
embeddedartists 0:0d5190d379d3 439 }
embeddedartists 0:0d5190d379d3 440
embeddedartists 0:0d5190d379d3 441 static void test_audio()
embeddedartists 0:0d5190d379d3 442 {
embeddedartists 1:47680ec5d783 443 printf("Testing audio...\n");
embeddedartists 0:0d5190d379d3 444 WM8731 audio(P0_27, P0_28);
embeddedartists 0:0d5190d379d3 445 if (!audio.writeCmd(WM8731::REG_R15_RESET, 0x0000)) {
embeddedartists 0:0d5190d379d3 446 handleError(STATE_ERR_AUDIO, "Failed to send command to audio codec\n");
embeddedartists 0:0d5190d379d3 447 }
embeddedartists 0:0d5190d379d3 448 }
embeddedartists 0:0d5190d379d3 449
embeddedartists 0:0d5190d379d3 450 static void test_TextLCD()
embeddedartists 0:0d5190d379d3 451 {
embeddedartists 0:0d5190d379d3 452 SPI spi_lcd(p5, p6, p7); // MOSI, MISO, SCLK
embeddedartists 0:0d5190d379d3 453 TextLCD_SPI lcd(&spi_lcd, p30, TextLCD::LCD16x2); // SPI bus, CS pin, LCD Type ok
embeddedartists 0:0d5190d379d3 454
embeddedartists 0:0d5190d379d3 455 lcd.cls();
embeddedartists 0:0d5190d379d3 456 lcd.locate(0, 0);
embeddedartists 0:0d5190d379d3 457 lcd.putc('E');
embeddedartists 0:0d5190d379d3 458 lcd.putc('m');
embeddedartists 0:0d5190d379d3 459 lcd.putc('b');
embeddedartists 0:0d5190d379d3 460 lcd.putc('e');
embeddedartists 0:0d5190d379d3 461 lcd.putc('d');
embeddedartists 0:0d5190d379d3 462 lcd.putc('d');
embeddedartists 0:0d5190d379d3 463 lcd.putc('e');
embeddedartists 0:0d5190d379d3 464 lcd.putc('d');
embeddedartists 0:0d5190d379d3 465 lcd.putc(' ');
embeddedartists 0:0d5190d379d3 466 lcd.putc('A');
embeddedartists 0:0d5190d379d3 467 lcd.putc('r');
embeddedartists 0:0d5190d379d3 468 lcd.putc('t');
embeddedartists 0:0d5190d379d3 469 lcd.putc('i');
embeddedartists 0:0d5190d379d3 470 lcd.putc('s');
embeddedartists 0:0d5190d379d3 471 lcd.putc('t');
embeddedartists 0:0d5190d379d3 472 lcd.putc('s');
embeddedartists 0:0d5190d379d3 473 lcd.putc('!');
embeddedartists 0:0d5190d379d3 474 lcd.setCursor(TextLCD::CurOff_BlkOn);
embeddedartists 0:0d5190d379d3 475 }
embeddedartists 0:0d5190d379d3 476
embeddedartists 0:0d5190d379d3 477 static void test_DisplayModule()
embeddedartists 0:0d5190d379d3 478 {
embeddedartists 0:0d5190d379d3 479 // Test of DM-TFT18-101 display (http://www.displaymodule.com/collections/featured-modules/products/dm-tft18-101)
embeddedartists 0:0d5190d379d3 480 DmTftHX8353C tft(p5, p7, p30, p17, p16); // mosi, clk, cs, dc, rst
embeddedartists 0:0d5190d379d3 481 tft.init();
embeddedartists 0:0d5190d379d3 482
embeddedartists 0:0d5190d379d3 483 BubbleDemo bubbleDemo(&tft, tft.width(), tft.height());
embeddedartists 0:0d5190d379d3 484 bubbleDemo.run(750, 20);
embeddedartists 0:0d5190d379d3 485 }
embeddedartists 0:0d5190d379d3 486
embeddedartists 1:47680ec5d783 487 static void drawBars(int w, int h, uint32_t frameBuf)
embeddedartists 1:47680ec5d783 488 {
embeddedartists 1:47680ec5d783 489 uint16_t* p = (uint16_t*)frameBuf;
embeddedartists 1:47680ec5d783 490 int third = w/3;
embeddedartists 1:47680ec5d783 491 for (int y = 0; y < h; y++) {
embeddedartists 1:47680ec5d783 492 int x;
embeddedartists 1:47680ec5d783 493 for (x = 0; x < third; x++) {
embeddedartists 1:47680ec5d783 494 *p = 0xf800;
embeddedartists 1:47680ec5d783 495 p++;
embeddedartists 1:47680ec5d783 496 }
embeddedartists 1:47680ec5d783 497 for (; x < 2*third; x++) {
embeddedartists 1:47680ec5d783 498 *p = 0x07e0;
embeddedartists 1:47680ec5d783 499 p++;
embeddedartists 1:47680ec5d783 500 }
embeddedartists 1:47680ec5d783 501 for (; x < w; x++) {
embeddedartists 1:47680ec5d783 502 *p = 0x001f;
embeddedartists 1:47680ec5d783 503 p++;
embeddedartists 1:47680ec5d783 504 }
embeddedartists 1:47680ec5d783 505 }
embeddedartists 1:47680ec5d783 506 }
embeddedartists 1:47680ec5d783 507
embeddedartists 1:47680ec5d783 508 static void calibrate_drawMarker(Graphics &g, uint16_t x, uint16_t y, bool erase)
embeddedartists 1:47680ec5d783 509 {
embeddedartists 1:47680ec5d783 510 uint16_t color = (erase ? 0x0000 : 0xffff);
embeddedartists 1:47680ec5d783 511 g.put_line(x-15, y, x+15, y, color);
embeddedartists 1:47680ec5d783 512 g.put_line(x, y-15, x, y+15, color);
embeddedartists 1:47680ec5d783 513 g.put_circle(x, y, color, 10, false);
embeddedartists 1:47680ec5d783 514 }
embeddedartists 1:47680ec5d783 515
embeddedartists 1:47680ec5d783 516 static void calibrate_display(TouchPanel* tp, uint32_t framebuffer, LcdController::Config &lcd)
embeddedartists 1:47680ec5d783 517 {
embeddedartists 1:47680ec5d783 518 bool morePoints = true;
embeddedartists 1:47680ec5d783 519 uint16_t x, y;
embeddedartists 1:47680ec5d783 520 int point = 0;
embeddedartists 1:47680ec5d783 521 Graphics g((uint16_t*)framebuffer, lcd.width, lcd.height);
embeddedartists 1:47680ec5d783 522 if (!tp->init(lcd.width, lcd.height)) {
embeddedartists 1:47680ec5d783 523 handleError(STATE_ERR_TOUCH, "Failed to initialize touch controller\n");
embeddedartists 1:47680ec5d783 524 }
embeddedartists 1:47680ec5d783 525 if (!tp->calibrateStart()) {
embeddedartists 1:47680ec5d783 526 handleError(STATE_ERR_TOUCH, "Failed to start calibration\n");
embeddedartists 1:47680ec5d783 527 }
embeddedartists 1:47680ec5d783 528 while (morePoints) {
embeddedartists 1:47680ec5d783 529 if (point++ > 0) {
embeddedartists 1:47680ec5d783 530 // erase old location
embeddedartists 1:47680ec5d783 531 calibrate_drawMarker(g, x, y, true);
embeddedartists 1:47680ec5d783 532 }
embeddedartists 1:47680ec5d783 533 if (!tp->getNextCalibratePoint(&x, &y)) {
embeddedartists 1:47680ec5d783 534 handleError(STATE_ERR_TOUCH, "Failed to get calibration point\n");
embeddedartists 1:47680ec5d783 535 }
embeddedartists 1:47680ec5d783 536 calibrate_drawMarker(g, x, y, false);
embeddedartists 1:47680ec5d783 537 if (!tp->waitForCalibratePoint(&morePoints, 0)) {
embeddedartists 1:47680ec5d783 538 handleError(STATE_ERR_TOUCH, "Failed to get user click\n");
embeddedartists 1:47680ec5d783 539 }
embeddedartists 1:47680ec5d783 540 }
embeddedartists 1:47680ec5d783 541
embeddedartists 1:47680ec5d783 542 // erase old location
embeddedartists 1:47680ec5d783 543 calibrate_drawMarker(g, x, y, true);
embeddedartists 1:47680ec5d783 544
embeddedartists 1:47680ec5d783 545 // allow user to draw for 5 seconds
embeddedartists 1:47680ec5d783 546 Timer t;
embeddedartists 1:47680ec5d783 547 t.start();
embeddedartists 1:47680ec5d783 548 TouchPanel::touchCoordinate_t tc;
embeddedartists 1:47680ec5d783 549 while(t.read() < 6) {
embeddedartists 1:47680ec5d783 550 if (tp->read(tc)) {
embeddedartists 1:47680ec5d783 551 //printf("TC: x,y,z = {%5d, %5d, %5d}\n", tc.x, tc.y, tc.z);
embeddedartists 1:47680ec5d783 552 if (tc.z) {
embeddedartists 1:47680ec5d783 553 g.put_dot(tc.x, tc.y, 0xffff);
embeddedartists 1:47680ec5d783 554 }
embeddedartists 1:47680ec5d783 555 }
embeddedartists 1:47680ec5d783 556 }
embeddedartists 1:47680ec5d783 557 }
embeddedartists 1:47680ec5d783 558
embeddedartists 1:47680ec5d783 559 static void test_Display()
embeddedartists 1:47680ec5d783 560 {
embeddedartists 1:47680ec5d783 561 if (sdram_init() == 1) {
embeddedartists 1:47680ec5d783 562 handleError(STATE_ERR_MEM, "Failed to initialize SDRAM\n");
embeddedartists 1:47680ec5d783 563 }
embeddedartists 1:47680ec5d783 564
embeddedartists 1:47680ec5d783 565 // Test of display attached with FPC connector, 0.5mm pitch
embeddedartists 1:47680ec5d783 566 EaLcdBoard::Result result;
embeddedartists 1:47680ec5d783 567 LcdController::Config lcdCfg(40, 5, 2, 480, 8, 8, 2, 272, false, false, true, true, 1, LcdController::Bpp_16_565, 9000000, LcdController::Tft, false);
embeddedartists 1:47680ec5d783 568 char* initStr = "v1,cd0,c50,cc0,c30,d100,c31,d100,cd1,d10,o,c51,cc100";
embeddedartists 1:47680ec5d783 569 EaLcdBoardGPIO lcdBoard(P0_27, P0_28);
embeddedartists 1:47680ec5d783 570 int num = lcdCfg.width * lcdCfg.height * 2;
embeddedartists 1:47680ec5d783 571
embeddedartists 1:47680ec5d783 572 uint32_t frameBuf = (uint32_t) malloc(num);
embeddedartists 1:47680ec5d783 573 if (frameBuf == 0) {
embeddedartists 1:47680ec5d783 574 handleError(STATE_ERR_MEM, "Failed to allocate memory for framebuffer\n");
embeddedartists 1:47680ec5d783 575 }
embeddedartists 1:47680ec5d783 576 drawBars(lcdCfg.width, lcdCfg.height, frameBuf);
embeddedartists 1:47680ec5d783 577
embeddedartists 1:47680ec5d783 578 result = lcdBoard.open(&lcdCfg, initStr);
embeddedartists 1:47680ec5d783 579 if (result != EaLcdBoard::Ok) {
embeddedartists 1:47680ec5d783 580 printf("Error Code: %d\n", result);
embeddedartists 1:47680ec5d783 581 handleError(STATE_ERR_MEM, "Failed to open display\n");
embeddedartists 1:47680ec5d783 582 }
embeddedartists 1:47680ec5d783 583
embeddedartists 1:47680ec5d783 584 result = lcdBoard.setFrameBuffer(frameBuf);
embeddedartists 1:47680ec5d783 585 if (result != EaLcdBoard::Ok) {
embeddedartists 1:47680ec5d783 586 printf("Error Code: %d\n", result);
embeddedartists 1:47680ec5d783 587 handleError(STATE_ERR_MEM, "Failed to set framebuffer\n");
embeddedartists 1:47680ec5d783 588 }
embeddedartists 1:47680ec5d783 589
embeddedartists 1:47680ec5d783 590 printf("Initialized. Control contrast with right trimpot (8 seconds)\n");
embeddedartists 1:47680ec5d783 591 AnalogIn trimpot(p15);
embeddedartists 1:47680ec5d783 592 Timer t;
embeddedartists 1:47680ec5d783 593 t.start();
embeddedartists 1:47680ec5d783 594 int delays = 0;
embeddedartists 1:47680ec5d783 595 float last = -0.365;
embeddedartists 1:47680ec5d783 596 while (t.read() < 8) {
embeddedartists 1:47680ec5d783 597 float f = trimpot.read();
embeddedartists 1:47680ec5d783 598 if (f != last) {
embeddedartists 1:47680ec5d783 599 last = f;
embeddedartists 1:47680ec5d783 600 lcdBoard.setBC(100*f);
embeddedartists 1:47680ec5d783 601 }
embeddedartists 1:47680ec5d783 602 wait(0.1);
embeddedartists 1:47680ec5d783 603 if (delays%10 == 0) {
embeddedartists 1:47680ec5d783 604 printf("%ds\n", (80-delays)/10);
embeddedartists 1:47680ec5d783 605 }
embeddedartists 1:47680ec5d783 606 delays++;
embeddedartists 1:47680ec5d783 607 }
embeddedartists 1:47680ec5d783 608
embeddedartists 1:47680ec5d783 609 AR1021I2C touch(P0_27, P0_28, P2_25);
embeddedartists 1:47680ec5d783 610 int vh,vl,r,ty;
embeddedartists 1:47680ec5d783 611 if (touch.info(&vh,&vl,&r,&ty)) {
embeddedartists 1:47680ec5d783 612 printf("Touch info: v%d.%d, %d-bit resolution, type 0x%x\n", vh, vl, r, ty);
embeddedartists 1:47680ec5d783 613 } else {
embeddedartists 1:47680ec5d783 614 printf("Failed to read touch information\n");
embeddedartists 1:47680ec5d783 615 }
embeddedartists 1:47680ec5d783 616
embeddedartists 1:47680ec5d783 617 printf("Calibrate display\n");
embeddedartists 1:47680ec5d783 618 calibrate_display(&touch, frameBuf, lcdCfg);
embeddedartists 1:47680ec5d783 619 if (allTestsPassed) {
embeddedartists 1:47680ec5d783 620 memset((uint8_t*)frameBuf, 0x03, num); // GREEN
embeddedartists 1:47680ec5d783 621 } else {
embeddedartists 1:47680ec5d783 622 memset((uint8_t*)frameBuf, 0xe0, num); // RED
embeddedartists 1:47680ec5d783 623 }
embeddedartists 1:47680ec5d783 624 }
embeddedartists 1:47680ec5d783 625
embeddedartists 1:47680ec5d783 626 static void setupSerial(int baudrate)
embeddedartists 1:47680ec5d783 627 {
embeddedartists 1:47680ec5d783 628 // This works because both the default serial (used by printf) and the s instance
embeddedartists 1:47680ec5d783 629 // (used by s.printf) would use the same underlying UART code so setting the baudrate
embeddedartists 1:47680ec5d783 630 // in one affects the other.
embeddedartists 1:47680ec5d783 631 Serial s(USBTX, USBRX);
embeddedartists 1:47680ec5d783 632 s.baud(baudrate);
embeddedartists 1:47680ec5d783 633 }
embeddedartists 1:47680ec5d783 634
embeddedartists 0:0d5190d379d3 635 int main() {
embeddedartists 1:47680ec5d783 636 setupSerial(115200);
embeddedartists 1:47680ec5d783 637 printf("\n"
embeddedartists 1:47680ec5d783 638 "---\n"
embeddedartists 1:47680ec5d783 639 "Production Test Program: LPC4088 Experiment Base Board\n"
embeddedartists 1:47680ec5d783 640 "Build Date: " __DATE__ " at " __TIME__ "\n"
embeddedartists 1:47680ec5d783 641 "\n");
embeddedartists 0:0d5190d379d3 642
embeddedartists 0:0d5190d379d3 643 shiftregCS = 1;
embeddedartists 0:0d5190d379d3 644 button.mode(PullUp);
embeddedartists 0:0d5190d379d3 645
embeddedartists 1:47680ec5d783 646 resetLEDs();
embeddedartists 0:0d5190d379d3 647
embeddedartists 0:0d5190d379d3 648 outputShiftReg(0x0);
embeddedartists 0:0d5190d379d3 649
embeddedartists 0:0d5190d379d3 650 //startup flash behaviour
embeddedartists 0:0d5190d379d3 651 for(int i=0; i<10; i++)
embeddedartists 0:0d5190d379d3 652 {
embeddedartists 1:47680ec5d783 653 *ledRed = LED_ON;
embeddedartists 0:0d5190d379d3 654 wait(0.05);
embeddedartists 1:47680ec5d783 655 *ledRed = LED_OFF;
embeddedartists 0:0d5190d379d3 656 wait(0.05);
embeddedartists 0:0d5190d379d3 657 }
embeddedartists 0:0d5190d379d3 658 wait(1.0);
embeddedartists 0:0d5190d379d3 659 for(int i=0; i<10; i++)
embeddedartists 0:0d5190d379d3 660 {
embeddedartists 1:47680ec5d783 661 *ledGreen = LED_ON;
embeddedartists 0:0d5190d379d3 662 wait(0.05);
embeddedartists 1:47680ec5d783 663 *ledGreen = LED_OFF;
embeddedartists 0:0d5190d379d3 664 wait(0.05);
embeddedartists 0:0d5190d379d3 665 }
embeddedartists 0:0d5190d379d3 666 wait(1.0);
embeddedartists 0:0d5190d379d3 667 for(int i=0; i<10; i++)
embeddedartists 0:0d5190d379d3 668 {
embeddedartists 1:47680ec5d783 669 *ledBlue = LED_ON;
embeddedartists 0:0d5190d379d3 670 wait(0.05);
embeddedartists 1:47680ec5d783 671 *ledBlue = LED_OFF;
embeddedartists 0:0d5190d379d3 672 wait(0.05);
embeddedartists 0:0d5190d379d3 673 }
embeddedartists 0:0d5190d379d3 674 wait(1.0);
embeddedartists 0:0d5190d379d3 675
embeddedartists 1:47680ec5d783 676 test_micro_sd_card_mci();
embeddedartists 1:47680ec5d783 677 resetLEDs(); // MCI interface disables the RGB LED
embeddedartists 0:0d5190d379d3 678 // test_micro_sd_card_spi();
embeddedartists 0:0d5190d379d3 679 test_acc();
embeddedartists 0:0d5190d379d3 680 test_lm75();
embeddedartists 0:0d5190d379d3 681 test_trimpot();
embeddedartists 0:0d5190d379d3 682 test_joystick();
embeddedartists 0:0d5190d379d3 683 test_rgb();
embeddedartists 0:0d5190d379d3 684 test_audio();
embeddedartists 0:0d5190d379d3 685 //test_TextLCD();
embeddedartists 0:0d5190d379d3 686 //test_DisplayModule();
embeddedartists 1:47680ec5d783 687
embeddedartists 1:47680ec5d783 688 test_Display();
embeddedartists 1:47680ec5d783 689
embeddedartists 1:47680ec5d783 690 showTestResult();
embeddedartists 1:47680ec5d783 691
embeddedartists 1:47680ec5d783 692 //waitForButtonClick();
embeddedartists 0:0d5190d379d3 693
embeddedartists 0:0d5190d379d3 694 while(1) {
embeddedartists 0:0d5190d379d3 695 test_shiftreg();
embeddedartists 0:0d5190d379d3 696 myled = 1;
embeddedartists 0:0d5190d379d3 697 wait(0.2);
embeddedartists 0:0d5190d379d3 698 myled = 0;
embeddedartists 0:0d5190d379d3 699 wait(0.2);
embeddedartists 0:0d5190d379d3 700 }
embeddedartists 0:0d5190d379d3 701 }