LED屏接口 数据输出错误

程序上输出的数组数据为下面的数据,

__align(2)  unsigned short LED_TAB[2]={0X0102,0X0304};


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

image.png


初始化配置

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};

image.png


你好,附件是一个ch579 上的LED 控制器的例程, 解压到官网例程EXAM 文件夹后打开工程即可.

icon_rar.gifch57x_ledc_test.zip

image.png

image.png

如果你只是单个缓冲,这样即可:

        
    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( "%02X\r\n", R8_LED_STATUS);
    ch57x_led_controller_dma_stop();
    //这里也可以直接更新,而不是在主循环里
    //ch57x_led_controller_send(tx_data,NULL,10);
    
}



只有登录才能回复,可以选择微信账号登录