首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVR XMEGA USART仿真

AVR XMEGA USART仿真
EN

Stack Overflow用户
提问于 2015-10-30 17:33:25
回答 1查看 970关注 0票数 1

使用下面的测试代码,我试图使用xmega128a3u中的simulatorAtmel Studio.上发送数据,查看I/O视图--即使我正在设置数据寄存器,也从未设置过它。我的代码或者模拟器有什么问题吗?

代码语言:javascript
复制
#include <avr/io.h>
#include <avr/interrupt.h>

#define bscale 0
#define bsel 0x0003 //250kbps
#define packetFormat (USART_SBMODE_bm | USART_CHSIZE_8BIT_gc | USART_PMODE_DISABLED_gc)


uint8_t n;

int main(void)
{
    //ALLOW PORTB AND PORTF TO BE WRITTEN TO! TURNS OFF JTAG
    CCP = 0xD8; //Allow Protected IO changing
    MCU_MCUCR = 0x1;

    //CRYSTAL SETUP
    OSC_XOSCCTRL = OSC_FRQRANGE_12TO16_gc | OSC_XOSCSEL_XTAL_16KCLK_gc; // 16Mhz Crystal
    OSC_CTRL |= OSC_XOSCEN_bm;
    while(!(OSC_STATUS & OSC_XOSCRDY_bm)); //Wait for crystal to stabilize.
    CCP = CCP_IOREG_gc;
    CLK_CTRL = CLK_SCLKSEL_XOSC_gc;
    //END CRYSTAL SETUP


    cli();


    //Enable Interrupts
    USARTF0.CTRLA = USART_TXCINTLVL_LO_gc | USART_DREINTLVL_LO_gc;

    //Enable transmitter
    USARTF0.CTRLB = USART_TXEN_bm;

    PMIC.CTRL |= PMIC_LOLVLEX_bm;

    //Set baud
    USARTF0.BAUDCTRLB = bscale;
    USARTF0.BAUDCTRLA = bsel;

    //Set packet format
    USARTF0.CTRLC = packetFormat;

    sei();

    while (1) 
    {
        if(n < 255) {
            USARTF0.DATA  = n;

        } else {
            n = 0;  
        }
    }
}

ISR(USARTF0_TXC_vect) {
    n++;
}

ISR(USARTF0_DRE_vect) {
    n++;
}

EN

回答 1

Stack Overflow用户

发布于 2015-10-30 18:10:27

是否正在更新其他寄存器,而不是数据?如果没有,请确保您已将时钟启用到USART。许多微计算机还使用一个数据寄存器进行读写。因此,试图在写入后读取数据寄存器(例如,调试视图正在进行读取)将不会返回任何内容,除非已经接收到数据。因此,即使在硬件上执行,您也可能会看到相同的行为。

尽管如此,根据我的经验,Atmel Studio中的模拟器并不擅长模拟中断或外围操作。

编辑包含以下注释中的信息:,因为您无法读取您刚刚写入数据寄存器的内容,在写入数据后立即检查状态寄存器中的DREIF标志将确认数据是否正在传输。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33441772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档