Hi,
ja ich möchte mit einem ATXMega32A4 arbeiten, ich hab wohl vergessen, das zu erwähnen, tut mir leid!
Allerdings musst Du dann mit Pointern arbeiten.
Wieso so "abwertend"? Sind Pointer was schlechtes oder interpretiere ich den Satz einfach nur falsch?
Code:
union overlay
{
uint8_t byte1;
uint8_t byte2;
int16_t integer1;
};
Könnte ich mit dieser Union auf einen Integer und dessen zwei zugrundeliegende Bytes zugreifen?
Also ich muss schon sagen, geschenkt wird einem bei C wohl garnichts. Nichtmal die Delay-Funktion funktioniert!?
Ich möchte in einem Abstand von ca. 1s einen Text über die serielle ausgeben, aber es wird nichts mehr gesendet. Ist das ein Bug?
Ich hab <avr/delay.h> eingebunden und auch den Hinweis mit max. delayZeit = 262.14ms / F_CPU (in MHz) hab ich gesehen....
Code:
#include <avr/io.h>
#include <avr/delay.h>
#define F_CPU 32000000UL
int main(void)
{
Clock_init();
uart_init(&USARTC1,115200);
PORTC.DIRSET = 0x80;
while(1)
{
send_string(&USARTC1, "Hallo Welt");
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 *uart, uint32_t baud)
{
uart->BAUDCTRLA = (F_CPU/(16*baud))-1;
uart->BAUDCTRLB = ((F_CPU/(16*baud))-1)>>8;
uart->CTRLB = USART_RXEN_bm | USART_TXEN_bm;
uart->CTRLC = USART_CHSIZE_8BIT_gc;
}
void send_string(USART_t *uart, char str[])
{
uint8_t i = 0;
while (i<strlen(str))
{
while (!( uart->STATUS & USART_DREIF_bm));
uart->DATA = str[i];
i++;
}
while (!( uart->STATUS & USART_DREIF_bm));
uart->DATA = 0x0d;
while (!( uart->STATUS & USART_DREIF_bm));
uart->DATA = 0x0a;
}
void delay_ms(uint64_t ms)
{
uint64_t i = 0;
while (i < ms)
{
i++;
_delay_ms(1);
}
}
Gruß
Chris
Lesezeichen