#include "ch.h"
#include "hal.h"
#include "spiInterface.h"
void ssd1306spiInit(void) {
static const SPIConfig spiConfig = {
.ssport = SPI_CS_GPIO,
.sspad = SPI_CS_PIN,
.cr1 = SPI_CR1_MSTR
| SPI_CR1_CPOL
| SPI_CR1_CPHA
| SPI_BaudRatePrescaler_4
};
spiStart(&SPID1, &spiConfig);
}
void ssd1306fastSPIwrite(uint8_t c) {
// char c = d;
pal_lld_setport(SPI_CD_GPIO, 1 << SPI_CD_PIN);
spiSelect(&SPID1);
spiSend(&SPID1, 1, &c);
spiUnselect(&SPID1);
}
void ssd1306commandSPIwrite(uint8_t c) {
// char c = d;
pal_lld_clearport(SPI_CD_GPIO, 1 << SPI_CD_PIN);
spiSelect(&SPID1);
spiSend(&SPID1, 1, &c);
spiUnselect(&SPID1);
}
void ssd1306resetDisplay(void) {
pal_lld_setport(SPI_RESET_GPIO, 1 << SPI_RESET_PIN);
// VDD (3.3V) goes high at start, lets just chill for a ms
chThdSleep(1);
// bring reset low
pal_lld_clearport(SPI_RESET_GPIO, 1 << SPI_RESET_PIN);
/// wait 10ms
chThdSleep(1);
// bring out of reset
pal_lld_setport(SPI_RESET_GPIO, 1 << SPI_RESET_PIN);
/// turn on VCC (9V?)
// set CD pin
pal_lld_setport(SPI_CD_GPIO, 1 << SPI_CD_PIN);
}
void ssd1306SendDisplay(uint8_t * buffer, uint8_t len) {
pal_lld_setport(SPI_CD_GPIO, 1 << SPI_CD_PIN);
spiSelect(&SPID1);
spiSend(&SPID1, len, buffer);
spiUnselect(&SPID1);
}