Hallo
Ich möchte über einen ATXMEGA32A4U Daten über den USART E0 versenden.
Ich muss dazu sagen, das sind meine ersten Gehversuche mit einem ATXMEGA Controller.
Am Original Controller kann ich leider noch nicht testen, deshalb behelfe ich mir mit dem Simulator des AVR Studio 7 ( Version: 7.0.1417 - ).
Der Controller ist auf 32MHz konfiguriert.
Der USART wurde mit folgendem Code Initialisiert:Code:void clock_init (void) { OSC.CTRL |= OSC_RC32MEN_bm; while(!(OSC.STATUS & OSC_RC32MRDY_bm)); CCP = CCP_IOREG_gc; CLK.CTRL = CLK_SCLKSEL_RC32M_gc; }
Die Sendung der Bytes im Main Loop schaut so aus:Code:void init_usart (void) { //Baudrate ( 115200 ) USARTE0.BAUDCTRLA = 1047 & 0xFF; USARTE0.BAUDCTRLB = ((1047 & 0xF00) >> 0x08); //Scale Faktor für 115200 USARTE0.BAUDCTRLB |= ((-6 & 0x0F) << 0x04); //Sender aktivieren USARTE0.CTRLB = USART_TXEN_bm; // | USART_RXEN_bm für Empfänger Aktivierung //8Bit USARTE0.CTRLC = USART_CHSIZE_8BIT_gc; //Port E TX als Ausgang PORTE.DIR |= (1<<3); }
Die while Bedingung wird zwar angesprungen, aber der dahinter stehende Code nie ausgeführt.Code:while(!(USARTE0.STATUS & USART_DREIF_bm)) { USARTE0.DATA = midibuffer[send_pointer++]; if(send_pointer > bufferlen) { send_pointer=0; } }
Der Grund ist, das im Simulator das Data Register Empty Flag des USART immer auf 1 steht ( USARTE0.STATUS Register Bit 5 ).
Es lässt sich auch nicht manuell ( per Mausklick ) auf 0 setzen.
Ist das ein Bug des Simulators, oder hab ich da irgendwo was falsch initialisiert?







Zitieren

Lesezeichen