Nils Wenzler
18.07.2007, 14:22
Hallo
Ich Programmiere momentan zum üben an einem RN-Control 1.4 Mega32 Board.
Ich muss zum weiterkommen endlich die RN232 übertragung zum laufen zu bringen...
Ich habe ein Modul geschrieben um das Uart zu bedienen, allerdings bekomme ich am PC (Benutzte Linux und das MINICOM um etwas anzuzeigen)
nur Datenmüll, sprich es wird etwas übertragen aber es kommt nur Müll an.
Ich habe hier mal meinen Code, könnte sich den jemand mal anschauen?
#include <avr/io.h>
#include <avr/interrupt.h>
#include "avr.h"
#include "uart_cnf.h"
#include "uart.h"
#include "str_int.h"
// local definitions -----------------------------------------------------------
#define UART_UBRR_CALC ((F_CPU)/((UART_BAUD_RATE)*16L)-1)
// global variables ------------------------------------------------------------
uint8_t uartTxCount;
// local variables -------------------------------------------------------------
uint8_t* txData;
// global function implementation ----------------------------------------------
void uartInit(){
UCSRB|=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN); //RX Complete Interrupt Enable
UCSRC |= (1<<UCSZ1)|(1<<UCSZ0); //8-Bit
UBRRH=(uint8_t)(UART_UBRR_CALC>>8); //set baudrate
UBRRL=(uint8_t) UART_UBRR_CALC;
uartTxCount=0;
sei();
}
uint8_t uartTxBytes(uint8_t* data,uint8_t length){
if(uartTxCount)
return 0;
txData=data;
uartTxCount=length;
UDR=*data;
UCSRB|=(1<<UDRIE); //Data Register Empty Interrupt Enable
return 1;
}
void uartTxUint16(uint16_t i){
uint8_t str[6];
stringWord2Dec(i,str); //convert integer to string
uartTxBytes(&str[1],str[0]); //send string
uint8_t str2="\r\n";
uartTxBytes(str2,2); //carriage return, new line
}
// interrupt routines ----------------------------------------------------------
ISR(USART_UDRE_vect){ //USART TX Data Register Empty Interrupt
if(--uartTxCount)
UDR=*++txData;
else{
UCSRB&=~(1<<UDRIE); //Data Register Empty Interrupt Disable
}
/* This Interrupt do not disable him self. It neccesary do read UDR
* or to disable it in the UCSRB Register. */
}
Danke Gruss Nils
Achja die Variable UART_BAUD_RATE ist 38400 und F_CPU 16000000
Ich Programmiere momentan zum üben an einem RN-Control 1.4 Mega32 Board.
Ich muss zum weiterkommen endlich die RN232 übertragung zum laufen zu bringen...
Ich habe ein Modul geschrieben um das Uart zu bedienen, allerdings bekomme ich am PC (Benutzte Linux und das MINICOM um etwas anzuzeigen)
nur Datenmüll, sprich es wird etwas übertragen aber es kommt nur Müll an.
Ich habe hier mal meinen Code, könnte sich den jemand mal anschauen?
#include <avr/io.h>
#include <avr/interrupt.h>
#include "avr.h"
#include "uart_cnf.h"
#include "uart.h"
#include "str_int.h"
// local definitions -----------------------------------------------------------
#define UART_UBRR_CALC ((F_CPU)/((UART_BAUD_RATE)*16L)-1)
// global variables ------------------------------------------------------------
uint8_t uartTxCount;
// local variables -------------------------------------------------------------
uint8_t* txData;
// global function implementation ----------------------------------------------
void uartInit(){
UCSRB|=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN); //RX Complete Interrupt Enable
UCSRC |= (1<<UCSZ1)|(1<<UCSZ0); //8-Bit
UBRRH=(uint8_t)(UART_UBRR_CALC>>8); //set baudrate
UBRRL=(uint8_t) UART_UBRR_CALC;
uartTxCount=0;
sei();
}
uint8_t uartTxBytes(uint8_t* data,uint8_t length){
if(uartTxCount)
return 0;
txData=data;
uartTxCount=length;
UDR=*data;
UCSRB|=(1<<UDRIE); //Data Register Empty Interrupt Enable
return 1;
}
void uartTxUint16(uint16_t i){
uint8_t str[6];
stringWord2Dec(i,str); //convert integer to string
uartTxBytes(&str[1],str[0]); //send string
uint8_t str2="\r\n";
uartTxBytes(str2,2); //carriage return, new line
}
// interrupt routines ----------------------------------------------------------
ISR(USART_UDRE_vect){ //USART TX Data Register Empty Interrupt
if(--uartTxCount)
UDR=*++txData;
else{
UCSRB&=~(1<<UDRIE); //Data Register Empty Interrupt Disable
}
/* This Interrupt do not disable him self. It neccesary do read UDR
* or to disable it in the UCSRB Register. */
}
Danke Gruss Nils
Achja die Variable UART_BAUD_RATE ist 38400 und F_CPU 16000000