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); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!