Basic Example / test application for the on-board MICRON QSPI-Flash. Ported from DISCO_L476VG_QSPI. Added printing on serial output and LCD screen.

Dependencies:   BSP_DISCO_F746NG LCD_DISCO_F746NG QSPI_DISCO_F746NG TS_DISCO_F746NG mbed

Committer:
capsavon
Date:
Sun Nov 15 15:32:02 2015 +0000
Revision:
5:9b9fbd929243
Parent:
4:95cde28a5cf1
Added DEBUG pre-compiler directive.; Added display of the read value on the LCD and serial output.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
capsavon 2:a655d6640167 1 #include "main.h"
capsavon 2:a655d6640167 2
capsavon 5:9b9fbd929243 3 //#define DEBUG
capsavon 5:9b9fbd929243 4
capsavon 0:742b53764813 5 LCD_DISCO_F746NG lcd;
capsavon 0:742b53764813 6 TS_DISCO_F746NG ts;
capsavon 3:13b323fb08e8 7 DigitalOut myled(LED1);
capsavon 4:95cde28a5cf1 8 QSPI_DISCO_F746NG qspi;
capsavon 0:742b53764813 9
capsavon 4:95cde28a5cf1 10 Serial pc(USBTX, USBRX); // DEBUG
capsavon 2:a655d6640167 11
capsavon 0:742b53764813 12 int main()
capsavon 0:742b53764813 13 {
capsavon 0:742b53764813 14 TS_StateTypeDef TS_State;
capsavon 0:742b53764813 15 uint16_t x, y;
capsavon 0:742b53764813 16 uint8_t text[30];
capsavon 0:742b53764813 17 uint8_t status;
capsavon 0:742b53764813 18 uint8_t idx;
capsavon 0:742b53764813 19 uint8_t cleared = 0;
capsavon 0:742b53764813 20 uint8_t prev_nb_touches = 0;
capsavon 0:742b53764813 21
capsavon 0:742b53764813 22 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN DEMO", CENTER_MODE);
capsavon 3:13b323fb08e8 23 led_on();
capsavon 2:a655d6640167 24 wait(0.2);
capsavon 0:742b53764813 25
capsavon 0:742b53764813 26 status = ts.Init(lcd.GetXSize(), lcd.GetYSize());
capsavon 0:742b53764813 27 if (status != TS_OK) {
capsavon 0:742b53764813 28 lcd.Clear(LCD_COLOR_RED);
capsavon 0:742b53764813 29 lcd.SetBackColor(LCD_COLOR_RED);
capsavon 0:742b53764813 30 lcd.SetTextColor(LCD_COLOR_WHITE);
capsavon 0:742b53764813 31 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT FAIL", CENTER_MODE);
capsavon 0:742b53764813 32 } else {
capsavon 0:742b53764813 33 lcd.Clear(LCD_COLOR_GREEN);
capsavon 0:742b53764813 34 lcd.SetBackColor(LCD_COLOR_GREEN);
capsavon 0:742b53764813 35 lcd.SetTextColor(LCD_COLOR_WHITE);
capsavon 0:742b53764813 36 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT OK", CENTER_MODE);
capsavon 0:742b53764813 37 }
capsavon 0:742b53764813 38
capsavon 2:a655d6640167 39 wait(0.2);
capsavon 0:742b53764813 40 lcd.SetFont(&Font12);
capsavon 0:742b53764813 41 lcd.SetBackColor(LCD_COLOR_BLUE);
capsavon 0:742b53764813 42 lcd.SetTextColor(LCD_COLOR_WHITE);
capsavon 3:13b323fb08e8 43 led_off();
capsavon 1:7bec6efe01d9 44
capsavon 4:95cde28a5cf1 45 // Check initialization
capsavon 4:95cde28a5cf1 46 QSPI_Info pQSPI_Info;
capsavon 4:95cde28a5cf1 47 uint8_t WriteBuffer[BUFFER_SIZE] = "Hello World !!!";
capsavon 4:95cde28a5cf1 48 uint8_t ReadBuffer[BUFFER_SIZE];
capsavon 5:9b9fbd929243 49
capsavon 5:9b9fbd929243 50 #ifdef DEBUG
capsavon 4:95cde28a5cf1 51 pc.printf("\n\nQSPI demo started\n\r");
capsavon 5:9b9fbd929243 52 #endif // DEBUG
capsavon 5:9b9fbd929243 53
capsavon 4:95cde28a5cf1 54 uint8_t init_return = qspi.Init();
capsavon 4:95cde28a5cf1 55
capsavon 5:9b9fbd929243 56 #ifdef DEBUG
capsavon 5:9b9fbd929243 57 pc.printf("Init return value: %d\n\r", init_return);
capsavon 5:9b9fbd929243 58 #endif // DEBUG
capsavon 2:a655d6640167 59
capsavon 4:95cde28a5cf1 60 if (init_return != QSPI_OK)
capsavon 4:95cde28a5cf1 61 {
capsavon 5:9b9fbd929243 62 #ifdef DEBUG
capsavon 4:95cde28a5cf1 63 pc.printf("QSPI Initialization FAILED\n\r");
capsavon 5:9b9fbd929243 64 #endif // DEBUG
capsavon 4:95cde28a5cf1 65 lcd.Clear(LCD_COLOR_RED);
capsavon 4:95cde28a5cf1 66 lcd.SetBackColor(LCD_COLOR_RED);
capsavon 4:95cde28a5cf1 67 lcd.SetTextColor(LCD_COLOR_WHITE);
capsavon 4:95cde28a5cf1 68 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"QSPI Initialization FAILED", CENTER_MODE);
capsavon 4:95cde28a5cf1 69 }
capsavon 4:95cde28a5cf1 70 else
capsavon 4:95cde28a5cf1 71 {
capsavon 5:9b9fbd929243 72 #ifdef DEBUG
capsavon 4:95cde28a5cf1 73 pc.printf("QSPI Initialization PASSED\n\r");
capsavon 5:9b9fbd929243 74 #endif // DEBUG
capsavon 4:95cde28a5cf1 75 lcd.Clear(LCD_COLOR_GREEN);
capsavon 4:95cde28a5cf1 76 lcd.SetBackColor(LCD_COLOR_GREEN);
capsavon 4:95cde28a5cf1 77 lcd.SetTextColor(LCD_COLOR_WHITE);
capsavon 4:95cde28a5cf1 78 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"QSPI Initialization PASSED", CENTER_MODE);
capsavon 4:95cde28a5cf1 79 }
capsavon 2:a655d6640167 80
capsavon 4:95cde28a5cf1 81 wait(2);
capsavon 2:a655d6640167 82
capsavon 4:95cde28a5cf1 83 // Check memory informations
capsavon 4:95cde28a5cf1 84 qspi.GetInfo(&pQSPI_Info);
capsavon 4:95cde28a5cf1 85 if ((pQSPI_Info.FlashSize != N25Q128A_FLASH_SIZE) ||
capsavon 4:95cde28a5cf1 86 (pQSPI_Info.EraseSectorSize != N25Q128A_SUBSECTOR_SIZE) ||
capsavon 4:95cde28a5cf1 87 (pQSPI_Info.ProgPageSize != N25Q128A_PAGE_SIZE) ||
capsavon 4:95cde28a5cf1 88 (pQSPI_Info.EraseSectorsNumber != N25Q128A_SUBSECTOR_SIZE) ||
capsavon 4:95cde28a5cf1 89 (pQSPI_Info.ProgPagesNumber != N25Q128A_SECTOR_SIZE))
capsavon 4:95cde28a5cf1 90 {
capsavon 5:9b9fbd929243 91 #ifdef DEBUG
capsavon 4:95cde28a5cf1 92 pc.printf("QSPI informations FAILED\n\r");
capsavon 5:9b9fbd929243 93 #endif // DEBUG
capsavon 4:95cde28a5cf1 94 lcd.Clear(LCD_COLOR_RED);
capsavon 4:95cde28a5cf1 95 lcd.SetBackColor(LCD_COLOR_RED);
capsavon 4:95cde28a5cf1 96 lcd.SetTextColor(LCD_COLOR_WHITE);
capsavon 4:95cde28a5cf1 97 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"QSPI informations FAILED", CENTER_MODE);
capsavon 4:95cde28a5cf1 98 }
capsavon 4:95cde28a5cf1 99 else
capsavon 4:95cde28a5cf1 100 {
capsavon 5:9b9fbd929243 101 #ifdef DEBUG
capsavon 4:95cde28a5cf1 102 pc.printf("QSPI informations PASSED\n\r");
capsavon 5:9b9fbd929243 103 #endif // DEBUG
capsavon 4:95cde28a5cf1 104 lcd.Clear(LCD_COLOR_GREEN);
capsavon 4:95cde28a5cf1 105 lcd.SetBackColor(LCD_COLOR_GREEN);
capsavon 4:95cde28a5cf1 106 lcd.SetTextColor(LCD_COLOR_WHITE);
capsavon 4:95cde28a5cf1 107 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"QSPI informations PASSED", CENTER_MODE);
capsavon 4:95cde28a5cf1 108 }
capsavon 2:a655d6640167 109
capsavon 4:95cde28a5cf1 110 wait (2);
capsavon 2:a655d6640167 111
capsavon 4:95cde28a5cf1 112 // Erase memory
capsavon 4:95cde28a5cf1 113 if (qspi.Erase_Block(WRITE_READ_ADDR) != QSPI_OK)
capsavon 4:95cde28a5cf1 114 {
capsavon 5:9b9fbd929243 115 #ifdef DEBUG
capsavon 4:95cde28a5cf1 116 pc.printf("QSPI erase FAILED\n\r");
capsavon 5:9b9fbd929243 117 #endif // DEBUG
capsavon 4:95cde28a5cf1 118 lcd.Clear(LCD_COLOR_RED);
capsavon 4:95cde28a5cf1 119 lcd.SetBackColor(LCD_COLOR_RED);
capsavon 4:95cde28a5cf1 120 lcd.SetTextColor(LCD_COLOR_WHITE);
capsavon 4:95cde28a5cf1 121 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"QSPI erase FAILED", CENTER_MODE);
capsavon 4:95cde28a5cf1 122 }
capsavon 4:95cde28a5cf1 123 else
capsavon 4:95cde28a5cf1 124 {
capsavon 5:9b9fbd929243 125 #ifdef DEBUG
capsavon 4:95cde28a5cf1 126 pc.printf("QSPI erase PASSED\n\r");
capsavon 5:9b9fbd929243 127 #endif // DEBUG
capsavon 4:95cde28a5cf1 128 lcd.Clear(LCD_COLOR_GREEN);
capsavon 4:95cde28a5cf1 129 lcd.SetBackColor(LCD_COLOR_GREEN);
capsavon 4:95cde28a5cf1 130 lcd.SetTextColor(LCD_COLOR_WHITE);
capsavon 4:95cde28a5cf1 131 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"QSPI erase PASSED", CENTER_MODE);
capsavon 4:95cde28a5cf1 132 }
capsavon 2:a655d6640167 133
capsavon 4:95cde28a5cf1 134 wait (2);
capsavon 2:a655d6640167 135
capsavon 4:95cde28a5cf1 136 // Write memory
capsavon 4:95cde28a5cf1 137 if (qspi.Write(WriteBuffer, WRITE_READ_ADDR, 15) != QSPI_OK)
capsavon 4:95cde28a5cf1 138 {
capsavon 5:9b9fbd929243 139 #ifdef DEBUG
capsavon 4:95cde28a5cf1 140 pc.printf("QSPI write FAILED\n\r");
capsavon 5:9b9fbd929243 141 #endif // DEBUG
capsavon 4:95cde28a5cf1 142 lcd.Clear(LCD_COLOR_RED);
capsavon 4:95cde28a5cf1 143 lcd.SetBackColor(LCD_COLOR_RED);
capsavon 4:95cde28a5cf1 144 lcd.SetTextColor(LCD_COLOR_WHITE);
capsavon 4:95cde28a5cf1 145 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"QSPI write FAILED", CENTER_MODE);
capsavon 4:95cde28a5cf1 146 }
capsavon 4:95cde28a5cf1 147 else
capsavon 4:95cde28a5cf1 148 {
capsavon 5:9b9fbd929243 149 #ifdef DEBUG
capsavon 4:95cde28a5cf1 150 pc.printf("QSPI write PASSED\n\r");
capsavon 5:9b9fbd929243 151 #endif // DEBUG
capsavon 4:95cde28a5cf1 152 lcd.Clear(LCD_COLOR_GREEN);
capsavon 4:95cde28a5cf1 153 lcd.SetBackColor(LCD_COLOR_GREEN);
capsavon 4:95cde28a5cf1 154 lcd.SetTextColor(LCD_COLOR_WHITE);
capsavon 4:95cde28a5cf1 155 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"QSPI write PASSED", CENTER_MODE);
capsavon 4:95cde28a5cf1 156 }
capsavon 4:95cde28a5cf1 157
capsavon 4:95cde28a5cf1 158 wait (2);
capsavon 2:a655d6640167 159
capsavon 4:95cde28a5cf1 160 // Read memory
capsavon 4:95cde28a5cf1 161 if (qspi.Read(ReadBuffer, WRITE_READ_ADDR, 11) != QSPI_OK)
capsavon 4:95cde28a5cf1 162 {
capsavon 5:9b9fbd929243 163 #ifdef DEBUG
capsavon 4:95cde28a5cf1 164 pc.printf("QSPI read FAILED\n\r");
capsavon 5:9b9fbd929243 165 #endif // DEBUG
capsavon 4:95cde28a5cf1 166 lcd.Clear(LCD_COLOR_RED);
capsavon 4:95cde28a5cf1 167 lcd.SetBackColor(LCD_COLOR_RED);
capsavon 4:95cde28a5cf1 168 lcd.SetTextColor(LCD_COLOR_WHITE);
capsavon 4:95cde28a5cf1 169 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"QSPI read FAILED", CENTER_MODE);
capsavon 4:95cde28a5cf1 170 }
capsavon 4:95cde28a5cf1 171 else
capsavon 4:95cde28a5cf1 172 {
capsavon 5:9b9fbd929243 173 #ifdef DEBUG
capsavon 5:9b9fbd929243 174 pc.printf("QSPI read PASSED - [%s]\n\r", ReadBuffer);
capsavon 5:9b9fbd929243 175 #endif // DEBUG
capsavon 4:95cde28a5cf1 176 lcd.Clear(LCD_COLOR_GREEN);
capsavon 4:95cde28a5cf1 177 lcd.SetBackColor(LCD_COLOR_GREEN);
capsavon 4:95cde28a5cf1 178 lcd.SetTextColor(LCD_COLOR_WHITE);
capsavon 5:9b9fbd929243 179 //lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"QSPI read PASSED", CENTER_MODE);
capsavon 5:9b9fbd929243 180
capsavon 5:9b9fbd929243 181 sprintf((char*)text, "QSPI read PASSED - [%s]\n\r", ReadBuffer);
capsavon 5:9b9fbd929243 182 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)&text, CENTER_MODE);
capsavon 4:95cde28a5cf1 183 }
capsavon 2:a655d6640167 184
capsavon 4:95cde28a5cf1 185 wait (2);
capsavon 4:95cde28a5cf1 186
capsavon 2:a655d6640167 187
capsavon 0:742b53764813 188 while(1) {
capsavon 2:a655d6640167 189
capsavon 2:a655d6640167 190 lcd.SetBackColor(LCD_COLOR_BLUE);
capsavon 2:a655d6640167 191 lcd.SetTextColor(LCD_COLOR_WHITE);
capsavon 0:742b53764813 192
capsavon 0:742b53764813 193 ts.GetState(&TS_State);
capsavon 0:742b53764813 194 if (TS_State.touchDetected) {
capsavon 0:742b53764813 195 // Clear lines corresponding to old touches coordinates
capsavon 0:742b53764813 196 if (TS_State.touchDetected < prev_nb_touches) {
capsavon 0:742b53764813 197 for (idx = (TS_State.touchDetected + 1); idx <= 5; idx++) {
capsavon 0:742b53764813 198 lcd.ClearStringLine(idx);
capsavon 0:742b53764813 199 }
capsavon 0:742b53764813 200 }
capsavon 0:742b53764813 201 prev_nb_touches = TS_State.touchDetected;
capsavon 0:742b53764813 202
capsavon 0:742b53764813 203 cleared = 0;
capsavon 0:742b53764813 204
capsavon 0:742b53764813 205 sprintf((char*)text, "Touches: %d", TS_State.touchDetected);
capsavon 0:742b53764813 206 lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
capsavon 0:742b53764813 207
capsavon 0:742b53764813 208 for (idx = 0; idx < TS_State.touchDetected; idx++) {
capsavon 0:742b53764813 209 x = TS_State.touchX[idx];
capsavon 0:742b53764813 210 y = TS_State.touchY[idx];
capsavon 0:742b53764813 211 sprintf((char*)text, "Touch %d: x=%d y=%d ", idx+1, x, y);
capsavon 0:742b53764813 212 lcd.DisplayStringAt(0, LINE(idx+1), (uint8_t *)&text, LEFT_MODE);
capsavon 1:7bec6efe01d9 213
capsavon 0:742b53764813 214 }
capsavon 0:742b53764813 215
capsavon 0:742b53764813 216 lcd.DrawPixel(TS_State.touchX[0], TS_State.touchY[0], LCD_COLOR_ORANGE);
capsavon 1:7bec6efe01d9 217
capsavon 0:742b53764813 218 } else {
capsavon 0:742b53764813 219 if (!cleared) {
capsavon 0:742b53764813 220 lcd.Clear(LCD_COLOR_BLUE);
capsavon 0:742b53764813 221 sprintf((char*)text, "Touches: 0");
capsavon 0:742b53764813 222 lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
capsavon 1:7bec6efe01d9 223
capsavon 0:742b53764813 224 cleared = 1;
capsavon 0:742b53764813 225 }
capsavon 0:742b53764813 226 }
capsavon 2:a655d6640167 227
capsavon 4:95cde28a5cf1 228
capsavon 2:a655d6640167 229 // Touch detection of one button
capsavon 2:a655d6640167 230 if (TS_State.touchDetected > 0) {
capsavon 2:a655d6640167 231 }
capsavon 2:a655d6640167 232 else {
capsavon 2:a655d6640167 233 }
capsavon 0:742b53764813 234 }
capsavon 0:742b53764813 235 }
capsavon 1:7bec6efe01d9 236
capsavon 2:a655d6640167 237
capsavon 3:13b323fb08e8 238 // Functions definition
capsavon 3:13b323fb08e8 239 void led_power (int state) {
capsavon 3:13b323fb08e8 240 myled = state;
capsavon 3:13b323fb08e8 241 }
capsavon 3:13b323fb08e8 242
capsavon 3:13b323fb08e8 243 void led_on (void) {
capsavon 3:13b323fb08e8 244 led_power(1);
capsavon 3:13b323fb08e8 245 }
capsavon 3:13b323fb08e8 246
capsavon 3:13b323fb08e8 247 void led_off (void) {
capsavon 3:13b323fb08e8 248 led_power(0);
capsavon 3:13b323fb08e8 249 }
capsavon 3:13b323fb08e8 250
capsavon 3:13b323fb08e8 251 void led_toggle (void) {
capsavon 3:13b323fb08e8 252 static int toggle = 0;
capsavon 3:13b323fb08e8 253 if (toggle) {
capsavon 3:13b323fb08e8 254 led_on();
capsavon 3:13b323fb08e8 255 toggle = 0;
capsavon 3:13b323fb08e8 256 }
capsavon 3:13b323fb08e8 257 else {
capsavon 3:13b323fb08e8 258 led_off();
capsavon 3:13b323fb08e8 259 toggle = 1;
capsavon 3:13b323fb08e8 260 }
capsavon 3:13b323fb08e8 261 }
capsavon 2:a655d6640167 262
capsavon 2:a655d6640167 263