2026-07-15 16:14:30 +08:00
|
|
|
#include "rgb.h"
|
2026-07-28 18:03:20 +08:00
|
|
|
#include "system.h"
|
2026-07-15 16:14:30 +08:00
|
|
|
|
2026-07-28 18:03:20 +08:00
|
|
|
/* ====== SPI Register Defines (in case stc32g.h lacks them) ====== */
|
2026-07-15 16:14:30 +08:00
|
|
|
#ifndef P_SW1
|
2026-07-28 18:03:20 +08:00
|
|
|
sfr P_SW1 = 0xA2;
|
|
|
|
|
sfr SPCTL = 0xCE;
|
|
|
|
|
sfr SPSTAT = 0xCD;
|
|
|
|
|
sfr SPDAT = 0xCF;
|
2026-07-15 16:14:30 +08:00
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
void SPI_Init(void)
|
|
|
|
|
{
|
2026-07-16 17:52:52 +08:00
|
|
|
P_SW1 = (P_SW1 & ~0x0C) | 0x04;
|
|
|
|
|
SPCTL = 0xD1;
|
|
|
|
|
SPSTAT = 0xC0;
|
2026-07-15 16:14:30 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Encode_Byte(u8 val, u8 *out)
|
|
|
|
|
{
|
|
|
|
|
u8 i;
|
2026-07-28 18:03:20 +08:00
|
|
|
for (i = 0; i < 4; i++)
|
2026-07-15 16:14:30 +08:00
|
|
|
{
|
2026-07-28 18:03:20 +08:00
|
|
|
u8 pair_val = 0;
|
|
|
|
|
if (val & (0x80 >> (2 * i)))
|
2026-07-15 16:14:30 +08:00
|
|
|
{
|
2026-07-28 18:03:20 +08:00
|
|
|
pair_val |= 0xC0;
|
2026-07-15 16:14:30 +08:00
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2026-07-28 18:03:20 +08:00
|
|
|
pair_val |= 0x80;
|
2026-07-15 16:14:30 +08:00
|
|
|
}
|
2026-07-28 18:03:20 +08:00
|
|
|
if (val & (0x80 >> (2 * i + 1)))
|
|
|
|
|
{
|
|
|
|
|
pair_val |= 0x0C;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
pair_val |= 0x08;
|
|
|
|
|
}
|
|
|
|
|
out[i] = pair_val;
|
2026-07-15 16:14:30 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void RGB_Send(u8 g1, u8 r1, u8 b1, u8 g2, u8 r2, u8 b2)
|
|
|
|
|
{
|
2026-07-28 18:03:20 +08:00
|
|
|
u8 idata buf[6];
|
|
|
|
|
u8 i, mask;
|
|
|
|
|
buf[0] = g1; buf[1] = r1; buf[2] = b1;
|
|
|
|
|
buf[3] = g2; buf[4] = r2; buf[5] = b2;
|
|
|
|
|
|
|
|
|
|
EA = 0;
|
|
|
|
|
|
2026-07-15 16:14:30 +08:00
|
|
|
P2M1 &= ~(1 << 3);
|
|
|
|
|
P2M0 |= (1 << 3);
|
2026-07-28 18:03:20 +08:00
|
|
|
|
|
|
|
|
P2M1 &= ~(1 << 5);
|
|
|
|
|
P2M0 |= (1 << 5);
|
|
|
|
|
MOTOR = 0;
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < 6; i++)
|
|
|
|
|
{
|
|
|
|
|
for (mask = 0x80; mask; mask >>= 1)
|
|
|
|
|
{
|
|
|
|
|
if (buf[i] & mask)
|
|
|
|
|
{
|
|
|
|
|
RGB_DIN = 1;
|
|
|
|
|
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
|
|
|
|
|
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
|
|
|
|
|
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
|
|
|
|
|
RGB_DIN = 0;
|
|
|
|
|
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
|
|
|
|
|
_nop_();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
RGB_DIN = 1;
|
|
|
|
|
_nop_(); _nop_(); _nop_();
|
|
|
|
|
RGB_DIN = 0;
|
|
|
|
|
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
|
|
|
|
|
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
|
|
|
|
|
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
RGB_DIN = 0;
|
2026-07-15 16:14:30 +08:00
|
|
|
for (i = 0; i < 200; i++)
|
|
|
|
|
{
|
2026-07-28 18:03:20 +08:00
|
|
|
_nop_(); _nop_(); _nop_();
|
2026-07-15 16:14:30 +08:00
|
|
|
}
|
2026-07-28 18:03:20 +08:00
|
|
|
|
|
|
|
|
EA = 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void RGB_Bitbang_Send24(u8 g, u8 r, u8 b)
|
|
|
|
|
{
|
|
|
|
|
(void)g; (void)r; (void)b;
|
2026-07-15 16:14:30 +08:00
|
|
|
}
|