Mam problem z UART w ATMEGA162 16PU
Procesor z kwarcem 11059200 Hz zasilany 3,3V
Potrzebuje prędkość 9600 b/s
To jest bez przerwań
To jest bez przerwań i działa czyli w terminalu wraca to co wysyłam.
Niestety potrzebuję tego w przerwaniach
I robię tak
Odznaczam sei();
I usuwam zwykły odczyt i odesłanie co PC
Czyli usuwam linie
n=USART0_Receive();
I po wysłaniu czegokolwiek do ATMEGI układ nie daje znaku życia dioda przestaje reagować.
Co robię źle?
Procesor z kwarcem 11059200 Hz zasilany 3,3V
Potrzebuje prędkość 9600 b/s
#include <avr/io.h>
#include<inttypes.h>
#include<avr/interrupt.h>
#include <util/delay.h>
#include <avr/wdt.h>
//#include"../lib/rs232.h"
#define FOSC 11059000// Clock Speed
#define BAUD 9600
#define MYUBRR FOSC/16/BAUD-1
void USART0_Init( unsigned int ubrr )
{
/* Set baud rate */
UBRR0H = (unsigned char)(ubrr>>8);
UBRR0L = (unsigned char)ubrr;
/* Enable receiver and transmitter */
UCSR0B = (1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0);
/* Set frame format: 8data, 2stop bit */
UCSR0C = (1<<URSEL0)|(1<<USBS0)|(3<<UCSZ00);
}
void USART0_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSR0A & (1<<UDRE0)));
/* Put data into buffer, sends the data */
UDR0 = data;
}
unsigned char USART0_Receive( void )
{
/* Wait for data to be received */
while ( !(UCSR0A & (1<<RXC0)) );
/* Get and return received data from buffer */
return UDR0;
}
volatile char n;
SIGNAL(SIG_UART0_RECV)
{
//PORTB=0x00;
n=UDR0;
//UCSR0A &= ~_BV(RXC0);
}
int main( void )
{
DDRB= 0xFF;
PORTB=0xFF;
USART0_Init(MYUBRR);
//sei();
n=0;
while(1)
{
n=USART0_Receive();
USART0_Transmit(n);
}
return 0;
}
To jest bez przerwań
To jest bez przerwań i działa czyli w terminalu wraca to co wysyłam.
Niestety potrzebuję tego w przerwaniach
I robię tak
Odznaczam sei();
I usuwam zwykły odczyt i odesłanie co PC
Czyli usuwam linie
n=USART0_Receive();
I po wysłaniu czegokolwiek do ATMEGI układ nie daje znaku życia dioda przestaje reagować.
Co robię źle?