Hi,
nach einiger Zeit bin ich nun (mal wieder) am experimentieren mit dem Atmel-Studio (6).
Ich wollte wieder mit der USART anfangen, nachdems damals ja nicht geklappt hatte... Also hab ich ein Programm geschrieben, welches "Hallo Welt" jede 1s ausgeben soll. Doch leider passiert wieder mal nichts. Ich weiß nicht wo der Fehler ist, aber es scheint, als würde der AVR (ATXMega32A4) überhaupt nichts machen, es kommt nichtmal Müll im Terminal an. Ansich muss aber alles funzen, den wenn ich das gleiche Prog mit Bascom schreibe, kommt immer was im Terminal an...
Code:
#define F_CPU 32000000L
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <string.h>
int main(void)
{
Clock_init();
uart_init(&USARTC1);
while(1)
{
Send_UART("Hallo Welt" , &USARTC1);
for(int i=1000;i>=1;i--)
{
_delay_ms(1);
}
}
}
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;
}
void uart_init(USART_t *usart)
{
usart->BAUDCTRLB = 0;
usart->BAUDCTRLA = 0x11;
usart->CTRLB = USART_TXEN_bm | USART_RXEN_bm;
usart->CTRLC = 0x03;
usart->CTRLA = 0;
}
void Send_UART(char data[], USART_t *usart)
{
char Counter = 0x00;
char lenght = 0x00;
lenght = strlen(data);
while(Counter < lenght)
{
while (!(usart->STATUS & USART_DREIF_bm));
usart->DATA = data[Counter];
Counter++;
}
Counter = 0x00;
while (!( usart->STATUS & USART_DREIF_bm));
usart->DATA = 0x0A;
while (!( usart->STATUS & USART_DREIF_bm));
usart->DATA = 0x0D;
}
Ich drücke auf "Build GccApplication3" (so heißt das Prog) und anschließend auf "Device Programming". Dann auf "Apply", dann auf Memories und wähle die .hex Datei aus. Dann drücke ich noch auf Program. Ich hoffe der Ablauf ist richtig?!
Gruß
Chris
EDIT:
Hab den Fehler selbst gefunden, hatte vergessen den TX-Pin auf Ausgang zu stellen. Da ist wohl Bascom Schuld, der macht das automatisch..
Lesezeichen