From 3d48137c00511b3f2d35511482d1a76f8d06382d Mon Sep 17 00:00:00 2001 From: root Date: Fri, 26 Feb 2021 12:12:38 +0000 Subject: works --- boot/max7219.c | 124 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 boot/max7219.c (limited to 'boot/max7219.c') diff --git a/boot/max7219.c b/boot/max7219.c new file mode 100644 index 0000000..3e06562 --- /dev/null +++ b/boot/max7219.c @@ -0,0 +1,124 @@ +#include "project.h" + +#define NCS (GPIO7) +#define NCS_PORT GPIOG + +#define SCK (GPIO3) +#define SCK_PORT GPIOB + +#define MOSI (GPIO5) +#define MOSI_PORT GPIOB + + +static void +set (int sck, int ncs, int mosi) +{ + if (sck) + SET (SCK); + else + CLEAR (SCK); + + + if (ncs) + SET (NCS); + else + CLEAR (NCS); + + + if (mosi) + SET (MOSI); + else + CLEAR (MOSI); + + // delay_us(1); + //delay_us(10); + +} + +static void +spip_send_8 (uint8_t wot) +{ + int i; + + for (i = 0; i < 8; ++i) { + set (0, 0, wot & 0x80); + set (1, 0, wot & 0x80); + set (0, 0, wot & 0x80); + wot <<= 1; + } +} + + + +static void +write_reg (uint8_t reg, uint8_t data) +{ + + set (0, 1, 0); + set (0, 0, 0); + + spip_send_8 (reg); + spip_send_8 (data); + + spip_send_8 (reg); + spip_send_8 (data); + + spip_send_8 (reg); + spip_send_8 (data); + + set (0, 0, 0); + set (0, 1, 0); +} + + +static void +write_regs (uint8_t reg, uint8_t data1, uint8_t data2, uint8_t data3) +{ + + set (0, 1, 0); + set (0, 0, 0); + + spip_send_8 (reg); + spip_send_8 (data3); + + spip_send_8 (reg); + spip_send_8 (data2); + + spip_send_8 (reg); + spip_send_8 (data1); + + set (0, 0, 0); + set (0, 1, 0); +} + + +void +max7219_init (void) +{ + MAP_OUTPUT_PP (SCK); + MAP_OUTPUT_PP (NCS); + MAP_OUTPUT_PP (MOSI); + + set (0, 1, 0); + + + write_reg (0xc, 0x1); //Power up + write_reg (0xf, 0x0); //normal mode + + write_reg (0x9, 0x0); //No decode + write_reg (0xb, 0x7); //8 digits + write_regs (0xa,15,15,15); //max brightness + write_reg (1,0); + write_reg (2,0); + write_reg (3,0); + write_reg (4,0); + write_reg (5,0); + write_regs (6,0xbe,0,0); + write_regs (7,0x47,0,0); + write_regs (8,0x3d,0,0); + +} + + + + -- cgit v1.2.3