144 lines
4.3 KiB
C++
144 lines
4.3 KiB
C++
/*
|
|
Test the library readcommand8 member function
|
|
|
|
This sketch reports via the Serial Monitor window
|
|
|
|
#########################################################################
|
|
###### DON'T FORGET TO UPDATE THE User_Setup.h FILE IN THE LIBRARY ######
|
|
###### TO SELECT THE FONTS AND PINS YOU USE, SEE ABOVE ######
|
|
#########################################################################
|
|
|
|
Created by Bodmer 14/1/17
|
|
*/
|
|
|
|
//====================================================================================
|
|
// Libraries
|
|
//====================================================================================
|
|
|
|
#include <TFT_eSPI.h> // Graphics and font library for ILI9341 driver chip
|
|
#include <SPI.h>
|
|
|
|
TFT_eSPI tft = TFT_eSPI(); // Invoke library
|
|
|
|
//====================================================================================
|
|
// Setup
|
|
//====================================================================================
|
|
|
|
void setup(void) {
|
|
Serial.begin(115200);
|
|
|
|
tft.init();
|
|
tft.setRotation(2);
|
|
}
|
|
|
|
//====================================================================================
|
|
// Loop
|
|
//====================================================================================
|
|
|
|
void loop() {
|
|
|
|
tft.fillScreen(TFT_BLUE);
|
|
tft.setCursor(0, 0, 2);
|
|
// Set the font colour to be white with a black background
|
|
tft.setTextColor(TFT_WHITE, TFT_BLACK);
|
|
// We can now plot text on screen using the "print" class
|
|
tft.println("Hello World!");
|
|
|
|
delay(2000);
|
|
|
|
// OK, now it has been shown that the display is working reset it to defaults
|
|
// This will make the screen go "white" but we can still read registers
|
|
|
|
digitalWrite(TFT_RST, LOW);
|
|
delay(10);
|
|
digitalWrite(TFT_RST, HIGH);
|
|
delay(10);
|
|
|
|
printSubset(); // Print a useful subset of the readable registers
|
|
|
|
readTest(); // Test 8, 16 and 32 bit reads and index on the ID register
|
|
|
|
//printRange32(0x00, 0xFF); // Print a range of registers (32 bits, index = 0)
|
|
|
|
delay(2000);
|
|
while (1) yield();
|
|
}
|
|
|
|
//====================================================================================
|
|
// Supporting functions
|
|
//====================================================================================
|
|
|
|
void readTest(void)
|
|
{
|
|
Serial.println(); Serial.println("Test 8, 16 and 32 bit reads and the index...");
|
|
// Test 8, 16 and 32 bit reads and index
|
|
// Note at index 0 the register values are typically undefined (Bxxxxxxxx)
|
|
Serial.println(tft.readcommand8(ILI9341_RDID4, 2), HEX);
|
|
Serial.println(tft.readcommand16(ILI9341_RDID4, 2), HEX);
|
|
Serial.println(tft.readcommand32(ILI9341_RDID4, 0), HEX);
|
|
}
|
|
|
|
//====================================================================================
|
|
|
|
void printRange32(uint8_t readStart, uint8_t readEnd)
|
|
{
|
|
Serial.print("Registers from "); Serial.print(readStart, HEX);
|
|
Serial.print(" to "); Serial.println(readEnd, HEX);
|
|
|
|
for (uint8_t cmd_reg = readStart; cmd_reg < readEnd; cmd_reg++) {
|
|
readRegister(cmd_reg, 4, 0);
|
|
}
|
|
}
|
|
|
|
//====================================================================================
|
|
|
|
void printSubset(void)
|
|
{
|
|
Serial.println(); Serial.println();
|
|
readRegister(ILI9341_RDDID, 3, 1);
|
|
readRegister(ILI9341_RDDST, 4, 1);
|
|
readRegister(ILI9341_RDMODE, 1, 1);
|
|
readRegister(ILI9341_RDMADCTL, 1, 1);
|
|
readRegister(ILI9341_RDPIXFMT, 1, 1);
|
|
readRegister(ILI9341_RDSELFDIAG, 1, 1);
|
|
readRegister(ILI9341_RAMRD, 3, 1);
|
|
|
|
readRegister(ILI9341_RDID1, 1, 1);
|
|
readRegister(ILI9341_RDID2, 1, 1);
|
|
readRegister(ILI9341_RDID3, 1, 1);
|
|
readRegister(ILI9341_RDIDX, 1, 1); // ?
|
|
readRegister(ILI9341_RDID4, 3, 1); // ID
|
|
}
|
|
|
|
//====================================================================================
|
|
|
|
uint32_t readRegister(uint8_t reg, int16_t bytes, uint8_t index)
|
|
{
|
|
uint32_t data = 0;
|
|
|
|
while (bytes > 0) {
|
|
bytes--;
|
|
data = (data << 8) | tft.readcommand8(reg, index);
|
|
index++;
|
|
}
|
|
|
|
Serial.print("Register 0x");
|
|
if (reg < 0x10) Serial.print("0");
|
|
Serial.print(reg , HEX);
|
|
|
|
Serial.print(": 0x");
|
|
|
|
// Add leading zeros as needed
|
|
uint32_t mask = 0x1 << 28;
|
|
while (data < mask && mask > 0x1) {
|
|
Serial.print("0");
|
|
mask = mask >> 4;
|
|
}
|
|
|
|
Serial.println(data, HEX);
|
|
|
|
return data;
|
|
}
|
|
|
|
//====================================================================================
|