aboutsummaryrefslogtreecommitdiffstats
path: root/dogs.c
diff options
context:
space:
mode:
Diffstat (limited to 'dogs.c')
-rw-r--r--dogs.c50
1 files changed, 26 insertions, 24 deletions
diff --git a/dogs.c b/dogs.c
index a29ee2c..7d32698 100644
--- a/dogs.c
+++ b/dogs.c
@@ -21,6 +21,17 @@ unsigned char dogs_buffer[DISP_WIDTH * DISP_HEIGHT / 8];
static volatile bool dogs_spi_done = false;
+static void spi_send(unsigned char *data, unsigned int len)
+{
+ dogs_spi_done = false;
+ spiStartSend(&SPID1, len, data);
+ while (!dogs_spi_done)
+ asm("wfi");
+
+ //for (; len > 0; --len)
+ // spiPolledExchange(&SPID1, *data++);
+}
+
static void dogs_init_display();
static void dogs_spi_callback(SPIDriver *spid)
{
@@ -54,27 +65,15 @@ void dogs_init()
dogs_flush();
}
-void dogs_write_data(unsigned char byte)
-{
- SET_DATA;
- dogs_spi_done = false;
- spiStartSend(&SPID1, 1, &byte);
- while (!dogs_spi_done);
-}
void dogs_write_cmd(unsigned char byte)
{
- SET_CMD;
- dogs_spi_done = false;
- spiStartSend(&SPID1, 1, &byte);
- while (!dogs_spi_done);
+ spi_send(&byte, 1);
}
void dogs_set_column(unsigned int col)
{
- //if (col < DISP_WIDTH) {
- dogs_write_cmd(0x10 | ((col >> 4) & 0xF));
- dogs_write_cmd(0x00 | (col & 0xF));
- //}
+ dogs_write_cmd(0x10 | ((col >> 4) & 0xF));
+ dogs_write_cmd(0x00 | (col & 0xF));
}
void dogs_set_power(unsigned int bits)
{
@@ -133,6 +132,7 @@ void dogs_set_advanced(unsigned int bits)
void dogs_init_display()
{
+ SET_CMD;
CS_LOW;
dogs_reset();
CS_HIGH;
@@ -154,9 +154,10 @@ void dogs_init_display()
void dogs_clear()
{
- unsigned char *ptr = dogs_buffer;
- int count = sizeof(dogs_buffer);
- for (; count > 8; count -= 8) {
+ uint32_t *ptr = (uint32_t *)dogs_buffer;
+ unsigned int count = sizeof(dogs_buffer) / sizeof(uint32_t) / 12;
+
+ for (; count; --count) {
*ptr++ = 0;
*ptr++ = 0;
*ptr++ = 0;
@@ -165,24 +166,25 @@ void dogs_clear()
*ptr++ = 0;
*ptr++ = 0;
*ptr++ = 0;
- }
- for (; --count >= 0;)
*ptr++ = 0;
+ *ptr++ = 0;
+ *ptr++ = 0;
+ *ptr++ = 0;
+ }
}
void dogs_flush()
{
unsigned char *ptr = dogs_buffer;
CS_LOW;
- for (int page = 0; page < 8; page++) {
+ for (int page = 0; page < 8; ++page) {
+ SET_CMD;
dogs_set_page(page);
dogs_set_column(30);
SET_DATA;
- dogs_spi_done = false;
- spiStartSend(&SPID1, 102, ptr);
+ spi_send(ptr, 102);
ptr += 102;
- while (!dogs_spi_done);
}
CS_HIGH;
}