mirror of
https://github.com/meshtastic/firmware.git
synced 2025-09-20 00:31:09 +00:00

Some checks are pending
CI / setup (check) (push) Waiting to run
CI / setup (esp32) (push) Waiting to run
CI / setup (esp32c3) (push) Waiting to run
CI / setup (esp32c6) (push) Waiting to run
CI / setup (esp32s3) (push) Waiting to run
CI / setup (nrf52840) (push) Waiting to run
CI / setup (rp2040) (push) Waiting to run
CI / setup (rp2350) (push) Waiting to run
CI / setup (stm32) (push) Waiting to run
CI / version (push) Waiting to run
CI / check (push) Blocked by required conditions
CI / build-esp32 (push) Blocked by required conditions
CI / build-esp32s3 (push) Blocked by required conditions
CI / build-esp32c3 (push) Blocked by required conditions
CI / build-esp32c6 (push) Blocked by required conditions
CI / build-nrf52840 (push) Blocked by required conditions
CI / build-rp2040 (push) Blocked by required conditions
CI / build-rp2350 (push) Blocked by required conditions
CI / build-stm32 (push) Blocked by required conditions
CI / build-debian-src (push) Waiting to run
CI / package-pio-deps-native-tft (push) Waiting to run
CI / test-native (push) Waiting to run
CI / docker-deb-amd64 (push) Waiting to run
CI / docker-deb-amd64-tft (push) Waiting to run
CI / docker-alp-amd64 (push) Waiting to run
CI / docker-alp-amd64-tft (push) Waiting to run
CI / docker-deb-arm64 (push) Waiting to run
CI / docker-deb-armv7 (push) Waiting to run
CI / gather-artifacts (esp32) (push) Blocked by required conditions
CI / gather-artifacts (esp32c3) (push) Blocked by required conditions
CI / gather-artifacts (esp32c6) (push) Blocked by required conditions
CI / gather-artifacts (esp32s3) (push) Blocked by required conditions
CI / gather-artifacts (nrf52840) (push) Blocked by required conditions
CI / gather-artifacts (rp2040) (push) Blocked by required conditions
CI / gather-artifacts (rp2350) (push) Blocked by required conditions
CI / gather-artifacts (stm32) (push) Blocked by required conditions
CI / release-artifacts (push) Blocked by required conditions
CI / release-firmware (esp32) (push) Blocked by required conditions
CI / release-firmware (esp32c3) (push) Blocked by required conditions
CI / release-firmware (esp32c6) (push) Blocked by required conditions
CI / release-firmware (esp32s3) (push) Blocked by required conditions
CI / release-firmware (nrf52840) (push) Blocked by required conditions
CI / release-firmware (rp2040) (push) Blocked by required conditions
CI / release-firmware (rp2350) (push) Blocked by required conditions
CI / release-firmware (stm32) (push) Blocked by required conditions
CI / publish-firmware (push) Blocked by required conditions
* add WIP for Unit C6L * adapt to new config structure * Add c6l BLE and screen support (#7991) * Minor c6l fix * Move out of PRIVATE_HW --------- Co-authored-by: Austin <vidplace7@gmail.com> Co-authored-by: Ben Meadors <benmmeadors@gmail.com> Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz> Co-authored-by: Jason P <Xaositek@users.noreply.github.com> Co-authored-by: Markus <Links2004@users.noreply.github.com>
75 lines
2.7 KiB
C++
75 lines
2.7 KiB
C++
#include "driver/gpio.h"
|
|
#include <Arduino.h>
|
|
#include <Wire.h>
|
|
// I2C device addr
|
|
#define PI4IO_M_ADDR 0x43
|
|
|
|
// PI4IO registers
|
|
#define PI4IO_REG_CHIP_RESET 0x01
|
|
#define PI4IO_REG_IO_DIR 0x03
|
|
#define PI4IO_REG_OUT_SET 0x05
|
|
#define PI4IO_REG_OUT_H_IM 0x07
|
|
#define PI4IO_REG_IN_DEF_STA 0x09
|
|
#define PI4IO_REG_PULL_EN 0x0B
|
|
#define PI4IO_REG_PULL_SEL 0x0D
|
|
#define PI4IO_REG_IN_STA 0x0F
|
|
#define PI4IO_REG_INT_MASK 0x11
|
|
#define PI4IO_REG_IRQ_STA 0x13
|
|
// PI4IO
|
|
|
|
#define setbit(x, y) x |= (0x01 << y)
|
|
#define clrbit(x, y) x &= ~(0x01 << y)
|
|
#define reversebit(x, y) x ^= (0x01 << y)
|
|
#define getbit(x, y) ((x) >> (y)&0x01)
|
|
|
|
void i2c_read_byte(uint8_t addr, uint8_t reg, uint8_t *value)
|
|
{
|
|
Wire.beginTransmission(addr);
|
|
Wire.write(reg);
|
|
Wire.endTransmission();
|
|
Wire.requestFrom(addr, 1);
|
|
*value = Wire.read();
|
|
}
|
|
|
|
/*******************************************************************/
|
|
void i2c_write_byte(uint8_t addr, uint8_t reg, uint8_t value)
|
|
{
|
|
Wire.beginTransmission(addr);
|
|
Wire.write(reg);
|
|
Wire.write(value);
|
|
Wire.endTransmission();
|
|
}
|
|
/*******************************************************************/
|
|
void c6l_init()
|
|
{
|
|
// P7 LoRa Reset
|
|
// P6 RF Switch
|
|
// P5 LNA Enable
|
|
|
|
printf("pi4io_init\n");
|
|
uint8_t in_data;
|
|
i2c_write_byte(PI4IO_M_ADDR, PI4IO_REG_CHIP_RESET, 0xFF);
|
|
vTaskDelay(10 / portTICK_PERIOD_MS);
|
|
i2c_read_byte(PI4IO_M_ADDR, PI4IO_REG_CHIP_RESET, &in_data);
|
|
vTaskDelay(10 / portTICK_PERIOD_MS);
|
|
i2c_write_byte(PI4IO_M_ADDR, PI4IO_REG_IO_DIR, 0b11000000); // 0: input 1: output
|
|
vTaskDelay(10 / portTICK_PERIOD_MS);
|
|
i2c_write_byte(PI4IO_M_ADDR, PI4IO_REG_OUT_H_IM, 0b00111100); // 使用到的引脚关闭High-Impedance
|
|
vTaskDelay(10 / portTICK_PERIOD_MS);
|
|
i2c_write_byte(PI4IO_M_ADDR, PI4IO_REG_PULL_SEL, 0b11000011); // pull up/down select, 0 down, 1 up
|
|
vTaskDelay(10 / portTICK_PERIOD_MS);
|
|
i2c_write_byte(PI4IO_M_ADDR, PI4IO_REG_PULL_EN, 0b11000011); // pull up/down enable, 0 disable, 1 enable
|
|
vTaskDelay(10 / portTICK_PERIOD_MS);
|
|
i2c_write_byte(PI4IO_M_ADDR, PI4IO_REG_IN_DEF_STA, 0b00000011); // P0 P1 默认高电平, 按键按下触发中断
|
|
vTaskDelay(10 / portTICK_PERIOD_MS);
|
|
i2c_write_byte(PI4IO_M_ADDR, PI4IO_REG_INT_MASK, 0b11111100); // P0 P1 中断使能 0 enable, 1 disable
|
|
vTaskDelay(10 / portTICK_PERIOD_MS);
|
|
i2c_write_byte(PI4IO_M_ADDR, PI4IO_REG_OUT_SET, 0b10000000); // 默认输出为0
|
|
vTaskDelay(10 / portTICK_PERIOD_MS);
|
|
i2c_read_byte(PI4IO_M_ADDR, PI4IO_REG_IRQ_STA, &in_data); // 读取IRQ_STA清除标志
|
|
|
|
i2c_read_byte(PI4IO_M_ADDR, PI4IO_REG_OUT_SET, &in_data);
|
|
setbit(in_data, 6); // HIGH
|
|
i2c_write_byte(PI4IO_M_ADDR, PI4IO_REG_OUT_SET, in_data);
|
|
}
|