From 3a9ffdb4c5302ca5825819564f3b01f52ca32dd2 Mon Sep 17 00:00:00 2001 From: sergeyyarkov Date: Fri, 14 Aug 2026 19:59:53 +0300 Subject: [PATCH] delay to interface --- pdsp188x.c | 22 ++++++++++++---------- pdsp188x.h | 4 ++-- port/avr/avr.c | 15 ++++++++++++++- 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/pdsp188x.c b/pdsp188x.c index fcc2a34..49fbb8a 100644 --- a/pdsp188x.c +++ b/pdsp188x.c @@ -11,12 +11,12 @@ static void ClearAddrLine(uint8_t pin_mask) { driver->set_pins(PDSP188x_ADDR_LIN #define MemSelectControlWord() SetAddrLine(A4) #define MemSelectNone() ClearAddrLine(A3 | A4) #define SetAddrNone() ClearAddrLine(A0 | A1 | A2 | A3 | A4) -#define FlashCycle() \ - do { \ - ClearDataLine(WR); \ - _delay_us(1); \ - SetDataLine(WR); \ - _delay_us(1); \ +#define FlashCycle() \ + do { \ + ClearDataLine(WR); \ + driver->delay_us(1); \ + SetDataLine(WR); \ + driver->delay_us(1); \ } while (0) uint8_t pos = 0; @@ -37,14 +37,14 @@ void PDSP188x_SetBrightness(uint8_t level) { SetAddrLine(A4); driver->send_byte(level); FlashCycle(); - _delay_us(5); + driver->delay_us(5); } void PDSP188x_SendChar(char c, uint8_t digit) { if (driver == NULL || driver->send_byte == NULL) return; driver->send_byte(c); - _delay_us(1); + driver->delay_us(1); MemSelectCharRAM(); /* digit set */ @@ -52,10 +52,10 @@ void PDSP188x_SendChar(char c, uint8_t digit) { if (digit & 0x02) SetAddrLine(A1); if (digit & 0x04) SetAddrLine(A2); - _delay_us(1); + driver->delay_us(1); FlashCycle(); SetAddrNone(); - _delay_us(1); + driver->delay_us(1); } void PDSP188x_Clear(void) { @@ -80,6 +80,8 @@ void PDSP188x_SendStr(char *str) { void PDSP188x_BlinkEn(uint8_t control) { uint8_t control_command = control ? 0x10 : 0; + if (driver == NULL || driver->send_byte == NULL) return; + SetAddrNone(); MemSelectControlWord(); SetDataLine(FL); diff --git a/pdsp188x.h b/pdsp188x.h index c1d4c29..6d687fd 100644 --- a/pdsp188x.h +++ b/pdsp188x.h @@ -1,9 +1,7 @@ #if !defined(_PDSP188x_H_) # define _PDSP188x_H_ -# include # include -# include # ifdef __AVR__ @@ -35,6 +33,8 @@ typedef struct { void (*send_byte)(uint8_t byte); void (*write_char)(char c, uint8_t pos); void (*set_pins)(uint8_t set_mask, uint8_t pin, uint8_t state); + void (*delay_ms)(uint8_t ms); + void (*delay_us)(uint8_t us); } PDSP188x_DriverInterface_t; # define PDSP188x_BRIGHTNESS_LEVEL_100 0x00 diff --git a/port/avr/avr.c b/port/avr/avr.c index 9b882bf..c4f0229 100644 --- a/port/avr/avr.c +++ b/port/avr/avr.c @@ -38,4 +38,17 @@ static void SendByte(uint8_t byte) { _delay_us(5); } -const PDSP188x_DriverInterface_t PDSP188x_AVR_Driver = {.init = Init, .send_byte = SendByte, .set_pins = SetPins}; \ No newline at end of file +static void DelayMS(uint8_t ms) { + while (ms--) { + _delay_ms(1); + } +} + +static void DelayUS(uint8_t us) { + while (us--) { + _delay_us(1); + } +} + +const PDSP188x_DriverInterface_t PDSP188x_AVR_Driver = { + .init = Init, .send_byte = SendByte, .set_pins = SetPins, .delay_ms = DelayMS, .delay_us = DelayUS}; \ No newline at end of file