AVR XMEGA USART Моделирование

Используя тестовый код ниже, я пытаюсь отправить данные через USART из xmega128a3u с использованием simulator в Atmel Studio. При просмотре ввода / вывода регистр данных никогда не устанавливается, хотя я его устанавливаю. Что-то не так с моим кодом или симулятором или как?

#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 SETUPcli();//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++;
}

введите описание изображения здесь

1

Решение

Обновляются ли другие регистры, но не DATA? Если нет, убедитесь, что вы включили часы для USART. Многие микро-устройства также используют один регистр DATA для чтения и записи. Таким образом, попытка чтения регистра DATA после записи (т. Е. Представление отладки выполняет чтение) не даст ничего, если данные не были получены. Таким образом, вы, вероятно, увидите такое же поведение, даже если выполняете на оборудовании.

Тем не менее, по моему опыту, симулятор в Atmel Studio не очень хорош для симуляции прерываний или периферийных операций.

Изменить, чтобы включить информацию из комментариев ниже:
Поскольку вы не можете прочитать что-то, что только что записали в регистр DATA, проверка флага DREIF в регистре STATUS сразу после записи данных подтвердит, передаются ли данные.

1

Другие решения

Других решений пока нет …