2024-04-15 09:23:32 +08:00
|
|
|
#include "b6x.h"
|
|
|
|
#include "drvs.h"
|
|
|
|
#include "dbg.h"
|
|
|
|
#include "app_ws2812.h"
|
|
|
|
|
|
|
|
|
|
|
|
#define OUT_GRB_WS2812_DIN PA02
|
|
|
|
|
|
|
|
uint32_t ___WS2812_DIN___ =1<< OUT_GRB_WS2812_DIN;
|
|
|
|
//0x02 = 1<<PA01
|
|
|
|
#define WS2812_DIN_H GPIO_DAT_SET(___WS2812_DIN___)
|
|
|
|
#define WS2812_DIN_L GPIO_DAT_CLR(___WS2812_DIN___)
|
|
|
|
|
|
|
|
void GRB_WS2812_Init(void)
|
|
|
|
{
|
|
|
|
gpio_dir_output(OUT_GRB_WS2812_DIN,OE_HIGH);
|
|
|
|
gpio_dir_input(OUT_GRB_WS2812_DIN,IE_UP);
|
|
|
|
gpio_put_hi(OUT_GRB_WS2812_DIN);
|
|
|
|
}
|
|
|
|
|
|
|
|
void GRB_WS2812_Reset(void)
|
|
|
|
{
|
|
|
|
WS2812_DIN_L;
|
|
|
|
bootDelayUs(80);
|
|
|
|
WS2812_DIN_L;
|
|
|
|
}
|
|
|
|
|
|
|
|
void GRB_WS2812_Write_24Bits(uint32_t GRB888)
|
|
|
|
{
|
|
|
|
uint32_t i;
|
|
|
|
|
|
|
|
for(i=0x800000;i!=0;i>>=1){
|
|
|
|
WS2812_DIN_H;
|
|
|
|
if(GRB888 & i ){
|
|
|
|
WS2812_DIN_H;WS2812_DIN_H;//880
|
|
|
|
WS2812_DIN_H;WS2812_DIN_H;
|
|
|
|
}
|
|
|
|
else{
|
|
|
|
WS2812_DIN_L;WS2812_DIN_L;//880
|
|
|
|
WS2812_DIN_L;WS2812_DIN_L;
|
|
|
|
}
|
|
|
|
WS2812_DIN_L;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void GRB_WS2812_Write_GRBs(uint8_t len, uint32_t *GRB888)
|
|
|
|
{
|
|
|
|
|
|
|
|
while(len--)GRB_WS2812_Write_24Bits(*GRB888++);
|
|
|
|
GRB_WS2812_Reset();
|
|
|
|
}
|
|
|
|
|
|
|
|
void GRB_WS2812_Write_color(uint8_t len, uint32_t GRB888)
|
2024-04-19 15:13:25 +08:00
|
|
|
{
|
2024-04-15 09:23:32 +08:00
|
|
|
GRB_WS2812_Reset();
|
|
|
|
while(len--)GRB_WS2812_Write_24Bits(GRB888);
|
|
|
|
}
|
|
|
|
|
|
|
|
|