mirror of
https://github.com/portapack-mayhem/mayhem-firmware.git
synced 2026-08-24 08:29:05 +00:00
Gpio modify v4 (#3266)
* Refactor GPIO handling for RFFC5072: update pin mappings and simplify initialization * Refactor GPIO handling: replace portapack::gpio_dfu with dfu_button and clean up unused GPIOs * Refactor MAX283x GPIO handling: update pin mappings and simplify initialization * Refactor GPIO handling: update MAX2831 shutdown pin configuration * Refactor GPIO handling: add MAX2831 RXHP and RXTX control, update related configurations * Refactor MAX2831 frequency setting to include reference divider parameter and improve validation checks * Refactor MAX2831 frequency setting to remove reference divider parameter and improve frequency validation * copilot
This commit is contained in:
@@ -394,6 +394,17 @@ constexpr PinMap map_lpf{10, 1, 4, 8, 4};
|
||||
constexpr PinMap map_tx_enable{6, 5, 3, 4, 0};
|
||||
constexpr PinMap map_rf_amp_enable{10, 2, 4, 9, 0};
|
||||
constexpr PinMap map_pps_in_out{2, 5, 5, 5, 4};
|
||||
|
||||
constexpr PinMap map_rffc5072_clock{9, 5, 5, 18, 4};
|
||||
constexpr PinMap map_rffc5072_sdata{9, 2, 4, 14, 0};
|
||||
|
||||
constexpr PinMap map_sct_clk_in{6, 4, 3, 3, 1};
|
||||
|
||||
constexpr PinMap map_max283x_select{13, 14, 6, 28, 4};
|
||||
constexpr PinMap map_max283x_enable{14, 1, 7, 1, 4};
|
||||
constexpr PinMap map_max2831_rxtx_enable{14, 2, 7, 2, 4};
|
||||
constexpr PinMap map_max2831_rxhp{13, 15, 6, 29, 4};
|
||||
|
||||
// constexpr PinMap map_unused_1{2, 7, 0, 7, 0};
|
||||
|
||||
#else
|
||||
@@ -425,6 +436,13 @@ constexpr PinMap map_ant_bias{4, 4, 2, 4, 0};
|
||||
constexpr PinMap map_r9_mcu_clk_en{1, 1, 0, 8, 0};
|
||||
constexpr PinMap map_r9_clkout_en{1, 2, 0, 9, 0};
|
||||
constexpr PinMap map_r9_clkin_en{6, 7, 5, 15, 4};
|
||||
|
||||
constexpr PinMap map_rffc5072_clock{2, 6, 5, 6, 4};
|
||||
constexpr PinMap map_rffc5072_sdata{6, 4, 3, 3, 0};
|
||||
|
||||
constexpr PinMap map_max283x_select{1, 20, 0, 15, 0};
|
||||
constexpr PinMap map_max283x_enable{4, 6, 2, 6, 0};
|
||||
|
||||
#endif
|
||||
|
||||
constexpr PinMap map_sgpio_0{0, 0, 0, 0, 3};
|
||||
@@ -445,6 +463,10 @@ constexpr PinMap map_dfu_boot_1{1, 2, 0, 9, 0};
|
||||
constexpr PinMap map_dfu_button{2, 8, 5, 7, 4};
|
||||
constexpr PinMap map_lcd_wrx{2, 9, 1, 10, 0};
|
||||
constexpr PinMap map_isp{2, 7, 0, 7, 0};
|
||||
|
||||
constexpr PinMap map_rffc5072_select{5, 4, 2, 13, 0};
|
||||
constexpr PinMap map_rffc5072_resetx{5, 5, 2, 14, 0};
|
||||
|
||||
#ifdef PRALINE
|
||||
|
||||
// P1 Multiplexer control pins
|
||||
@@ -522,6 +544,15 @@ constexpr GPIO ant_bias_oc{pin_ant_bias_oc, map_ant_bias_oc.gpio_port, map_ant_b
|
||||
constexpr Pin pin_pps_in_out{map_pps_in_out.scu_port, map_pps_in_out.scu_pin}; // SCU: P2_5
|
||||
constexpr GPIO pps_in_out{pin_pps_in_out, map_pps_in_out.gpio_port, map_pps_in_out.gpio_pad, map_pps_in_out.gpio_mode}; // GPIO[5]5
|
||||
|
||||
constexpr Pin pin_sct_clk_in{map_sct_clk_in.scu_port, map_sct_clk_in.scu_pin}; // SCU: P6_4
|
||||
constexpr GPIO sct_clk_in{pin_sct_clk_in, map_sct_clk_in.gpio_port, map_sct_clk_in.gpio_pad, map_sct_clk_in.gpio_mode}; // GPIO[3]3
|
||||
|
||||
constexpr Pin pin_max2831_rxtx_enable{map_max2831_rxtx_enable.scu_port, map_max2831_rxtx_enable.scu_pin}; // SCU: PE_2
|
||||
constexpr GPIO max2831_rxtx_enable{pin_max2831_rxtx_enable, map_max2831_rxtx_enable.gpio_port, map_max2831_rxtx_enable.gpio_pad, map_max2831_rxtx_enable.gpio_mode}; // GPIO[7]2
|
||||
|
||||
constexpr Pin pin_max2831_rxhp{map_max2831_rxhp.scu_port, map_max2831_rxhp.scu_pin}; // SCU: PD_15
|
||||
constexpr GPIO max2831_rxhp{pin_max2831_rxhp, map_max2831_rxhp.gpio_port, map_max2831_rxhp.gpio_pad, map_max2831_rxhp.gpio_mode}; // GPIO[6]29
|
||||
|
||||
#else
|
||||
constexpr Pin pin_sgpio_13{map_sgpio_13.scu_port, map_sgpio_13.scu_pin}; // SCU: P4_8
|
||||
constexpr GPIO sgpio_13{pin_sgpio_13, map_sgpio_13.gpio_port, map_sgpio_13.gpio_pad, map_sgpio_13.gpio_mode}; // GPIO[5]12
|
||||
@@ -671,6 +702,24 @@ constexpr GPIO lcd_wrx{pin_lcd_wrx, map_lcd_wrx.gpio_port, map_lcd_wrx.gpio_pad,
|
||||
constexpr Pin pin_isp{map_isp.scu_port, map_isp.scu_pin}; // SCU: P2_7
|
||||
constexpr GPIO dfu_isp{pin_isp, map_isp.gpio_port, map_isp.gpio_pad, map_isp.gpio_mode}; // GPIO[0]7
|
||||
|
||||
constexpr Pin pin_rffc5072_clock{map_rffc5072_clock.scu_port, map_rffc5072_clock.scu_pin}; // SCU: P2_6, PRALINE: P9_5
|
||||
constexpr GPIO rffc5072_clock{pin_rffc5072_clock, map_rffc5072_clock.gpio_port, map_rffc5072_clock.gpio_pad, map_rffc5072_clock.gpio_mode}; // GPIO[5]6, PRALINE: GPIO[5]18
|
||||
|
||||
constexpr Pin pin_rffc5072_sdata{map_rffc5072_sdata.scu_port, map_rffc5072_sdata.scu_pin}; // SCU: P6_4, PRALINE: P9_2
|
||||
constexpr GPIO rffc5072_sdata{pin_rffc5072_sdata, map_rffc5072_sdata.gpio_port, map_rffc5072_sdata.gpio_pad, map_rffc5072_sdata.gpio_mode}; // GPIO[3]3, PRALINE: GPIO[4]14
|
||||
|
||||
constexpr Pin pin_rffc5072_select{map_rffc5072_select.scu_port, map_rffc5072_select.scu_pin}; // SCU: P5_4
|
||||
constexpr GPIO rffc5072_select{pin_rffc5072_select, map_rffc5072_select.gpio_port, map_rffc5072_select.gpio_pad, map_rffc5072_select.gpio_mode, Polarity::ActiveLow}; // GPIO[2]13
|
||||
|
||||
constexpr Pin pin_rffc5072_resetx{map_rffc5072_resetx.scu_port, map_rffc5072_resetx.scu_pin}; // SCU: P5_5
|
||||
constexpr GPIO rffc5072_resetx{pin_rffc5072_resetx, map_rffc5072_resetx.gpio_port, map_rffc5072_resetx.gpio_pad, map_rffc5072_resetx.gpio_mode, Polarity::ActiveLow}; // GPIO[2]14
|
||||
|
||||
constexpr Pin pin_max283x_select{map_max283x_select.scu_port, map_max283x_select.scu_pin}; // SCU: P1_20, PRALINE: PD_14
|
||||
constexpr GPIO max283x_select{pin_max283x_select, map_max283x_select.gpio_port, map_max283x_select.gpio_pad, map_max283x_select.gpio_mode, Polarity::ActiveLow}; // GPIO[0]15, PRALINE: GPIO[6]28
|
||||
|
||||
constexpr Pin pin_max283x_enable{map_max283x_enable.scu_port, map_max283x_enable.scu_pin}; // SCU: P4_6, PRALINE: PE_1
|
||||
constexpr GPIO max283x_enable{pin_max283x_enable, map_max283x_enable.gpio_port, map_max283x_enable.gpio_pad, map_max283x_enable.gpio_mode}; // GPIO[2]6, PRALINE: GPIO[7]1
|
||||
|
||||
} // namespace gpio_control
|
||||
|
||||
namespace power_control {
|
||||
|
||||
@@ -34,41 +34,11 @@ namespace one {
|
||||
/* GPIO */
|
||||
|
||||
#ifdef PRALINE
|
||||
// PRALINE: GPIO2[13] is SPI CS only, FPGA controls ENX/RESETX
|
||||
constexpr GPIO gpio_rffc5072_select = gpio[GPIO2_13]; // P5_4: SPI CS (ENX)
|
||||
constexpr GPIO gpio_rffc5072_resetx = gpio[GPIO2_14]; // P5_5: LPC43xx controls directly
|
||||
#else
|
||||
constexpr GPIO gpio_rffc5072_select = gpio[GPIO2_13];
|
||||
constexpr GPIO gpio_rffc5072_resetx = gpio[GPIO2_14];
|
||||
#endif
|
||||
|
||||
#ifdef PRALINE
|
||||
constexpr GPIO gpio_rffc5072_clock = gpio[GPIO5_18];
|
||||
constexpr GPIO gpio_rffc5072_data = gpio[GPIO4_14];
|
||||
#else
|
||||
constexpr GPIO gpio_rffc5072_clock = gpio[GPIO5_6];
|
||||
constexpr GPIO gpio_rffc5072_data = gpio[GPIO3_3];
|
||||
#endif
|
||||
|
||||
#ifdef PRALINE
|
||||
constexpr GPIO gpio_max283x_select = gpio[GPIO6_28];
|
||||
#else
|
||||
constexpr GPIO gpio_max283x_select = gpio[GPIO0_15];
|
||||
#endif
|
||||
|
||||
#ifdef PRALINE
|
||||
// PRALINE uses MAX2831 transceiver with different control pins
|
||||
constexpr GPIO gpio_max283x_enable = gpio[GPIO7_1]; // MAX2831 ENABLE (PE_1)
|
||||
// constexpr GPIO gpio_max2831_enable = gpio[GPIO7_1]; // Alias
|
||||
constexpr GPIO gpio_max2831_rx_enable = gpio[GPIO7_2]; // MAX2831 RX_ENABLE (PE_2)
|
||||
// constexpr GPIO gpio_max2831_rxhp = gpio[GPIO6_29]; // MAX2831 RXHP (PD_15)
|
||||
constexpr GPIO gpio_max2831_ld = gpio[GPIO4_11]; // MAX2831 Lock Detect (P9_6)
|
||||
// Legacy aliases for code compatibility
|
||||
constexpr GPIO gpio_max2837_rxenable = gpio[GPIO7_2];
|
||||
constexpr GPIO gpio_max2837_txenable = gpio[GPIO7_2]; // MAX2831 uses single RX/TX control
|
||||
constexpr GPIO gpio_max2839_rxtx = gpio[GPIO7_2];
|
||||
|
||||
#else
|
||||
constexpr GPIO gpio_max283x_enable = gpio[GPIO2_6];
|
||||
|
||||
constexpr GPIO gpio_max2837_rxenable = gpio[GPIO2_5];
|
||||
constexpr GPIO gpio_max2837_txenable = gpio[GPIO2_4];
|
||||
constexpr GPIO gpio_max2839_rxtx = gpio[GPIO2_5];
|
||||
|
||||
@@ -33,13 +33,11 @@ namespace portapack {
|
||||
|
||||
/* TODO: Make these GPIOs private and expose via appropriate functions. */
|
||||
|
||||
constexpr GPIO gpio_io_stbx = gpio[GPIO5_0]; /* P2_0 */
|
||||
constexpr GPIO gpio_addr = gpio[GPIO5_1]; /* P2_1 */
|
||||
constexpr GPIO gpio_lcd_te = gpio[GPIO5_3]; /* P2_3 */
|
||||
constexpr GPIO gpio_dfu = gpio[GPIO5_7]; /* P2_8 */
|
||||
constexpr GPIO gpio_lcd_rdx = gpio[GPIO5_4]; /* P2_4 */
|
||||
constexpr GPIO gpio_lcd_wrx = gpio[GPIO1_10]; /* P2_9 */
|
||||
constexpr GPIO gpio_dir = gpio[GPIO1_13]; /* P2_13 */
|
||||
constexpr GPIO gpio_io_stbx = gpio[GPIO5_0]; /* P2_0 */
|
||||
constexpr GPIO gpio_addr = gpio[GPIO5_1]; /* P2_1 */
|
||||
constexpr GPIO gpio_lcd_te = gpio[GPIO5_3]; /* P2_3 */
|
||||
constexpr GPIO gpio_lcd_rdx = gpio[GPIO5_4]; /* P2_4 */
|
||||
constexpr GPIO gpio_dir = gpio[GPIO1_13]; /* P2_13 */
|
||||
constexpr std::array<GPIO, 8> gpios_data{
|
||||
gpio[GPIO3_8],
|
||||
gpio[GPIO3_9],
|
||||
|
||||
@@ -82,11 +82,9 @@ void IO::init() {
|
||||
|
||||
gpio_dir.output();
|
||||
gpio_lcd_rdx.output();
|
||||
gpio_lcd_wrx.output();
|
||||
gpio_io_stbx.output();
|
||||
gpio_addr.output();
|
||||
gpio_rot_a.input();
|
||||
gpio_rot_b.input();
|
||||
}
|
||||
|
||||
void IO::lcd_backlight(const bool value) {
|
||||
@@ -166,7 +164,7 @@ uint32_t IO::io_update(const TouchPinsConfig write_value) {
|
||||
}
|
||||
gpio_addr.write(addr);
|
||||
|
||||
auto dfu_btn = portapack::io.dfu_read() & 0x01;
|
||||
uint32_t dfu_btn = gpio_control::dfu_button.read();
|
||||
return (switches_raw & 0x7f) | (dfu_btn << 7);
|
||||
}
|
||||
|
||||
|
||||
@@ -33,6 +33,8 @@
|
||||
#include "gpio.hpp"
|
||||
#include "ui.hpp"
|
||||
|
||||
#include "gpio.hpp"
|
||||
|
||||
// #include "portapack_persistent_memory.hpp"
|
||||
|
||||
// Darkened pixel bit mask for each possible shift value.
|
||||
@@ -108,18 +110,14 @@ class IO {
|
||||
constexpr IO(
|
||||
GPIO gpio_dir,
|
||||
GPIO gpio_lcd_rdx,
|
||||
GPIO gpio_lcd_wrx,
|
||||
GPIO gpio_io_stbx,
|
||||
GPIO gpio_addr,
|
||||
GPIO gpio_rot_a,
|
||||
GPIO gpio_rot_b)
|
||||
GPIO gpio_rot_a)
|
||||
: gpio_dir{gpio_dir},
|
||||
gpio_lcd_rdx{gpio_lcd_rdx},
|
||||
gpio_lcd_wrx{gpio_lcd_wrx},
|
||||
gpio_io_stbx{gpio_io_stbx},
|
||||
gpio_addr{gpio_addr},
|
||||
gpio_rot_a{gpio_rot_a},
|
||||
gpio_rot_b{gpio_rot_b} {};
|
||||
gpio_rot_a{gpio_rot_a} {};
|
||||
|
||||
void init();
|
||||
|
||||
@@ -270,18 +268,12 @@ class IO {
|
||||
return gpio_rot_a.read();
|
||||
}
|
||||
|
||||
uint32_t dfu_read() {
|
||||
return gpio_rot_b.read();
|
||||
}
|
||||
|
||||
private:
|
||||
const GPIO gpio_dir;
|
||||
const GPIO gpio_lcd_rdx;
|
||||
const GPIO gpio_lcd_wrx;
|
||||
const GPIO gpio_io_stbx;
|
||||
const GPIO gpio_addr;
|
||||
const GPIO gpio_rot_a;
|
||||
const GPIO gpio_rot_b;
|
||||
|
||||
static constexpr ioportid_t gpio_data_port_id = 3;
|
||||
static constexpr size_t gpio_data_shift = 8;
|
||||
@@ -298,11 +290,11 @@ class IO {
|
||||
}
|
||||
|
||||
void lcd_wr_assert() {
|
||||
gpio_lcd_wrx.clear();
|
||||
gpio_control::lcd_wrx.setInactive();
|
||||
}
|
||||
|
||||
void lcd_wr_deassert() {
|
||||
gpio_lcd_wrx.set();
|
||||
gpio_control::lcd_wrx.setActive();
|
||||
}
|
||||
|
||||
void io_stb_assert() {
|
||||
|
||||
Reference in New Issue
Block a user