bleSDK_expansion_board/projects/blezongkong/src/app_ws2812.c

61 lines
1.1 KiB
C
Raw Normal View History

#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)
{
GRB_WS2812_Reset();
while(len--)GRB_WS2812_Write_24Bits(GRB888);
}