AVR - 带有 UART MSPI 的复合视频 - 在 main 和中断中的工作方式不同

问题描述

我正在使用 UART MSPI 在 Atmega1284 上生成 PAL 信号。我已经完成了 main 函数中的所有代码,但是当我将代码移动到中断中时,UART 的行为有所不同。

这里是渲染线的代码

UCSR0B = (1<<TXEN0);
while (--iter) {
    while ((UCSR0A & (1<<UDRE0)) == 0) ;

    UDR0 = framebuf[videoPtr];
    //UDR0 = 0;
    videoPtr++;
}
UCSR0B = (0<<TXEN0);

在结果中,我得到了与正确显示的字节交错的垂直白条。但是,当我直接为 UDR0 赋值时,而不是通过 framebuf 数组,我得到了像素宽和两个像素宽的条。从中断运行时,UART 似乎具有不同的帧格式,但我无法在数据表中找到其行为不同的原因。

这是 UART 初始化代码

UBRR0 = 0;

// output pins
DDRD |= (SYNC_PIN)|(PIXEL_PIN);
DDRB |= (MSPIM_SCK_PIN);
     
UCSR0A = (1<<TXC0); // Transmitter enable
UCSR0C |= (1<<UMSEL00)|(1<<UMSEL01)|(0<<UCPOL0);  // Master SPI mode

UBRR0 = 0;

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)