LEDC代码驱动

针对CH585的LEDC接口驱动ws2812点灯测试

#include "CH58x_common.h"
#include "ch58x_drv_ledc.h"
__attribute__((__aligned__(4))) uint8_t SPI_Tx_Buffer[] = {
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x0F, 0x0F, // G - 0x01
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, // R - 0x00
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, // B - 0x00
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, // G - 0x00
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x0F, // R - 0x01
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, // B - 0x00
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, // G - 0x00
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, // R - 0x00
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x0F, // B - 0x01
};
#define LSB_HSB 0 // LED串行数据位序, 1:高位在前; 0:低位在前
#define POLAR 0 // LED数据输出极性, 0:直通,数据0输出0,数据1输出1; 1为反相
void DebugInit(void)
{
GPIOA_SetBits(GPIO_Pin_14);
GPIOPinRemap(ENABLE, RB_PIN_UART0);
GPIOA_ModeCfg(GPIO_Pin_15, GPIO_ModeIN_PU);
GPIOA_ModeCfg(GPIO_Pin_14, GPIO_ModeOut_PP_5mA);
UART0_DefInit();
}
int main()
{
HSECFG_Capacitance(HSECap_18p);
SetSysClock(CLK_SOURCE_HSE_PLL_78MHz);
/* 配置串口调试 */
DebugInit();
PRINT( "Start @ChipID=%02X\n", R8_CHIP_ID );
{
GPIOB_ResetBits(GPIO_Pin_0);
GPIOB_ModeCfg( GPIO_Pin_0, GPIO_ModeOut_PP_5mA );
}
//led clk
GPIOA_ModeCfg( GPIO_Pin_4, GPIO_ModeOut_PP_5mA );
//led data //LED 0-7
GPIOA_ModeCfg(GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8, GPIO_ModeOut_PP_5mA );
//配置分频和模式选择
ch58x_led_controller_init(CH58X_LED_OUT_MODE_SINGLE, 12);//128);
//开始发送,后面再发送就在中断里面发送了
R32_LED_DMA_BEG = ((uint32_t)(SPI_Tx_Buffer)& RB_LED_DMA_BEG);
R16_LED_DMA_LEN = 2*9;
R8_LED_CTRL_MOD |= RB_LED_DMA_EN;
#if LSB_HSB //LSB HSB
R8_LED_CTRL_MOD ^= RB_LED_BIT_ORDER;
#endif
#if POLAR //极性
R8_LED_CTRL_MOD ^= RB_LED_OUT_POLAR;
#endif
LED_ENABLE();
PFIC_EnableIRQ(LED_IRQn);
while(1){
ch58x_led_controller_send((uint32_t*)SPI_Tx_Buffer, 2*9);//定义u8,强转为u32,因此数组从8个元素变成了2个元素,所以长度传入2。
GPIOA_ResetBits(GPIO_Pin_0);
mDelaymS(50);
}
}
__INTERRUPT
__HIGH_CODE
void LED_IRQHandler(void){
GPIOB_SetBits(GPIO_Pin_0);
//清空中断标志
uint16_t LED_status;
LED_status = R16_LED_STATUS;
R16_LED_STATUS = LED_status;
R8_LED_CTRL_MOD &= ~RB_LED_DMA_EN;
// ch58x_led_controller_send((uint32_t*)SPI_Tx_Buffer, 2*9);//定义u8,强转为u32,因此数组从8个元素变成了2个元素,所以长度传入2。
GPIOB_ResetBits(GPIO_Pin_0);
}

 

posted @   SweetTea_lllpc  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
点击右上角即可分享
微信分享提示