You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

761 lines
46 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/***********
* FT810.h *
***********/
/****************************************************************************
* Written By Mark Pelletier 2017 - Aleph Objects, Inc. *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* To view a copy of the GNU General Public License, go to the following *
* location: <http://www.gnu.org/licenses/>. *
****************************************************************************/
/****************************************************************************
* This header defines registers and commands for the FTDI FT810 LCD Driver *
* chip. *
****************************************************************************/
/************************************************************************************************************
* FT810 *
* *
* START ADDRESS END ADDRESS SIZE NAME DESCRIPTION *
* *
* 0x000000 0x0FFFFF 1024 kB RAM_G Main Graphics RAM 0 to 1048572 *
* *
* 0x0C0000 0x0C0003 4 B ROM_CHIPID [0:1] 0x800 [1:2] 0x0100 Chip Id, Version ID *
* *
* 0x1E0000 0x2FFFFB 1152 kB ROM_FONT Font table and bitmap *
* *
* 0x2FFFFC 0x2FFFFF 4 B ROM_FONT_ADDR Font table pointer address *
* *
* 0x300000 0x301FFF 8 kB RAM_DL Display List RAM *
* *
* 0x302000 0x302FFF 4 kB REG_* Registers *
* *
* 0x308000 0x308FFF 4 kB RAM_CMD Command Buffer *
* *
************************************************************************************************************/
#ifndef _AO_FT810_H
#define _AO_FT810_H
// Uncomment this line if using an Arduino board instead of a Printer Controller board.
// This allows the use of the Arduino SPI Library and SPI Peripheral instead of the bit-banged SPI
// of the Printer Controllers (RAMBo, Mini RAMBo, Einsy, Archim).
// This is used by the CLCD_spiTransfer(uint8_t) function and CLCD_spiInit() function.
// #define IS_ARDUINO
namespace FT800 {
// MEMORY LOCATIONS FT800
const uint32_t RAM_G = 0x000000; // Main Graphics RAM
const uint32_t ROM_FONT = 0x0BB23C; // Font ROM
const uint32_t ROM_FONT_ADDR = 0x0FFFFC; // Font Table Pointer
const uint32_t RAM_DL = 0x100000; // Display List RAM
const uint32_t RAM_PAL = 0x102000; // Palette RAM
const uint32_t RAM_REG = 0x102400; // Registers
const uint32_t RAM_CMD = 0x108000; // Command Buffer
const uint32_t RAM_G_SIZE = 256l*1024l; // 256k
}
namespace FT810 {
// MEMORY LOCATIONS FT810
const uint32_t RAM_G = 0x000000; // Main Graphics RAM
const uint32_t ROM_CHIPID = 0x0C0000; // Chip ID ROM
const uint32_t ROM_FONT = 0x1E0000; // Font ROM
const uint32_t ROM_FONT_ADDR = 0x2FFFFC; // Font Table Pointer
const uint32_t RAM_DL = 0x300000; // Display List RAM
const uint32_t RAM_REG = 0x302000; // Registers
const uint32_t RAM_CMD = 0x308000; // Command Buffer
const uint32_t RAM_G_SIZE = 1024l*1024l; // 1024k
}
namespace FT800 {
// REGISTERS AND ADDRESSES FT800
// REGISTER ADDRESS SIZE RESET VALUE TYPE DESCRIPTION
const uint32_t REG_ID = 0x102400; // 8 0x7C r Identification Register, Always 0x7C
const uint32_t REG_FRAMES = 0x102404; // 32 0x00000000 r Frame Counter, Since Reset
const uint32_t REG_CLOCK = 0x102408; // 32 0x00000000 r Clock cycles, Since Reset
const uint32_t REG_FREQUENCY = 0x10240C; // 28 0x03938700 r/w Main Clock Frequency
const uint32_t REG_RENDERMODE = 0x102410; // 1 0x00 r/w Rendering Mode: 0 = normal, 1 = single-line
const uint32_t REG_SNAPY = 0x102414; // 11 0x0000 r/w Scan Line Select for RENDERMODE 1
const uint32_t REG_SNAPSHOT = 0x102418; // 1 - r Trigger for RENDERMODE 1
const uint32_t REG_CPURESET = 0x10241C; // 3 0x02 r/w RESET Bit2 Audio - Bit1 Touch - Bit0 Graphics
const uint32_t REG_TAP_CRC = 0x102420; // 32 - r Live Video Tap
const uint32_t REG_TAP_MASK = 0x102424; // 32 0xFFFFFFFF r/w Live Video Tap Mask
const uint32_t REG_HCYCLE = 0x102428; // 12 0x224 r/w Horizontal Total Cycle Count
const uint32_t REG_HOFFSET = 0x10242C; // 12 0x02B r/w Horizontal Display Start Offset
const uint32_t REG_HSIZE = 0x102430; // 12 0x1E0 r/w Horizontal Display Pixel Count
const uint32_t REG_HSYNC0 = 0x102434; // 12 0x000 r/w Horizontal Sync Fall Offset
const uint32_t REG_HSYNC1 = 0x102438; // 12 0x029 r/w Horizontal Sync Rise Offset
const uint32_t REG_VCYCLE = 0x10243C; // 12 0x124 r/w Vertical Total Cycle Count
const uint32_t REG_VOFFSET = 0x102440; // 12 0x00C r/w Vertical Display Start Offset
const uint32_t REG_VSIZE = 0x102444; // 12 0x110 r/w Vertical Display Line Count
const uint32_t REG_VSYNC0 = 0x102448; // 10 0x000 r/w Vertical Sync Fall Offset
const uint32_t REG_VSYNC1 = 0x10244C; // 10 0x00A r/w Vertical Sync Rise Offset
const uint32_t REG_DLSWAP = 0x102450; // 2 0x00 r/w Display List Swap Control
const uint32_t REG_ROTATE = 0x102454; // 3 0x00 r/w Screen 90,180, 270 degree rotate
const uint32_t REG_OUTBITS = 0x102458; // 9 0x1B6 r/w Output Resolution, 3x3x3 Bits
const uint32_t REG_DITHER = 0x10245C; // 1 0x01 r/w Output Dither Enable
const uint32_t REG_SWIZZLE = 0x102460; // 4 0x00 r/w Output RGB Swizzle, Pin Change for PCB Routing
const uint32_t REG_CSPREAD = 0x102464; // 1 0x01 r/w Output Clock Spreading Enable
const uint32_t REG_PCLK_POL = 0x102468; // 1 0x00 r/w PCLK Polarity: 0 = Rising Edge, 1 = Falling Edge
const uint32_t REG_PCLK = 0x10246C; // 8 0x00 r/w PCLK Frequency Divider, 0 = Disable Clock
const uint32_t REG_TAG_X = 0x102470; // 11 0x000 r/w Tag Query X Coordinate
const uint32_t REG_TAG_Y = 0x102474; // 11 0x000 r/w Tag Query Y Coordinate
const uint32_t REG_TAG = 0x102478; // 8 0x00 r Tag Query Result
const uint32_t REG_VOL_PB = 0x10247C; // 8 0xFF r/w Audio Playback Volume
const uint32_t REG_VOL_SOUND = 0x102480; // 8 0xFF r/w Audio Synthesizer Volume
const uint32_t REG_SOUND = 0x102484; // 16 0x0000 r/w Audio Sound Effect Select
const uint32_t REG_PLAY = 0x102488; // 1 0x00 r/w Audio Start Effect Playback
const uint32_t REG_GPIO_DIR = 0x10248C; // 8 0x80 r/w GPIO Pin Direction: 0 = Input , 1 = Output
const uint32_t REG_GPIO = 0x102490; // 8 0x00 r/w GPIO Pin Values for 0, 1, 7 Drive Strength 2, 3, 4, 5, 6
const uint32_t REG_INT_FLAGS = 0x102498; // 8 0x00 r Interrupt Flags, Clear by Reading
const uint32_t REG_INT_EN = 0x10249C; // 1 0x00 r/w Global Interrupt Enable
const uint32_t REG_INT_MASK = 0x1024A0; // 8 0xFF r/w Interrupt Enable Mask
const uint32_t REG_PLAYBACK_START = 0x1024A4; // 20 0x00000 r/w Audio Playback RAM Start Address
const uint32_t REG_PLAYBACK_LENGTH = 0x1024A8; // 20 0x00000 r/w Audio Playback Sample Length (Bytes)
const uint32_t REG_PLAYBACK_READPTR = 0x1024AC; // 20 - r Audio Playback Read Pointer
const uint32_t REG_PLAYBACK_FREQ = 0x1024B0; // 16 0x1F40 r/w Audio Playback Frequency (Hz)
const uint32_t REG_PLAYBACK_FORMAT = 0x1024B4; // 2 0x00 r/w Audio Playback Format
const uint32_t REG_PLAYBACK_LOOP = 0x1024B8; // 1 0x00 r/w Audio Playback Loop Enable
const uint32_t REG_PLAYBACK_PLAY = 0x1024BC; // 1 0x00 r Audio Start Playback
const uint32_t REG_PWM_HZ = 0x1024C0; // 14 0x00FA r/w Backlight PWM Frequency (Hz)
const uint32_t REG_PWM_DUTY = 0x1024C4; // 8 0x80 r/w Backlight PWM Duty Cycle: 0 = 0%, 128 = 100%
const uint32_t REG_MACRO_0 = 0x1024C8; // 32 0x00000000 r/w Display List Macro Command 0
const uint32_t REG_MACRO_1 = 0x1024CC; // 32 0x00000000 r/w Display List Macro Command 1
const uint32_t REG_CMD_READ = 0x1024E4; // 12 0x000 r/w Command Buffer Read Pointer
const uint32_t REG_CMD_WRITE = 0x1024E8; // 12 0x000 r/w Command Buffer Write Pointer
const uint32_t REG_CMD_DL = 0x1024EC; // 13 0x0000 r/w Command Display List Offset
const uint32_t REG_TOUCH_MODE = 0x1024F0; // 2 0x03 r/w Touch-Screen Sampling Mode
const uint32_t REG_TOUCH_ADC_MODE = 0x1024F4; // 1 0x01 r/w Select Single Ended or Differential Sampling
const uint32_t REG_TOUCH_CHARGE = 0x1024F8; // 16 0x1770 r/w Touch Screen Charge Time, n x 6 Clocks
const uint32_t REG_TOUCH_SETTLE = 0x1024FC; // 4 0x03 r/w Touch-Screen Settle Time, n x 6 Clocks
const uint32_t REG_TOUCH_OVERSAMPLE = 0x102500; // 4 0x07 r/w Touch-Screen Oversample Factor
const uint32_t REG_TOUCH_RZTHRESH = 0x102504; // 16 0xFFFF r/w Touch-Screen Resistance Threshold
const uint32_t REG_TOUCH_RAW_XY = 0x102508; // 32 - r Touch-Screen Raw (x-MSB16; y-LSB16)
const uint32_t REG_TOUCH_RZ = 0x10250C; // 16 - r Touch-Screen Resistance
const uint32_t REG_TOUCH_SCREEN_XY = 0x102510; // 32 - r Touch-Screen Screen (x-MSB16; y-LSB16)
const uint32_t REG_TOUCH_TAG_XY = 0x102514; // 32 - r Touch-Screen Tag 0 Lookup (x-MSB16; y-LSB16)
const uint32_t REG_TOUCH_TAG = 0x102518; // 8 - r Touch-Screen Tag 0 Result
const uint32_t REG_TOUCH_TRANSFORM_A = 0x10251C; // 32 0x00010000 r/w Touch-Screen Transform Coefficient A (s15.16)
const uint32_t REG_TOUCH_TRANSFORM_B = 0x102520; // 32 0x00000000 r/w Touch-Screen Transform Coefficient B (s15.16)
const uint32_t REG_TOUCH_TRANSFORM_C = 0x102524; // 32 0x00000000 r/w Touch-Screen Transform Coefficient C (s15.16)
const uint32_t REG_TOUCH_TRANSFORM_D = 0x102528; // 32 0x00000000 r/w Touch-Screen Transform Coefficient D (s15.16)
const uint32_t REG_TOUCH_TRANSFORM_E = 0x10252C; // 32 0x00010000 r/w Touch-Screen Transform Coefficient E (s15.16)
const uint32_t REG_TOUCH_TRANSFORM_F = 0x102530; // 32 0x00000000 r/w Touch-Screen Transform Coefficient F (s15.16)
// Reserved Addresses 0x102434 - 0x102470
const uint32_t REG_TOUCH_DIRECT_XY = 0x102574; // 32 - r Touch-Screen Direct Conversions XY (x-MSB16; y-LSB16)
const uint32_t REG_TOUCH_DIRECT_Z1Z2 = 0x102578; // 32 - r Touch-Screen Direct Conversions Z (z1-MSB16; z2-LSB16)
const uint32_t REG_TRACKER = 0x109000; // 32 0x00000000 r/w Track Register (Track Value MSB16; Tag Value - LSB8)
};
namespace FT810 {
// REGISTERS AND ADDRESSES FT810
// REGISTER ADDRESS SIZE RESET VALUE TYPE DESCRIPTION
const uint32_t REG_ID = 0x302000; // 8 0x7C r Identification Register, Always 0x7C
const uint32_t REG_FRAMES = 0x302004; // 32 0x00000000 r Frame Counter, Since Reset
const uint32_t REG_CLOCK = 0x302008; // 32 0x00000000 r Clock cycles, Since Reset
const uint32_t REG_FREQUENCY = 0x30200C; // 28 0x03938700 r/w Main Clock Frequency
const uint32_t REG_RENDERMODE = 0x302010; // 1 0x00 r/w Rendering Mode: 0 = normal, 1 = single-line
const uint32_t REG_SNAPY = 0x302014; // 11 0x0000 r/w Scan Line Select for RENDERMODE 1
const uint32_t REG_SNAPSHOT = 0x302018; // 1 - r Trigger for RENDERMODE 1
const uint32_t REG_SNAPFORMAT = 0x30201C; // 6 0x20 r/w Pixel Format for Scanline Readout
const uint32_t REG_CPURESET = 0x302020; // 3 0x02 r/w RESET Bit2 Audio - Bit1 Touch - Bit0 Graphics
const uint32_t REG_TAP_CRC = 0x302024; // 32 - r Live Video Tap
const uint32_t REG_TAP_MASK = 0x302028; // 32 0xFFFFFFFF r/w Live Video Tap Mask
const uint32_t REG_HCYCLE = 0x30202C; // 12 0x224 r/w Horizontal Total Cycle Count
const uint32_t REG_HOFFSET = 0x302030; // 12 0x02B r/w Horizontal Display Start Offset
const uint32_t REG_HSIZE = 0x302034; // 12 0x1E0 r/w Horizontal Display Pixel Count
const uint32_t REG_HSYNC0 = 0x302038; // 12 0x000 r/w Horizontal Sync Fall Offset
const uint32_t REG_HSYNC1 = 0x30203C; // 12 0x029 r/w Horizontal Sync Rise Offset
const uint32_t REG_VCYCLE = 0x302040; // 12 0x124 r/w Vertical Total Cycle Count
const uint32_t REG_VOFFSET = 0x302044; // 12 0x00C r/w Vertical Display Start Offset
const uint32_t REG_VSIZE = 0x302048; // 12 0x110 r/w Vertical Display Line Count
const uint32_t REG_VSYNC0 = 0x30204C; // 10 0x000 r/w Vertical Sync Fall Offset
const uint32_t REG_VSYNC1 = 0x302050; // 10 0x00A r/w Vertical Sync Rise Offset
const uint32_t REG_DLSWAP = 0x302054; // 2 0x00 r/w Display List Swap Control
const uint32_t REG_ROTATE = 0x302058; // 3 0x00 r/w Screen 90,180, 270 degree rotate
const uint32_t REG_OUTBITS = 0x30205C; // 9 0x1B6 r/w Output Resolution, 3x3x3 Bits
const uint32_t REG_DITHER = 0x302060; // 1 0x01 r/w Output Dither Enable
const uint32_t REG_SWIZZLE = 0x302064; // 4 0x00 r/w Output RGB Swizzle, Pin Change for PCB Routing
const uint32_t REG_CSPREAD = 0x302068; // 1 0x01 r/w Output Clock Spreading Enable
const uint32_t REG_PCLK_POL = 0x30206C; // 1 0x00 r/w PCLK Polarity: 0 = Rising Edge, 1 = Falling Edge
const uint32_t REG_PCLK = 0x302070; // 8 0x00 r/w PCLK Frequency Divider, 0 = Disable Clock
const uint32_t REG_TAG_X = 0x302074; // 11 0x000 r/w Tag Query X Coordinate
const uint32_t REG_TAG_Y = 0x302078; // 11 0x000 r/w Tag Query Y Coordinate
const uint32_t REG_TAG = 0x30207C; // 8 0x00 r Tag Query Result
const uint32_t REG_VOL_PB = 0x302080; // 8 0xFF r/w Audio Playback Volume
const uint32_t REG_VOL_SOUND = 0x302084; // 8 0xFF r/w Audio Synthesizer Volume
const uint32_t REG_SOUND = 0x302088; // 16 0x0000 r/w Audio Sound Effect Select
const uint32_t REG_PLAY = 0x30208C; // 1 0x00 r/w Audio Start Effect Playback
const uint32_t REG_GPIO_DIR = 0x302090; // 8 0x80 r/w GPIO Pin Direction: 0 = Input , 1 = Output
const uint32_t REG_GPIO = 0x302094; // 8 0x00 r/w GPIO Pin Values for 0, 1, 7 Drive Strength 2, 3, 4, 5, 6
const uint32_t REG_GPIOX_DIR = 0x302098; // 16 0x8000 r/w Extended GPIO Pin Direction
const uint32_t REG_GPIOX = 0x30209C; // 16 0x0080 r/w Extended GPIO Pin Values
// Reserved Addr 0x3020A0
// Reserved Addr 0x3020A4
const uint32_t REG_INT_FLAGS = 0x3020A8; // 8 0x00 r Interrupt Flags, Clear by Reading
const uint32_t REG_INT_EN = 0x3020AC; // 1 0x00 r/w Global Interrupt Enable
const uint32_t REG_INT_MASK = 0x3020B0; // 8 0xFF r/w Interrupt Enable Mask
const uint32_t REG_PLAYBACK_START = 0x3020B4; // 20 0x00000 r/w Audio Playback RAM Start Address
const uint32_t REG_PLAYBACK_LENGTH = 0x3020B8; // 20 0x00000 r/w Audio Playback Sample Length (Bytes)
const uint32_t REG_PLAYBACK_READPTR = 0x3020BC; // 20 - r Audio Playback Read Pointer
const uint32_t REG_PLAYBACK_FREQ = 0x3020C0; // 16 0x1F40 r/w Audio Playback Frequency (Hz)
const uint32_t REG_PLAYBACK_FORMAT = 0x3020C4; // 2 0x00 r/w Audio Playback Format
const uint32_t REG_PLAYBACK_LOOP = 0x3020C8; // 1 0x00 r/w Audio Playback Loop Enable
const uint32_t REG_PLAYBACK_PLAY = 0x3020CC; // 1 0x00 r Audio Start Playback
const uint32_t REG_PWM_HZ = 0x3020D0; // 14 0x00FA r/w Backlight PWM Frequency (Hz)
const uint32_t REG_PWM_DUTY = 0x3020D4; // 8 0x80 r/w Backlight PWM Duty Cycle: 0 = 0%, 128 = 100%
const uint32_t REG_MACRO_0 = 0x3020D8; // 32 0x00000000 r/w Display List Macro Command 0
const uint32_t REG_MACRO_1 = 0x3020DC; // 32 0x00000000 r/w Display List Macro Command 1
// Reserved Addr 0x3020E0
// Reserved Addr 0x3020E4
// Reserved Addr 0x3020E8
// Reserved Addr 0x3020EC
// Reserved Addr 0x3020F0
// Reserved Addr 0x3020F4
const uint32_t REG_CMD_READ = 0x3020F8; // 12 0x000 r/w Command Buffer Read Pointer
const uint32_t REG_CMD_WRITE = 0x3020FC; // 12 0x000 r/w Command Buffer Write Pointer
const uint32_t REG_CMD_DL = 0x302100; // 13 0x0000 r/w Command Display List Offset
const uint32_t REG_TOUCH_MODE = 0x302104; // 2 0x03 r/w Touch-Screen Sampling Mode
const uint32_t REG_TOUCH_ADC_MODE = 0x302108; // 1 0x01 r/w Select Single Ended or Differential Sampling
const uint32_t REG_TOUCH_CHARGE = 0x30210C; // 16 0x1770 r/w Touch Screen Charge Time, n x 6 Clocks
const uint32_t REG_TOUCH_SETTLE = 0x302110; // 4 0x03 r/w Touch-Screen Settle Time, n x 6 Clocks
const uint32_t REG_TOUCH_OVERSAMPLE = 0x302114; // 4 0x07 r/w Touch-Screen Oversample Factor
const uint32_t REG_TOUCH_RZTHRESH = 0x302118; // 16 0xFFFF r/w Touch-Screen Resistance Threshold
const uint32_t REG_TOUCH_RAW_XY = 0x30211C; // 32 - r Touch-Screen Raw (x-MSB16; y-LSB16)
const uint32_t REG_TOUCH_RZ = 0x302120; // 16 - r Touch-Screen Resistance
const uint32_t REG_TOUCH_SCREEN_XY = 0x302124; // 32 - r Touch-Screen Screen (x-MSB16; y-LSB16)
const uint32_t REG_TOUCH_TAG_XY = 0x302128; // 32 - r Touch-Screen Tag 0 Lookup (x-MSB16; y-LSB16)
const uint32_t REG_TOUCH_TAG = 0x30212C; // 8 - r Touch-Screen Tag 0 Result
const uint32_t REG_TOUCH_TAG1_XY = 0x302130; // 32 - r Touch-Screen Tag 1 Lookup
const uint32_t REG_TOUCH_TAG1 = 0x302134; // 8 - r Touch-Screen Tag 1 Result
const uint32_t REG_TOUCH_TAG2_XY = 0x302138; // 32 - r Touch-Screen Tag 2 Lookup
const uint32_t REG_TOUCH_TAG2 = 0x30213C; // 8 - r Touch-Screen Tag 2 Result
const uint32_t REG_TOUCH_TAG3_XY = 0x302140; // 32 - r Touch-Screen Tag 3 Lookup
const uint32_t REG_TOUCH_TAG3 = 0x302144; // 8 - r Touch-Screen Tag 3 Result
const uint32_t REG_TOUCH_TAG4_XY = 0x302148; // 32 - r Touch-Screen Tag 4 Lookup
const uint32_t REG_TOUCH_TAG4 = 0x30214C; // 8 - r Touch-Screen Tag 4 Result
const uint32_t REG_TOUCH_TRANSFORM_A = 0x302150; // 32 0x00010000 r/w Touch-Screen Transform Coefficient A (s15.16)
const uint32_t REG_TOUCH_TRANSFORM_B = 0x302154; // 32 0x00000000 r/w Touch-Screen Transform Coefficient B (s15.16)
const uint32_t REG_TOUCH_TRANSFORM_C = 0x302158; // 32 0x00000000 r/w Touch-Screen Transform Coefficient C (s15.16)
const uint32_t REG_TOUCH_TRANSFORM_D = 0x30215C; // 32 0x00000000 r/w Touch-Screen Transform Coefficient D (s15.16)
const uint32_t REG_TOUCH_TRANSFORM_E = 0x302160; // 32 0x00010000 r/w Touch-Screen Transform Coefficient E (s15.16)
const uint32_t REG_TOUCH_TRANSFORM_F = 0x302164; // 32 0x00000000 r/w Touch-Screen Transform Coefficient F (s15.16)
const uint32_t REG_TOUCH_CONFIG = 0x302168; // 16 0x8381 r/w Touch Configuration
const uint32_t REG_CTOUCH_TOUCH4_X = 0x30216C; // 16 - r Extended Mode Touch Screen
// Reserved Addresses 0x302170
const uint32_t REG_BIST_EN = 0x302174; // 1 0 r/w BIST Memory Mapping Enable
// Reserved Addr 0x302178
// Reserved Addr 0x30217C
const uint32_t REG_TRIM = 0x302180; // 8 0 r/w Internal Clock Trimming
const uint32_t REG_ANA_COMP = 0x302184; // 8 0 r/w Analog Control Register
const uint32_t REG_SPI_WIDTH = 0x302188; // 3 0 r/w QSPI Bus Width Setting
const uint32_t REG_TOUCH_DIRECT_XY = 0x30218C; // 32 - r Touch-Screen Direct Conversions XY (x-MSB16; y-LSB16)
const uint32_t REG_TOUCH_DIRECT_Z1Z2 = 0x302190; // 32 - r Touch-Screen Direct Conversions Z (z1-MSB16; z2-LSB16)
// Reserved Addresses 0x302194 - 0x302560
const uint32_t REG_DATESTAMP = 0x320564; // 128 - r Stamp Date Code
const uint32_t REG_CMDB_SPACE = 0x302574; // 12 0xFFC r/w Command DL Space Available
const uint32_t REG_CMDB_WRITE = 0x302578; // 32 0 w Command DL Write
}
// OPTIONS
namespace FTDI {
const uint16_t OPT_3D = 0x0000;
const uint16_t OPT_RGB565 = 0x0000;
const uint16_t OPT_MONO = 0x0001;
const uint16_t OPT_NODL = 0x0002;
const uint16_t OPT_FLAT = 0x0100;
const uint16_t OPT_SIGNED = 0x0100;
const uint16_t OPT_CENTERX = 0x0200;
const uint16_t OPT_CENTERY = 0x0400;
const uint16_t OPT_CENTER = (OPT_CENTERX | OPT_CENTERY);
const uint16_t OPT_RIGHTX = 0x0800;
const uint16_t OPT_NOBACK = 0x1000;
const uint16_t OPT_NOTICKS = 0x2000;
const uint16_t OPT_NOHM = 0x4000;
const uint16_t OPT_NOPOINTER = 0x4000;
const uint16_t OPT_NOSECS = 0x8000;
const uint16_t OPT_NOHANDS = (OPT_NOPOINTER | OPT_NOSECS);
}
// GPIO Bits
namespace FT800 {
const uint8_t GPIO_GP0 = 1 << 0;
const uint8_t GPIO_GP1 = 1 << 1;
const uint8_t GPIO_DISP = 1 << 7;
}
namespace FT810 {
const uint16_t GPIOX_GP0 = 1 << 0;
const uint16_t GPIOX_GP1 = 1 << 1;
const uint16_t GPIOX_DISP = 1 << 15;
}
// GLOBAL LCD REGISTER SET VALUES FOR WQVGA 480x272 DISPLAY
/*
* Settings for the Aleph Objects Color LCD User Interface 4.3" (Prototype) 480x272, SPI, FT810 (HDA430T-6S-WV)
* Haoyu Electronics, 4.3" Graphical LCD Touchscreen, 480x272, SPI, FT800 (FT800CB-HY43B)
* Haoyu Electronics, 5" Graphical LCD Touchscreen, 480x272, SPI, FT800 (FT800CB-HY50B)
* 4D Systems, 4.3" Embedded SPI Display 480x272, SPI, FT800 (4DLCD-FT843)
*
* http://www.hotmcu.com/43-graphical-lcd-touchscreen-480x272-spi-ft800-p-111.html?cPath=6_16
* http://www.hotmcu.com/5-graphical-lcd-touchscreen-480x272-spi-ft800-p-124.html?cPath=6_16
* http://www.4dsystems.com.au/product/4DLCD_FT843/
*
* Datasheet:
*
* http://www.hantronix.com/files/data/1278363262430-3.pdf
* http://www.haoyuelectronics.com/Attachment/HY43-LCD/LCD%20DataSheet.pdf
* http://www.haoyuelectronics.com/Attachment/HY5-LCD-HD/KD50G21-40NT-A1.pdf
* http://www.4dsystems.com.au/productpages/4DLCD-FT843/downloads/FT843-4.3-Display_datasheet_R_1_2.pdf
*
*/
namespace FTDI_LCD_480x272 {
const int Vsync0 = 0;
const int Vsync1 = 10;
const int Voffset = 12;
const int Vcycle = 292;
const int Hsync0 = 0;
const int Hsync1 = 41;
const int Hoffset = 43;
const int Hcycle = 548;
const int Hsize = 480;
const int Vsize = 272;
const int Pclkpol = 1;
const int Swizzle = 0;
const int Pclk = 5;
const int Clksel = 0x44;
#if defined(LCD_PORTRAIT)
const uint32_t default_transform_a = 0xFFFFFEA3;
const uint32_t default_transform_b = 0xFFFFB05D;
const uint32_t default_transform_c = 0x012C5254;
const uint32_t default_transform_d = 0xFFFF8303;
const uint32_t default_transform_e = 0xFFFFFDF8;
const uint32_t default_transform_f = 0x01F32984;
#else
const uint32_t default_transform_a = 0x00008100;
const uint32_t default_transform_b = 0x00000000;
const uint32_t default_transform_c = 0xFFF18000;
const uint32_t default_transform_d = 0x00000000;
const uint32_t default_transform_e = 0xFFFFB100;
const uint32_t default_transform_f = 0x0120D000;
#endif
}
// GLOBAL LCD REGISTER SET VALUES FOR 800x480 DISPLAY
/*
* Settings for the Haoyu Electronics, 5" Graphical LCD Touchscreen, 800x480, SPI, FT810
*
* http://www.hotmcu.com/5-graphical-lcd-touchscreen-800x480-spi-ft810-p-286.html
*
* Datasheet:
*
* http://www.haoyuelectronics.com/Attachment/HY5-LCD-HD/KD50G21-40NT-A1.pdf
*
*/
namespace FTDI_LCD_800x480 {
const int Vsync0 = 0;
const int Vsync1 = 13;
const int Voffset = 16;
const int Vcycle = 525;
const int Hsync0 = 0;
const int Hsync1 = 40;
const int Hoffset = 88;
const int Hcycle = 928;
const int Hsize = 800;
const int Vsize = 480;
const int Pclkpol = 1;
const int Swizzle = 0;
const int Pclk = 2;
const int Clksel = 0x45;
const uint32_t default_transform_a = 0x0000012B;
const uint32_t default_transform_b = 0xFFFF7BFC;
const uint32_t default_transform_c = 0x01F2443A;
const uint32_t default_transform_d = 0xFFFF25ED;
const uint32_t default_transform_e = 0x000000F9;
const uint32_t default_transform_f = 0x033F61DA;
}
// HOST COMMANDS
namespace FTDI {
const uint8_t ACTIVE = 0x00;
const uint8_t STANDBY = 0x41;
const uint8_t SLEEP = 0x42;
const uint8_t PWRDOWN = 0x50;
const uint8_t CLKEXT = 0x44;
const uint8_t CLKINT = 0x48;
const uint8_t CORESET = 0x68;
}
namespace FT800 {
const uint8_t CLK48M = 0x62;
const uint8_t CLK36M = 0x61;
}
namespace FT810 {
const uint8_t CLKSEL = 0x61;
}
// DISPLAY LIST COMMANDS
namespace FTDI {
const uint32_t ALPHA_FUNC = 0x09000000;
const uint32_t ALPHA_FUNC_NEVER = 0x00000000;
const uint32_t ALPHA_FUNC_LESS = 0x00010000;
const uint32_t ALPHA_FUNC_LEQUAL = 0x00020000;
const uint32_t ALPHA_FUNC_GREATER = 0x00030000;
const uint32_t ALPHA_FUNC_GEQUAL = 0x00040000;
const uint32_t ALPHA_FUNC_EQUAL = 0x00050000;
const uint32_t ALPHA_FUNC_NOTEQUAL = 0x00060000;
const uint32_t ALPHA_FUNC_ALWAYS = 0x00070000;
const uint32_t BEGIN = 0x1F000000;
const uint32_t BEGIN_BITMAPS = 0x00000001;
const uint32_t BEGIN_POINTS = 0x00000002;
const uint32_t BEGIN_LINES = 0x00000003;
const uint32_t BEGIN_LINE_STRIP = 0x00000004;
const uint32_t BEGIN_STRIP_R = 0x00000005;
const uint32_t BEGIN_STRIP_L = 0x00000006;
const uint32_t BEGIN_STRIP_A = 0x00000007;
const uint32_t BEGIN_STRIP_B = 0x00000008;
const uint32_t BEGIN_STRIP_RECTS = 0x00000009;
const uint32_t BITMAP_HANDLE = 0x05000000;
const uint32_t BITMAP_LAYOUT = 0x07000000;
const uint32_t BITMAP_LAYOUT_ARGB1555 = 0x00000000;
const uint32_t BITMAP_LAYOUT_L1 = 0x00080000;
const uint32_t BITMAP_LAYOUT_L4 = 0x00100000;
const uint32_t BITMAP_LAYOUT_L8 = 0x00180000;
const uint32_t BITMAP_LAYOUT_RGB332 = 0x00200000;
const uint32_t BITMAP_LAYOUT_ARGB2 = 0x00280000;
const uint32_t BITMAP_LAYOUT_ARGB4 = 0x00300000;
const uint32_t BITMAP_LAYOUT_RGB565 = 0x00380000;
const uint32_t BITMAP_LAYOUT_PALETTED = 0x00400000;
const uint32_t BITMAP_LAYOUT_TEXT8X8 = 0x00480000;
const uint32_t BITMAP_LAYOUT_TEXTVGA = 0x00500000;
const uint32_t BITMAP_LAYOUT_BARGRAPH = 0x00580000;
const uint8_t ARGB1555 = 0x00;
const uint8_t L1 = 0x01;
const uint8_t L4 = 0x02;
const uint8_t L8 = 0x03;
const uint8_t RGB332 = 0x04;
const uint8_t ARGB2 = 0x05;
const uint8_t ARGB4 = 0x06;
const uint8_t RGB565 = 0x07;
const uint8_t PALETTED = 0x08;
const uint8_t TEXT8X8 = 0x09;
const uint8_t TEXTVGA = 0x0A;
const uint8_t BARGRAPH = 0x0B;
const uint32_t BITMAP_SIZE = 0x08000000;
const uint8_t NEAREST = 0x00;
const uint8_t BILINEAR = 0x01;
const uint8_t BORDER = 0x00;
const uint8_t REPEAT = 0x01;
const uint32_t BITMAP_SOURCE = 0x01000000;
const uint32_t BITMAP_TRANSFORM_A = 0x15000000;
const uint32_t BITMAP_TRANSFORM_B = 0x16000000;
const uint32_t BITMAP_TRANSFORM_C = 0x17000000;
const uint32_t BITMAP_TRANSFORM_D = 0x18000000;
const uint32_t BITMAP_TRANSFORM_E = 0x19000000;
const uint32_t BITMAP_TRANSFORM_F = 0x1A000000;
const uint32_t BLEND_FUNC = 0x0B000000;
const uint32_t BLEND_FUNC_SRC_ZERO = 0x00000000;
const uint32_t BLEND_FUNC_SRC_ONE = 0x00000008;
const uint32_t BLEND_FUNC_SRC_SRC_ALPHA = 0x00000010;
const uint32_t BLEND_FUNC_SRC_DST_ALPHA = 0x00000018;
const uint32_t BLEND_FUNC_SRC_ONE_MINUS_SRC_ALPHA = 0x00000020;
const uint32_t BLEND_FUNC_SRC_ONE_MINUS_DST_ALPHA = 0x00000028;
const uint32_t BLEND_FUNC_DST_ZERO = 0x00000000;
const uint32_t BLEND_FUNC_DST_ONE = 0x00000001;
const uint32_t BLEND_FUNC_DST_SRC_ALPHA = 0x00000002;
const uint32_t BLEND_FUNC_DST_DST_ALPHA = 0x00000003;
const uint32_t BLEND_FUNC_DST_ONE_MINUS_SRC_ALPHA = 0x00000004;
const uint32_t BLEND_FUNC_DST_ONE_MINUS_DST_ALPHA = 0x00000005;
const uint32_t CALL = 0x1D000000;
const uint32_t CELL = 0x06000000;
const uint32_t CLEAR = 0x26000000;
const uint32_t CLEAR_COLOR_BUFFER = 0x00000004;
const uint32_t CLEAR_STENCIL_BUFFER = 0x00000002;
const uint32_t CLEAR_TAG_BUFFER = 0x00000001;
const uint32_t CLEAR_COLOR_A = 0x0F000000;
const uint32_t CLEAR_COLOR_RGB = 0x02000000;
const uint32_t CLEAR_STENCIL = 0x11000000;
const uint32_t CLEAR_TAG = 0x12000000;
const uint32_t COLOR_A = 0x10000000;
const uint32_t COLOR_MASK = 0x20000000;
const uint32_t COLOR_MASK_RED = 0x00000008;
const uint32_t COLOR_MASK_GRN = 0x00000004;
const uint32_t COLOR_MASK_BLU = 0x00000002;
const uint32_t COLOR_MASK_ALPHA = 0x00000001;
const uint32_t COLOR_RGB = 0x04000000;
const uint32_t DL_DISPLAY = 0x00000000;
const uint32_t END = 0x21000000;
const uint32_t JUMP = 0x1E000000;
const uint32_t LINE_WIDTH = 0x0E000000;
const uint32_t MACRO = 0x25000000;
const uint32_t POINT_SIZE = 0x0D000000;
const uint32_t RESTORE_CONTEXT = 0x23000000;
const uint32_t RETURN = 0x24000000;
const uint32_t SAVE_CONTEXT = 0x22000000;
const uint32_t SCISSOR_SIZE = 0x1C000000;
const uint32_t SCISSOR_XY = 0x1B000000;
const uint32_t STENCIL_FUNC = 0x0A000000;
const uint32_t STENCIL_FUNC_NEVER = 0x00000000;
const uint32_t STENCIL_FUNC_LESS = 0x00010000;
const uint32_t STENCIL_FUNC_LEQUAL = 0x00020000;
const uint32_t STENCIL_FUNC_GREATER = 0x00030000;
const uint32_t STENCIL_FUNC_GEQUAL = 0x00040000;
const uint32_t STENCIL_FUNC_EQUAL = 0x00050000;
const uint32_t STENCIL_FUNC_NOTEQUAL = 0x00060000;
const uint32_t STENCIL_FUNC_ALWAYS = 0x00070000;
const uint32_t STENCIL_MASK = 0x13000000;
const uint32_t STENCIL_OP = 0x0C000000;
const uint32_t STENCIL_OP_PASS_ZERO = 0x00000000;
const uint32_t STENCIL_OP_PASS_KEEP = 0x00000001;
const uint32_t STENCIL_OP_PASS_REPLACE = 0x00000002;
const uint32_t STENCIL_OP_PASS_INCR = 0x00000003;
const uint32_t STENCIL_OP_PASS_DECR = 0x00000004;
const uint32_t STENCIL_OP_PASS_INVERT = 0x00000005;
const uint32_t STENCIL_OP_FAIL_ZERO = 0x00000000;
const uint32_t STENCIL_OP_FAIL_KEEP = 0x00000008;
const uint32_t STENCIL_OP_FAIL_REPLACE = 0x00000010;
const uint32_t STENCIL_OP_FAIL_INCR = 0x00000018;
const uint32_t STENCIL_OP_FAIL_DECR = 0x00000020;
const uint32_t STENCIL_OP_FAIL_INVERT = 0x00000028;
const uint32_t TAG = 0x03000000;
const uint32_t TAG_MASK = 0x14000000;
const uint32_t VERTEX2F = 0x40000000;
const uint32_t VERTEX2II = 0x80000000;
}
// CO-PROCESSOR ENGINE COMMANDS
namespace FTDI {
const uint32_t CMD_DLSTART = 0xFFFFFF00;
const uint32_t CMD_SWAP = 0xFFFFFF01;
const uint32_t CMD_COLDSTART = 0xFFFFFF32;
const uint32_t CMD_INTERRUPT = 0xFFFFFF02;
const uint32_t CMD_APPEND = 0xFFFFFF1E;
const uint32_t CMD_REGREAD = 0xFFFFFF19;
const uint32_t CMD_MEMWRITE = 0xFFFFFF1A;
const uint32_t CMD_INFLATE = 0xFFFFFF22;
const uint32_t CMD_LOADIMAGE = 0xFFFFFF24;
const uint32_t CMD_MEMCRC = 0xFFFFFF18;
const uint32_t CMD_MEMZERO = 0xFFFFFF1C;
const uint32_t CMD_MEMSET = 0xFFFFFF1B;
const uint32_t CMD_MEMCPY = 0xFFFFFF1D;
const uint32_t CMD_BUTTON = 0xFFFFFF0D;
const uint32_t CMD_CLOCK = 0xFFFFFF14;
const uint32_t CMD_FGCOLOR = 0xFFFFFF0A;
const uint32_t CMD_BGCOLOR = 0xFFFFFF09;
const uint32_t CMD_GRADCOLOR = 0xFFFFFF34;
const uint32_t CMD_GAUGE = 0xFFFFFF13;
const uint32_t CMD_GRADIENT = 0xFFFFFF0B;
const uint32_t CMD_KEYS = 0xFFFFFF0E;
const uint32_t CMD_PROGRESS = 0xFFFFFF0F;
const uint32_t CMD_SCROLLBAR = 0xFFFFFF11;
const uint32_t CMD_SLIDER = 0xFFFFFF10;
const uint32_t CMD_DIAL = 0xFFFFFF2D;
const uint32_t CMD_TOGGLE = 0xFFFFFF12;
const uint32_t CMD_TEXT = 0xFFFFFF0C;
const uint32_t CMD_NUMBER = 0xFFFFFF2E;
const uint32_t CMD_LOADIDENTITY = 0xFFFFFF26;
const uint32_t CMD_SETMATRIX = 0xFFFFFF2A;
const uint32_t CMD_GETMATRIX = 0xFFFFFF33;
const uint32_t CMD_GETPTR = 0xFFFFFF23;
const uint32_t CMD_GETPROPS = 0xFFFFFF25;
const uint32_t CMD_SCALE = 0xFFFFFF28;
const uint32_t CMD_ROTATE = 0xFFFFFF29;
const uint32_t CMD_TRANSLATE = 0xFFFFFF27;
const uint32_t CMD_CALIBRATE = 0xFFFFFF15;
const uint32_t CMD_SPINNER = 0xFFFFFF16;
const uint32_t CMD_SCREENSAVER = 0xFFFFFF2F;
const uint32_t CMD_SKETCH = 0xFFFFFF30;
const uint32_t CMD_STOP = 0xFFFFFF17;
const uint32_t CMD_SETFONT = 0xFFFFFF2B;
const uint32_t CMD_TRACK = 0xFFFFFF2C;
const uint32_t CMD_SNAPSHOT = 0xFFFFFF1F;
const uint32_t CMD_LOGO = 0xFFFFFF31;
}
namespace FTDI {
enum effect_t {
SILENCE = 0x00,
SQUARE_WAVE = 0x01,
SINE_WAVE = 0x02,
SAWTOOTH_WAVE = 0x03,
TRIANGLE_WAVE = 0x04,
BEEPING = 0x05,
ALARM = 0x06,
WARBLE = 0x07,
CAROUSEL = 0x08,
SHORT_PIPS_1 = 0x10,
SHORT_PIPS_2 = 0x11,
SHORT_PIPS_3 = 0x12,
SHORT_PIPS_4 = 0x13,
SHORT_PIPS_5 = 0x14,
SHORT_PIPS_6 = 0x15,
SHORT_PIPS_7 = 0x16,
SHORT_PIPS_8 = 0x17,
SHORT_PIPS_9 = 0x18,
SHORT_PIPS_10 = 0x19,
SHORT_PIPS_11 = 0x1A,
SHORT_PIPS_12 = 0x1B,
SHORT_PIPS_13 = 0x1C,
SHORT_PIPS_14 = 0x1D,
SHORT_PIPS_15 = 0x1E,
SHORT_PIPS_16 = 0x1F,
DTMF_POUND = 0x23,
DTMF_STAR = 0x2C,
DTMF_0 = 0x30,
DTMF_1 = 0x31,
DTMF_2 = 0x32,
DTMF_3 = 0x33,
DTMF_4 = 0x34,
DTMF_5 = 0x35,
DTMF_6 = 0x36,
DTMF_7 = 0x37,
DTMF_8 = 0x38,
DTMF_9 = 0x39,
HARP = 0x40,
XYLOPHONE = 0x41,
TUBA = 0x42,
GLOCKENSPIEL = 0x43,
ORGAN = 0x44,
TRUMPET = 0x45,
PIANO = 0x46,
CHIMES = 0x47,
MUSIC_BOX = 0x48,
BELL = 0x49,
CLICK = 0x50,
SWITCH = 0x51,
COWBELL = 0x52,
NOTCH = 0x53,
HIHAT = 0x54,
KICKDRUM = 0x55,
POP = 0x56,
CLACK = 0x57,
CHACK = 0x58,
MUTE = 0x60,
UNMUTE = 0x61
};
enum note_t {
END_SONG = 0x00,
REST = 0x00,
NOTE_C3 = 0x32,
NOTE_D3 = 0x33,
NOTE_D3S = 0x34,
NOTE_F3 = 0x35,
NOTE_F3S = 0x36,
NOTE_G3 = 0x37,
NOTE_G3S = 0x38,
NOTE_A3 = 0x39,
NOTE_A3S = 0x3A,
NOTE_B3 = 0x3B,
NOTE_C4 = 0x3C,
NOTE_C4S = 0x3D,
NOTE_D4 = 0x3E,
NOTE_D4S = 0x3F,
NOTE_E4 = 0x40,
NOTE_F4 = 0x41,
NOTE_F4S = 0x42,
NOTE_G4 = 0x43,
NOTE_G4S = 0x44,
NOTE_A4 = 0x45
};
}
// If LCD_IS_FT800 is defined, then copy the FT800 namespace into the FTDI namespace
// If LCD_IS_FT810 is defined, then copy the FT810 namespace into the FTDI namespace
#if defined(LCD_IS_FT800)
namespace FTDI {
using namespace FT800;
}
#elif defined(LCD_IS_FT810)
namespace FTDI {
using namespace FT810;
}
#endif
#endif // _AO_FT810_H