增加软件SPI支持

This commit is contained in:
izilzty
2022-04-05 23:29:03 +08:00
parent 3b6631bef0
commit 8a7aa5cc17
4 changed files with 56 additions and 37 deletions
+42
View File
@@ -20826,6 +20826,13 @@ class U8G2_GU800_128X64_F_8080 : public U8G2 {
u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset);
}
};
class U8G2_GP1287AI_256X50_1_3W_SW_SPI : public U8G2 {
public:
U8G2_GP1287AI_256X50_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
u8g2_Setup_gp1287ai_256x50_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino);
u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, U8X8_PIN_NONE, reset);
}
};
class U8G2_GP1287AI_256X50_1_3W_HW_SPI : public U8G2 {
public:
U8G2_GP1287AI_256X50_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
@@ -20840,6 +20847,13 @@ public:
u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, U8X8_PIN_NONE, reset);
}
};
class U8G2_GP1287AI_256X50_2_3W_SW_SPI : public U8G2 {
public:
U8G2_GP1287AI_256X50_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
u8g2_Setup_gp1287ai_256x50_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino);
u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, U8X8_PIN_NONE, reset);
}
};
class U8G2_GP1287AI_256X50_2_3W_HW_SPI : public U8G2 {
public:
U8G2_GP1287AI_256X50_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
@@ -20854,6 +20868,13 @@ public:
u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, U8X8_PIN_NONE, reset);
}
};
class U8G2_GP1287AI_256X50_F_3W_SW_SPI : public U8G2 {
public:
U8G2_GP1287AI_256X50_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
u8g2_Setup_gp1287ai_256x50_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino);
u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, U8X8_PIN_NONE, reset);
}
};
class U8G2_GP1287AI_256X50_F_3W_HW_SPI : public U8G2 {
public:
U8G2_GP1287AI_256X50_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
@@ -20868,6 +20889,13 @@ public:
u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, U8X8_PIN_NONE, reset);
}
};
class U8G2_GP1247AI_253X63_1_3W_SW_SPI : public U8G2 {
public:
U8G2_GP1247AI_253X63_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
u8g2_Setup_gp1247ai_253x63_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino);
u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, U8X8_PIN_NONE, reset);
}
};
class U8G2_GP1247AI_253X63_1_3W_HW_SPI : public U8G2 {
public:
U8G2_GP1247AI_253X63_1_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
@@ -20882,6 +20910,13 @@ public:
u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, U8X8_PIN_NONE, reset);
}
};
class U8G2_GP1247AI_253X63_2_3W_SW_SPI : public U8G2 {
public:
U8G2_GP1247AI_253X63_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
u8g2_Setup_gp1247ai_253x63_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino);
u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, U8X8_PIN_NONE, reset);
}
};
class U8G2_GP1247AI_253X63_2_3W_HW_SPI : public U8G2 {
public:
U8G2_GP1247AI_253X63_2_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
@@ -20896,6 +20931,13 @@ public:
u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, U8X8_PIN_NONE, reset);
}
};
class U8G2_GP1247AI_253X63_F_3W_SW_SPI : public U8G2 {
public:
U8G2_GP1247AI_253X63_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
u8g2_Setup_gp1247ai_253x63_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino);
u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, U8X8_PIN_NONE, reset);
}
};
class U8G2_GP1247AI_253X63_F_3W_HW_SPI : public U8G2 {
public:
U8G2_GP1247AI_253X63_F_3W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
-29
View File
@@ -7201,35 +7201,6 @@ class U8X8_GU800_128X64_8080 : public U8X8 {
u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset);
}
};
class U8X8_GP1287AI_256X50_3W_HW_SPI : public U8X8 {
public:
U8X8_GP1287AI_256X50_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() {
u8x8_Setup(getU8x8(), u8x8_d_gp1287ai_256x50, u8x8_cad_empty, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino);
u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, U8X8_PIN_NONE, reset);
}
};
class U8X8_GP1287AI_256X50_2ND_3W_HW_SPI : public U8X8 {
public:
U8X8_GP1287AI_256X50_2ND_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() {
u8x8_Setup(getU8x8(), u8x8_d_gp1287ai_256x50, u8x8_cad_empty, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino);
u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, U8X8_PIN_NONE, reset);
}
};
class U8X8_GP1247AI_253X63_3W_HW_SPI : public U8X8 {
public:
U8X8_GP1247AI_253X63_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() {
u8x8_Setup(getU8x8(), u8x8_d_gp1247ai_253x63, u8x8_cad_empty, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino);
u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, U8X8_PIN_NONE, reset);
}
};
class U8X8_GP1247AI_253X63_2ND_3W_HW_SPI : public U8X8
{
public:
U8X8_GP1247AI_253X63_2ND_3W_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() {
u8x8_Setup(getU8x8(), u8x8_d_gp1247ai_253x63, u8x8_cad_empty, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino);
u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, U8X8_PIN_NONE, reset);
}
};
// constructor list end
+7 -4
View File
@@ -31,10 +31,13 @@ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
U8g2的SPI统一使用MSB顺序,而此屏幕需要LSB顺序,按照U8g2原有ls013b7dh03控制器的逻辑,使用SWAP8()交换命令字节顺序,使用u8g2_ll_hvline_vertical_top_msb()交换显示数据字节顺序。
如使用非Arduino控制器,在初始化SPI时统一初始化为:active lowfalling edgeMSB 即可,不要按照屏幕数据表初始化为LSB
上一版本中使用了i2c速度作为标志来修改Arduino的SPI字节发送顺序,虽然可用,但如果使用软件模拟SPI时则会出现问题。
注意:此版本不能支持U8x8,因为U8x8是直接向屏幕写入数据的,没有机会来交换字节顺序,如果需要使用U8x8只能使用上一版本。如果以后ls013b7dh03支持U8x8了那此屏幕应该也可以支持。
U8g2的SPI统一使用MSB顺序,而此屏幕需要LSB顺序,按照U8g2的逻辑,使用SWAP8()交换命令字节顺序,使用u8g2_ll_hvline_vertical_top_msb()交换显示数据字节顺序。
注意:此版本不能支持U8x8,因为U8x8是直接向屏幕写入数据的,没有机会来交换字节顺序,如果需要使用U8x8只能使用上一版本
上一版本中使用了i2c速度作为标志来修改Arduino的SPI字节发送顺序,所以支持U8x8,但如果使用软件模拟SPI时则会出现问题。
如使用非Arduino控制器,在自行初始化SPI时应统一初始化为:active lowfalling edgeMSB (CPOL=1 CPHA=1 MSB) 即可,不要按照屏幕数据表初始化为LSB。
Arduino在使用3W_SPI时U8g2会自动多发一个DC位,将导致数据错位,所以在发送数据时应使用4W_SPI,并忽略DC引脚即可。其他控制器如果调用了u8x8_byte_3wire_sw_spi()也会出现此问题,改为调用u8x8_byte_4wire_sw_spi()即可。
*/
#include "u8x8.h"
+7 -4
View File
@@ -31,10 +31,13 @@ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
U8g2的SPI统一使用MSB顺序,而此屏幕需要LSB顺序,按照U8g2原有ls013b7dh03控制器的逻辑,使用SWAP8()交换命令字节顺序,使用u8g2_ll_hvline_vertical_top_msb()交换显示数据字节顺序。
如使用非Arduino控制器,在初始化SPI时统一初始化为:active lowfalling edgeMSB 即可,不要按照屏幕数据表初始化为LSB
上一版本中使用了i2c速度作为标志来修改Arduino的SPI字节发送顺序,虽然可用,但如果使用软件模拟SPI时则会出现问题。
注意:此版本不能支持U8x8,因为U8x8是直接向屏幕写入数据的,没有机会来交换字节顺序,如果需要使用U8x8只能使用上一版本。如果以后ls013b7dh03支持U8x8了那此屏幕应该也可以支持。
U8g2的SPI统一使用MSB顺序,而此屏幕需要LSB顺序,按照U8g2的逻辑,使用SWAP8()交换命令字节顺序,使用u8g2_ll_hvline_vertical_top_msb()交换显示数据字节顺序。
注意:此版本不能支持U8x8,因为U8x8是直接向屏幕写入数据的,没有机会来交换字节顺序,如果需要使用U8x8只能使用上一版本
上一版本中使用了i2c速度作为标志来修改Arduino的SPI字节发送顺序,所以支持U8x8,但如果使用软件模拟SPI时则会出现问题。
如使用非Arduino控制器,在自行初始化SPI时应统一初始化为:active lowfalling edgeMSB (CPOL=1 CPHA=1 MSB) 即可,不要按照屏幕数据表初始化为LSB。
Arduino在使用3W_SPI时U8g2会自动多发一个DC位,将导致数据错位,所以在发送数据时应使用4W_SPI,并忽略DC引脚即可。其他控制器如果调用了u8x8_byte_3wire_sw_spi()也会出现此问题,改为调用u8x8_byte_4wire_sw_spi()即可。
*/
#include "u8x8.h"