WCH沁恒单片机
直播中

幽默

9年用户 777经验值
擅长:362163
私信 关注
[问答]

LED屏接口数据输出错误是什么原因?如何解决?

程序上输出的数组数据为下面的数据,
__align(2)  unsigned short LED_TAB[2]={0X0102,0X0304};

实际输出的波形为下图(上面的是时钟数据,下面的的是LED0输出的DATA数据)


初始化配置

GPIOA_ResetBits( GPIO_Pin_0 ); // ????PWM?? PA10

GPIOA_ModeCfg( GPIO_Pin_0, GPIO_ModeOut_PP_5mA );

GPIOA_ResetBits( GPIO_Pin_4 ); // ????PWM?? PA10

GPIOA_ModeCfg( GPIO_Pin_4, GPIO_ModeOut_PP_5mA );

R8_LED_CLOCK_DIV = 10;

R16_LED_DMA_MAIN = (UINT16) &LED_TAB[0];

R8_LED_CTRL_MOD = RB_LED_OUT_EN ;

NVIC_EnableIRQ( LED_IRQn );

R16_LED_DMA_CNT=2;

R8_LED_CTRL_MOD |= RB_LED_DMA_EN;



主函数while(1)里面刷新



R16_LED_DMA_CNT= 2;

R8_LED_CTRL_MOD |= RB_LED_DMA_EN | RB_LED_OUT_EN;

while(R16_LED_DMA_CNT||!(R8_LED_STATUS&RB_LED_FIFO_EMPTY));

R8_LED_CTRL_MOD &= ~ (RB_LED_DMA_EN |RB_LED_OUT_EN);



现在输出的数据不对,怎么解决?

有两点疑问,

第一、时钟信号是上升沿有效还是下降沿有效?

第二、LED0 LED1 LED2 LED3如果都向外出数据,R16_LED_FIFO寄存器与这些数据线怎么对应?


能不能出一个例程,我需要DMA刷新的,CH559寄存器都对不上,并且寄存器相应的功能也改了

  这是下面数据数组输出的波形,高位在前?还是低位在前?  为什么会丢数据呢?
__align(2)  unsigned short LED_TAB[2]={0X0403,0X0201};

  
  

回帖(1)

刘世晓

2022-8-31 09:28:08
你好,附件是一个ch579 上的LED 控制器的例程, 解压到官网例程EXAM 文件夹后打开工程即可.
ch57x_ledc_test.zip


如果你只是单个缓冲,这样即可:
ch57x_led_controller_init(CH57X_LED_OUT_MODE_FOUR,160);

NVIC_SetPriority(LED_IRQn, 2);
NVIC_EnableIRQ(LED_IRQn);


//开始发送,后面再发送就在中断里面发送了
ch57x_led_controller_send(tx_data,NULL,10);
ch57x_led_controller_out_enable();

while(1){
DelayMs(500);
ch57x_led_controller_send(tx_data,NULL,10);
}




void LED_IRQHandler(void) {
//PRINT( "%02Xrn", R8_LED_STATUS);
ch57x_led_controller_dma_stop();
//这里也可以直接更新,而不是在主循环里
//ch57x_led_controller_send(tx_data,NULL,10);

}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分