revA GPIO support

This commit is contained in:
Peter D. Gray 2023-05-30 10:13:56 -04:00 committed by scgbckbone
parent 8620d8fb68
commit 55e81b75dc
5 changed files with 85 additions and 34 deletions

View File

@ -250,7 +250,7 @@ STATIC mp_obj_t watchpoint(volatile mp_obj_t arg1)
MP_DEFINE_CONST_FUN_OBJ_1(watchpoint_obj, watchpoint);
#define SWAB16(n) (( ((n)>>8) | ((n) << 8) )&0xffff)
#define GREY(n) SWAB16( (n<<11) | (n<<6) | n)
#define GREY(n) SWAB16( (n<<11) | (n<<5) | n)
// BGR565 values, but wrong endian, so green split weird
static uint16_t palette[16] = {
@ -259,7 +259,7 @@ static uint16_t palette[16] = {
SWAB16(0xf800), // 2 => red
SWAB16(0x07e0), // 3 => green
SWAB16(0x00f8), // 4 => blue
SWAB16(0x001f), // 4 => blue
// some greys: 5 .. 12
GREY(5), GREY(9), GREY(13), GREY(17), GREY(21), GREY(25), GREY(29),

View File

@ -69,23 +69,49 @@ SD_D2,PC10
SD_D3,PC11
SD_CMD,PD2
SD_CK,PC12
SD_SW,PC13
SD,PA9
M2_COL0,PB0
M2_COL1,PB1
M2_COL2,PB2
M2_ROW0,PD8
M2_ROW1,PD9
M2_ROW2,PD10
M2_ROW3,PD11
SD_DETECT,PD3
SD_DETECT2,PD4
SD_MUX,PC13
Q1_COL0,PB0
Q1_COL1,PB1
Q1_COL2,PB2
Q1_COL3,PB5
Q1_COL4,PB8
Q1_COL5,PB9
Q1_COL6,PB10
Q1_COL7,PD13
Q1_COL8,PD14
Q1_COL9,PD15
Q1_ROW0,PD8
Q1_ROW1,PD9
Q1_ROW2,PD10
Q1_ROW3,PD11
Q1_ROW4,PD12
Q1_ROW5,PD7
F_CS,PB9
SF_SCLK,PB10
SF_MISO,PC2
SF_MOSI,PC3
TURN_OFF,PC0
NOT_BATTERY,PC1
NFC_ED,PD6
SD_ACTIVE,PC7
USB_ACTIVE,PC6
SE2_SCL,PB13
SE2_SDA,PB14
NFC_SCL,PB6
NFC_SDA,PB7
NFC_ED,PC4
NFC_ACTIVE,PE4
QR_TX,PA2
QR_RX,PA3
QR_RESET,PE0
QR_TRIG,PE1
LCD_TEAR,PB11
PWR_BTN,PB12
BL_ENABLE,PE3
LCD_CS,PA4
LCD_SCLK,PA5
LCD_RESET,PA6
LCD_MOSI,PA7
LCD_DATA_CMD,PA8
VIN_SENSE,PA1
G_SWCLK_B0,PE2
G_CTRL,PE5
G_RESET,PE6

1 D0 PA3
69 SD_D3 PC11
70 SD_CMD PD2
71 SD_CK PC12
72 SD_SW SD_DETECT PC13 PD3
73 SD SD_DETECT2 PA9 PD4
74 M2_COL0 SD_MUX PB0 PC13
75 M2_COL1 Q1_COL0 PB1 PB0
76 M2_COL2 Q1_COL1 PB2 PB1
77 M2_ROW0 Q1_COL2 PD8 PB2
78 M2_ROW1 Q1_COL3 PD9 PB5
79 M2_ROW2 Q1_COL4 PD10 PB8
80 M2_ROW3 Q1_COL5 PD11 PB9
81 Q1_COL6 PB10
82 Q1_COL7 PD13
83 Q1_COL8 PD14
84 Q1_COL9 PD15
85 Q1_ROW0 PD8
86 Q1_ROW1 PD9
87 Q1_ROW2 PD10
88 Q1_ROW3 PD11
89 Q1_ROW4 PD12
90 Q1_ROW5 PD7
91 F_CS PB9
92 SF_SCLK TURN_OFF PB10 PC0
93 SF_MISO NOT_BATTERY PC2 PC1
94 SF_MOSI NFC_ED PC3 PD6
95 SD_ACTIVE PC7
96 USB_ACTIVE PC6
97 SE2_SCL PB13
98 SE2_SDA PB14
99 NFC_SCL PB6
100 NFC_SDA PB7
101 NFC_ED NFC_ACTIVE PC4 PE4
102 QR_TX PA2
103 QR_RX PA3
104 QR_RESET PE0
105 QR_TRIG PE1
106 LCD_TEAR PB11
107 PWR_BTN PB12
108 BL_ENABLE PE3
109 LCD_CS PA4
110 LCD_SCLK PA5
111 LCD_RESET PA6
112 LCD_MOSI PA7
113 LCD_DATA_CMD PA8
114 VIN_SENSE PA1
115 G_SWCLK_B0 PE2
116 G_CTRL PE5
117 G_RESET PE6

View File

@ -123,7 +123,11 @@ sdcard_probe(uint32_t *num_blocks)
bool
sdcard_is_inserted(void)
{
return !!HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13);
#ifdef FOR_Q1_ONLY
return !!HAL_GPIO_ReadPin(GPIOD, GPIO_PIN_3); // PD3
#else
return !!HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13); // PC13
#endif
}
// dfu_hdr_parse()

View File

@ -63,9 +63,9 @@ gpio_setup(void)
}
{ // Port B - mostly unused, but want TEAR input
// TEAR from LCD: PB15
// TEAR from LCD: PB11
GPIO_InitTypeDef setup = {
.Pin = GPIO_PIN_15,
.Pin = GPIO_PIN_11,
.Mode = GPIO_MODE_INPUT,
.Pull = GPIO_NOPULL,
.Speed = GPIO_SPEED_FREQ_LOW, // 60Hz
@ -79,20 +79,22 @@ gpio_setup(void)
// SD1 active LED: PC7
// USB active LED: PC6
// TURN OFF: PC0
// SD mux: PC13
{ GPIO_InitTypeDef setup = {
.Pin = GPIO_PIN_7 | GPIO_PIN_6 | GPIO_PIN_0,
.Pin = GPIO_PIN_7 | GPIO_PIN_6 | GPIO_PIN_0, GPIO_PIN_13,
.Mode = GPIO_MODE_OUTPUT_PP,
.Pull = GPIO_NOPULL,
.Speed = GPIO_SPEED_FREQ_LOW,
};
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, 0); // stay on!
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, 0); // keep power on!
HAL_GPIO_Init(GPIOC, &setup);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7|GPIO_PIN_6, 0); // turn LEDs off
// turn LEDs off, SD mux to A
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7|GPIO_PIN_6|GPIO_PIN_13, 0);
}
// Port C - Inputs
// SD card detect switch: PC13, PC1 battery/not
// SD card detect switch: PC1 battery/not
{ GPIO_InitTypeDef setup = {
.Pin = GPIO_PIN_13 | GPIO_PIN_1,
.Mode = GPIO_MODE_INPUT,
@ -104,32 +106,44 @@ gpio_setup(void)
// Port D - outputs
// SD2 active LED: PD0
// SD_MUX: PD3
{ GPIO_InitTypeDef setup = {
.Pin = GPIO_PIN_0 | GPIO_PIN_3,
.Pin = GPIO_PIN_0,
.Mode = GPIO_MODE_OUTPUT_PP,
.Pull = GPIO_NOPULL,
.Speed = GPIO_SPEED_FREQ_LOW,
};
HAL_GPIO_Init(GPIOD, &setup);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_0|GPIO_PIN_3, 0); // turn off / select A slot
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_0, 0); // turn off
}
// Port D - Inputs
// SD slots detects: PD3/4
{ GPIO_InitTypeDef setup = {
.Pin = GPIO_PIN_3 | GPIO_PIN_4,
.Mode = GPIO_MODE_INPUT,
.Pull = GPIO_PULLUP, // required
.Speed = GPIO_SPEED_FREQ_LOW,
};
HAL_GPIO_Init(GPIOD, &setup);
}
// Port E - Q1 things
// QR_RESET/TRIG - leave for now
// QR_RESET/TRIG - ignore for now
// BL_ENABLE: PE3
// NFC_ACTIVE: PE4 (led)
// GPU control: 2,5,6 outputs
{ GPIO_InitTypeDef setup = {
.Pin = GPIO_PIN_3 | GPIO_PIN_4,
.Pin = GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_2 | GPIO_PIN_5 | GPIO_PIN_6,
.Mode = GPIO_MODE_OUTPUT_PP,
.Pull = GPIO_NOPULL,
.Speed = GPIO_SPEED_FREQ_LOW,
};
HAL_GPIO_Init(GPIOE, &setup);
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_4, 0); // turn off NFC LED
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, 1); // turn on Backlight
// turn off NFC LED, reset GPU, keep in reset
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_4|GPIO_PIN_5, 0);
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, 1); // turn on Backlight,
}

View File

@ -18,9 +18,9 @@
//#define DISABLE_LCD
// LCD connections:
// - all on port A
// - mostly on port A
// - all push/pull outputs
// - PB15: TEAR input
// - shared with GPU
//
#define RESET_PIN GPIO_PIN_6
#define DC_PIN GPIO_PIN_8
@ -28,6 +28,9 @@
#define SPI_SCK GPIO_PIN_5
#define SPI_MOSI GPIO_PIN_7
// port B
#define TEAR_PIN GPIO_PIN_11
const int LCD_WIDTH = 320;
const int LCD_HEIGHT = 240;
const int NUM_PIXELS = (LCD_WIDTH*LCD_HEIGHT);
@ -55,11 +58,15 @@ static SPI_HandleTypeDef spi_port;
#endif
static inline void wait_vsync(void) {
// PB15 is TEAR input: a positive pulse every 60Hz that
// PB11 is TEAR input: a positive pulse every 60Hz that
// corresponds to vertical blanking time
while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_15) == 0) {
;
uint32_t timeout = 1000000;
for(; timeout; timeout--) {
if(HAL_GPIO_ReadPin(GPIOB, TEAR_PIN) != 0) {
return;
}
}
puts("TEAR timeout");
}
// forward refs