Performance improvements
Apply the same technique from #104 and #130 to the C library. The low level lib provides a function to send byte arrays instead of single bytes. Where possible loops and multiple single byte send calls were replaced with this function.
This commit is contained in:
parent
af9694c602
commit
df884532ac
1 changed files with 81 additions and 51 deletions
|
|
@ -128,6 +128,19 @@ static void EPD_2IN13_V2_SendData(UBYTE Data)
|
|||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : send data
|
||||
parameter:
|
||||
Data : Write data
|
||||
******************************************************************************/
|
||||
static void EPD_2IN13_V2_SendData_nByte(uint8_t *pData, uint32_t len)
|
||||
{
|
||||
DEV_Digital_Write(EPD_DC_PIN, 1);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 0);
|
||||
DEV_SPI_Write_nByte(pData, len);
|
||||
DEV_Digital_Write(EPD_CS_PIN, 1);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
function : Wait until the busy_pin goes LOW
|
||||
parameter:
|
||||
|
|
@ -170,9 +183,10 @@ parameter:
|
|||
******************************************************************************/
|
||||
void EPD_2IN13_V2_Init(UBYTE Mode)
|
||||
{
|
||||
UBYTE count;
|
||||
EPD_2IN13_V2_Reset();
|
||||
|
||||
uint8_t data[7];
|
||||
|
||||
if(Mode == EPD_2IN13_V2_FULL) {
|
||||
EPD_2IN13_V2_ReadBusy();
|
||||
EPD_2IN13_V2_SendCommand(0x12); // soft reset
|
||||
|
|
@ -183,23 +197,26 @@ void EPD_2IN13_V2_Init(UBYTE Mode)
|
|||
EPD_2IN13_V2_SendCommand(0x7E); //set digital block control
|
||||
EPD_2IN13_V2_SendData(0x3B);
|
||||
|
||||
data[0] = 0xF9;
|
||||
data[1] = 0x00;
|
||||
data[2] = 0x00;
|
||||
EPD_2IN13_V2_SendCommand(0x01); //Driver output control
|
||||
EPD_2IN13_V2_SendData(0xF9);
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
EPD_2IN13_V2_SendData_nByte(&data[0], 3);
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x11); //data entry mode
|
||||
EPD_2IN13_V2_SendData(0x01);
|
||||
|
||||
data[0] = 0x00;
|
||||
data[1] = 0x0F;
|
||||
EPD_2IN13_V2_SendCommand(0x44); //set Ram-X address start/end position
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
EPD_2IN13_V2_SendData(0x0F); //0x0C-->(15+1)*8=128
|
||||
EPD_2IN13_V2_SendData_nByte(&data[0], 2);
|
||||
|
||||
data[0] = 0xF9;
|
||||
data[1] = 0x00;
|
||||
data[2] = 0x00;
|
||||
data[3] = 0x00;
|
||||
EPD_2IN13_V2_SendCommand(0x45); //set Ram-Y address start/end position
|
||||
EPD_2IN13_V2_SendData(0xF9); //0xF9-->(249+1)=250
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
EPD_2IN13_V2_SendData_nByte(&data[0], 4);
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x3C); //BorderWavefrom
|
||||
EPD_2IN13_V2_SendData(0x03);
|
||||
|
|
@ -210,10 +227,11 @@ void EPD_2IN13_V2_Init(UBYTE Mode)
|
|||
EPD_2IN13_V2_SendCommand(0x03);
|
||||
EPD_2IN13_V2_SendData(EPD_2IN13_V2_lut_full_update[70]);
|
||||
|
||||
data[0] = EPD_2IN13_V2_lut_full_update[71];
|
||||
data[1] = EPD_2IN13_V2_lut_full_update[72];
|
||||
data[2] = EPD_2IN13_V2_lut_full_update[73];
|
||||
EPD_2IN13_V2_SendCommand(0x04); //
|
||||
EPD_2IN13_V2_SendData(EPD_2IN13_V2_lut_full_update[71]);
|
||||
EPD_2IN13_V2_SendData(EPD_2IN13_V2_lut_full_update[72]);
|
||||
EPD_2IN13_V2_SendData(EPD_2IN13_V2_lut_full_update[73]);
|
||||
EPD_2IN13_V2_SendData_nByte(&data[0], 3);
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x3A); //Dummy Line
|
||||
EPD_2IN13_V2_SendData(EPD_2IN13_V2_lut_full_update[74]);
|
||||
|
|
@ -221,15 +239,14 @@ void EPD_2IN13_V2_Init(UBYTE Mode)
|
|||
EPD_2IN13_V2_SendData(EPD_2IN13_V2_lut_full_update[75]);
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x32);
|
||||
for(count = 0; count < 70; count++) {
|
||||
EPD_2IN13_V2_SendData(EPD_2IN13_V2_lut_full_update[count]);
|
||||
}
|
||||
EPD_2IN13_V2_SendData_nByte((uint8_t*)&EPD_2IN13_V2_lut_full_update[0], 70);
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x4E); // set RAM x address count to 0;
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
data[0] = 0xF9;
|
||||
data[1] = 0x00;
|
||||
EPD_2IN13_V2_SendCommand(0x4F); // set RAM y address count to 0X127;
|
||||
EPD_2IN13_V2_SendData(0xF9);
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
EPD_2IN13_V2_SendData_nByte(&data[0], 2);
|
||||
EPD_2IN13_V2_ReadBusy();
|
||||
} else if(Mode == EPD_2IN13_V2_PART) {
|
||||
EPD_2IN13_V2_SendCommand(0x2C); //VCOM Voltage
|
||||
|
|
@ -238,18 +255,17 @@ void EPD_2IN13_V2_Init(UBYTE Mode)
|
|||
EPD_2IN13_V2_ReadBusy();
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x32);
|
||||
for(count = 0; count < 70; count++) {
|
||||
EPD_2IN13_V2_SendData(EPD_2IN13_V2_lut_partial_update[count]);
|
||||
}
|
||||
EPD_2IN13_V2_SendData_nByte((uint8_t*)&EPD_2IN13_V2_lut_partial_update[0], 70);
|
||||
|
||||
data[0] = 0x00;
|
||||
data[1] = 0x00;
|
||||
data[2] = 0x00;
|
||||
data[3] = 0x00;
|
||||
data[4] = 0x40;
|
||||
data[5] = 0x00;
|
||||
data[6] = 0x00;
|
||||
EPD_2IN13_V2_SendCommand(0x37);
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
EPD_2IN13_V2_SendData(0x40);
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
EPD_2IN13_V2_SendData(0x00);
|
||||
EPD_2IN13_V2_SendData_nByte(&data[0], 7);
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x22);
|
||||
EPD_2IN13_V2_SendData(0xC0);
|
||||
|
|
@ -273,13 +289,15 @@ void EPD_2IN13_V2_Clear(void)
|
|||
UWORD Width, Height;
|
||||
Width = (EPD_2IN13_V2_WIDTH % 8 == 0)? (EPD_2IN13_V2_WIDTH / 8 ): (EPD_2IN13_V2_WIDTH / 8 + 1);
|
||||
Height = EPD_2IN13_V2_HEIGHT;
|
||||
uint32_t len = Height * Width;
|
||||
uint8_t data[len];
|
||||
|
||||
for (UWORD n = 0; n < len; n++) {
|
||||
data[n] = 0xFF;
|
||||
}
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x24);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN13_V2_SendData(0XFF);
|
||||
}
|
||||
}
|
||||
EPD_2IN13_V2_SendData_nByte(&data[0], len);
|
||||
|
||||
EPD_2IN13_V2_TurnOnDisplay();
|
||||
}
|
||||
|
|
@ -293,13 +311,17 @@ void EPD_2IN13_V2_Display(UBYTE *Image)
|
|||
UWORD Width, Height;
|
||||
Width = (EPD_2IN13_V2_WIDTH % 8 == 0)? (EPD_2IN13_V2_WIDTH / 8 ): (EPD_2IN13_V2_WIDTH / 8 + 1);
|
||||
Height = EPD_2IN13_V2_HEIGHT;
|
||||
uint32_t len = Height * Width;
|
||||
uint8_t data[len];
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x24);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD j = 0, n = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN13_V2_SendData(Image[i + j * Width]);
|
||||
data[n++] = Image[i + j * Width];
|
||||
}
|
||||
}
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x24);
|
||||
EPD_2IN13_V2_SendData_nByte(&data[0], len);
|
||||
EPD_2IN13_V2_TurnOnDisplay();
|
||||
}
|
||||
|
||||
|
|
@ -313,22 +335,25 @@ void EPD_2IN13_V2_DisplayPartBaseImage(UBYTE *Image)
|
|||
UWORD Width, Height;
|
||||
Width = (EPD_2IN13_V2_WIDTH % 8 == 0)? (EPD_2IN13_V2_WIDTH / 8 ): (EPD_2IN13_V2_WIDTH / 8 + 1);
|
||||
Height = EPD_2IN13_V2_HEIGHT;
|
||||
uint32_t len = Height * Width;
|
||||
uint8_t data24[len];
|
||||
uint8_t data26[len];
|
||||
|
||||
for (UWORD j = 0, n = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
int addr = i + j * Width;
|
||||
data24[n] = Image[addr];
|
||||
data26[n] = Image[addr];
|
||||
n = n + 1;
|
||||
}
|
||||
}
|
||||
|
||||
UDOUBLE Addr = 0;
|
||||
EPD_2IN13_V2_SendCommand(0x24);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
Addr = i + j * Width;
|
||||
EPD_2IN13_V2_SendData(Image[Addr]);
|
||||
}
|
||||
}
|
||||
EPD_2IN13_V2_SendData_nByte(&data24[0], len);
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x26);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
Addr = i + j * Width;
|
||||
EPD_2IN13_V2_SendData(Image[Addr]);
|
||||
}
|
||||
}
|
||||
EPD_2IN13_V2_SendData_nByte(&data26[0], len);
|
||||
|
||||
EPD_2IN13_V2_TurnOnDisplay();
|
||||
}
|
||||
|
||||
|
|
@ -338,13 +363,18 @@ void EPD_2IN13_V2_DisplayPart(UBYTE *Image)
|
|||
UWORD Width, Height;
|
||||
Width = (EPD_2IN13_V2_WIDTH % 8 == 0)? (EPD_2IN13_V2_WIDTH / 8 ): (EPD_2IN13_V2_WIDTH / 8 + 1);
|
||||
Height = EPD_2IN13_V2_HEIGHT;
|
||||
EPD_2IN13_V2_SendCommand(0x24);
|
||||
for (UWORD j = 0; j < Height; j++) {
|
||||
uint32_t len = Height * Width;
|
||||
uint8_t data[len];
|
||||
|
||||
for (UWORD j = 0, n = 0; j < Height; j++) {
|
||||
for (UWORD i = 0; i < Width; i++) {
|
||||
EPD_2IN13_V2_SendData(Image[i + j * Width]);
|
||||
data[n++] = Image[i + j * Width];
|
||||
}
|
||||
}
|
||||
|
||||
EPD_2IN13_V2_SendCommand(0x24);
|
||||
EPD_2IN13_V2_SendData_nByte(&data[0], len);
|
||||
|
||||
EPD_2IN13_V2_TurnOnDisplayPart();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue