reset pin on gpio uninit

This commit is contained in:
Shuanglei Tao
2025-03-26 20:33:00 +08:00
parent c31f0696e3
commit 252ded13ac
3 changed files with 35 additions and 7 deletions

View File

@@ -53,7 +53,9 @@ void pinMode(uint32_t pin, uint32_t mode)
case OUTPUT:
nrf_gpio_cfg_output(pin);
break;
case DEFAULT:
default:
nrf_gpio_cfg_default(pin);
break;
}
}
@@ -209,10 +211,9 @@ void EPD_WriteData(uint8_t *Data, uint8_t Len)
void EPD_Reset(uint32_t value, uint16_t duration)
{
uint32_t rvalue = (value == LOW) ? HIGH : LOW;
digitalWrite(EPD_RST_PIN, value);
delay(10);
digitalWrite(EPD_RST_PIN, rvalue);
digitalWrite(EPD_RST_PIN, (value == LOW) ? HIGH : LOW);
delay(duration);
digitalWrite(EPD_RST_PIN, value);
delay(duration);
@@ -281,13 +282,27 @@ void EPD_GPIO_Init(void)
void EPD_GPIO_Uninit(void)
{
EPD_LED_OFF();
digitalWrite(EPD_DC_PIN, LOW);
digitalWrite(EPD_CS_PIN, LOW);
digitalWrite(EPD_RST_PIN, LOW);
if (EPD_EN_PIN != 0xFF) {
digitalWrite(EPD_EN_PIN, LOW);
}
EPD_SPI_Uninit();
EPD_LED_OFF();
// reset pin state
pinMode(EPD_MOSI_PIN, DEFAULT);
pinMode(EPD_SCLK_PIN, DEFAULT);
pinMode(EPD_CS_PIN, DEFAULT);
pinMode(EPD_DC_PIN, DEFAULT);
pinMode(EPD_RST_PIN, DEFAULT);
pinMode(EPD_BUSY_PIN, DEFAULT);
pinMode(EPD_BS_PIN, DEFAULT);
pinMode(EPD_EN_PIN, DEFAULT);
pinMode(EPD_LED_PIN, DEFAULT);
}
// lED
@@ -309,6 +324,18 @@ void EPD_LED_Toggle(void)
nrf_gpio_pin_toggle(EPD_LED_PIN);
}
void EPD_LED_BLINK(void)
{
if (EPD_LED_PIN != 0xFF) {
pinMode(EPD_LED_PIN, OUTPUT);
digitalWrite(EPD_LED_PIN, LOW);
delay(100);
digitalWrite(EPD_LED_PIN, HIGH);
delay(100);
pinMode(EPD_LED_PIN, DEFAULT);
}
}
// EPD models
extern epd_model_t epd_uc8176_420_bw;
extern epd_model_t epd_uc8176_420_bwr;

View File

@@ -59,6 +59,7 @@ typedef struct
#define LOW (0x0)
#define HIGH (0x1)
#define DEFAULT (0xFF)
#define INPUT (0x0)
#define OUTPUT (0x1)
#define INPUT_PULLUP (0x2)
@@ -96,6 +97,7 @@ void EPD_WaitBusy(uint32_t value, uint16_t timeout);
void EPD_LED_ON(void);
void EPD_LED_OFF(void);
void EPD_LED_Toggle(void);
void EPD_LED_BLINK(void);
epd_model_t *epd_get(void);
epd_model_t *epd_init(epd_model_id_t id);

View File

@@ -46,11 +46,13 @@ static void epd_gpio_init()
EPD_GPIO_Init();
}
m_driver_refs++;
NRF_LOG_DEBUG("[EPD]: m_driver_refs=%d\n", m_driver_refs);
}
static void epd_gpio_uninit()
{
m_driver_refs--;
NRF_LOG_DEBUG("[EPD]: m_driver_refs=%d\n", m_driver_refs);
if (m_driver_refs == 0) {
NRF_LOG_DEBUG("[EPD]: driver exit\n");
EPD_GPIO_Uninit();
@@ -318,12 +320,9 @@ uint32_t ble_epd_init(ble_epd_t * p_epd, epd_callback_t cmd_cb)
// load config
EPD_GPIO_Load(&p_epd->config);
epd_gpio_init();
// blink LED on start
EPD_LED_ON();
delay(100);
EPD_LED_OFF();
EPD_LED_BLINK();
// Add the service.
return epd_service_init(p_epd);