bleSDK_expansion_board/projects/blezongkong/src/app_ws2812.c

67 lines
1.2 KiB
C

#include "b6x.h"
#include "drvs.h"
#include "dbg.h"
#include "app_ws2812.h"
#include "sys_config.h"
#define OUT_GRB_WS2812_DIN RGB_DATA_IO
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___)
BLE_GRB_Data_t WS2812_GRBs={
.len=64,
.GRBs=0x00,
};
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);
GPIO_DIR_SET(___WS2812_DIN___);
WS2812_DIN_L;
}
void GRB_WS2812_Reset(void)
{
WS2812_DIN_L;
bootDelayUs(80);
WS2812_DIN_L;
}
__attribute__((section("ram_func.fshc.")))
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)
{
GRB_WS2812_Reset();
while(len--)GRB_WS2812_Write_24Bits(*GRB888++);
}
void GRB_WS2812_Write_color(uint8_t len, uint32_t GRB888)
{
GRB_WS2812_Reset();
while(len--)GRB_WS2812_Write_24Bits(GRB888);
}