optimize SPI data transfer

This commit is contained in:
Shuanglei Tao
2025-01-17 10:28:18 +08:00
parent 547a22b52d
commit 3957853296
10 changed files with 37 additions and 8 deletions

View File

@@ -72,6 +72,11 @@ void DEV_SPI_WriteByte(UBYTE value)
nrf_drv_spi_transfer(&spi, &value, 1, NULL, 0);
}
void DEV_SPI_WriteBytes(UBYTE *value, UBYTE len)
{
nrf_drv_spi_transfer(&spi, value, len, NULL, 0);
}
UBYTE DEV_SPI_ReadByte(void)
{
UBYTE value;

View File

@@ -51,6 +51,7 @@ UBYTE DEV_Module_Init(void);
void DEV_Module_Exit(void);
void DEV_SPI_WriteByte(UBYTE value);
void DEV_SPI_WriteBytes(UBYTE *value, UBYTE len);
UBYTE DEV_SPI_ReadByte(void);
#endif

View File

@@ -73,6 +73,14 @@ void EPD_4IN2_SendData(UBYTE Data)
DEV_Digital_Write(EPD_CS_PIN, 1);
}
void EPD_4IN2_SendData2(UBYTE *Data, UBYTE Len)
{
DEV_Digital_Write(EPD_DC_PIN, 1);
DEV_Digital_Write(EPD_CS_PIN, 0);
DEV_SPI_WriteBytes(Data, Len);
DEV_Digital_Write(EPD_CS_PIN, 1);
}
/******************************************************************************
function : Wait until the busy_pin goes LOW
parameter:

View File

@@ -44,6 +44,7 @@ void EPD_4IN2_Sleep(void);
void EPD_4IN2_SendCommand(UBYTE Reg);
void EPD_4IN2_SendData(UBYTE Data);
void EPD_4IN2_SendData2(UBYTE *Data, UBYTE Len);
void EPD_4IN2_TurnOnDisplay(void);
#endif

View File

@@ -70,6 +70,13 @@ void EPD_4IN2_V2_SendData(UBYTE Data)
DEV_Digital_Write(EPD_CS_PIN, 1);
}
void EPD_4IN2_V2_SendData2(UBYTE *Data, UBYTE Len)
{
DEV_Digital_Write(EPD_DC_PIN, 1);
DEV_Digital_Write(EPD_CS_PIN, 0);
DEV_SPI_WriteBytes(Data, Len);
DEV_Digital_Write(EPD_CS_PIN, 1);
}
/******************************************************************************
function : Wait until the busy_pin goes LOW
parameter:

View File

@@ -47,6 +47,7 @@ void EPD_4IN2_V2_Sleep(void);
void EPD_4IN2_V2_SendCommand(UBYTE Reg);
void EPD_4IN2_V2_SendData(UBYTE Data);
void EPD_4IN2_V2_SendData2(UBYTE *Data, UBYTE Len);
void EPD_4IN2_V2_TurnOnDisplay(void);
#endif

View File

@@ -69,6 +69,14 @@ void EPD_4IN2B_V2_SendData(UBYTE Data)
DEV_Digital_Write(EPD_CS_PIN, 1);
}
void EPD_4IN2B_V2_SendData2(UBYTE *Data, UBYTE Len)
{
DEV_Digital_Write(EPD_DC_PIN, 1);
DEV_Digital_Write(EPD_CS_PIN, 0);
DEV_SPI_WriteBytes(Data, Len);
DEV_Digital_Write(EPD_CS_PIN, 1);
}
/******************************************************************************
function : Wait until the busy_pin goes LOW
parameter:

View File

@@ -43,6 +43,7 @@ void EPD_4IN2B_V2_Sleep(void);
void EPD_4IN2B_V2_SendCommand(UBYTE Reg);
void EPD_4IN2B_V2_SendData(UBYTE Data);
void EPD_4IN2B_V2_SendData2(UBYTE *Data, UBYTE Len);
void EPD_4IN2B_V2_TurnOnDisplay(void);
#endif

View File

@@ -41,13 +41,13 @@
/** EPD drivers */
static epd_driver_t epd_drivers[] = {
{EPD_DRIVER_4IN2, EPD_4IN2_Init, EPD_4IN2_Clear,
EPD_4IN2_SendCommand, EPD_4IN2_SendData,
EPD_4IN2_SendCommand, EPD_4IN2_SendData2,
EPD_4IN2_TurnOnDisplay, EPD_4IN2_Sleep},
{EPD_DRIVER_4IN2_V2, EPD_4IN2_V2_Init, EPD_4IN2_V2_Clear,
EPD_4IN2_V2_SendCommand, EPD_4IN2_V2_SendData,
EPD_4IN2_V2_SendCommand, EPD_4IN2_V2_SendData2,
EPD_4IN2_V2_TurnOnDisplay, EPD_4IN2_V2_Sleep},
{EPD_DRIVER_4IN2B_V2, EPD_4IN2B_V2_Init, EPD_4IN2B_V2_Clear,
EPD_4IN2B_V2_SendCommand, EPD_4IN2B_V2_SendData,
EPD_4IN2B_V2_SendCommand, EPD_4IN2B_V2_SendData2,
EPD_4IN2B_V2_TurnOnDisplay, EPD_4IN2B_V2_Sleep},
};
@@ -178,10 +178,7 @@ static void epd_service_process(ble_epd_t * p_epd, uint8_t * p_data, uint16_t le
break;
case EPD_CMD_SEND_DATA:
for (UWORD i = 0; i < length - 1; i++)
{
p_epd->driver->send_data(p_data[i + 1]);
}
p_epd->driver->send_data(&p_data[1], length - 1);
break;
case EPD_CMD_DISPLAY:

View File

@@ -76,7 +76,7 @@ typedef struct
void (*init)(void); /**< Initialize the e-Paper register */
void (*clear)(void); /**< Clear screen */
void (*send_command)(UBYTE Reg); /**< send command */
void (*send_data)(UBYTE Data); /**< send data */
void (*send_data)(UBYTE *Data, UBYTE Len); /**< send data */
void (*display)(void); /**< Sends the image buffer in RAM to e-Paper and displays */
void (*sleep)(void); /**< Enter sleep mode */
} epd_driver_t;