[De-Nut-Discussion] Probleme mit MPCM beim Ethernut 2.1b und Nut OS 4.8.3
Kai Wert
kaiw71 at googlemail.com
Tue Aug 4 08:17:31 CEST 2009
Hallo
Ich hab folgendes Problem. Ich möchte ein Netzwerk über 485 aufbauen.
Hierfür benötige ich das 9.Bit für die Unterscheidung Adresse und Daten.
Wenn ich das 9.Bit aber Aktiviere bekomme ich ein Fehler und es wird nur die
8 Bit Übertragung aktiviert.
Wenn ich das 9.Bit direkt im Register aktiviert kann ich am Oszilloskop
sehen das er es auch überträgt aber ich habe keinen Einfluss darauf was er
überträgt solang ich den Ausgabe Stream benutze.
Nur wenn ich direkt ins UDR Register schreibe kann ich das Bit setzten oder
rücksetzten. Allerdings fehlt mir dann mein Freischaltungssignal damit ich
die 485 Schnittstelle Halbduplex betreiben kann.
Hier mein Quelltext:
#include <dev/board.h>
#include <sys/timer.h>
#include <string.h>
#include <stdio.h>
#include <io.h>
int main(void)
{
uint32_t baud_dbg = 115200;
uint32_t baud_485 = 230400;
uint32_t parity = 0;
uint32_t stopBit = 1;
uint32_t DataBit = 9;
uint32_t flow_485 = USART_MF_HALFDUPLEX;
uint32_t to_485 = 1000;
FILE *rs485;
outb(DDRB, 0xf0);
NutRegisterDevice(&DEV_DEBUG, 0, 0);
freopen(DEV_DEBUG_NAME, "w", stdout);
_ioctl(_fileno(stdout), UART_SETSPEED, &baud_dbg);
puts("\nRS485 Master Sample");
if (NutRegisterDevice(&devUsartAvr1, 0, 0)) {
puts("Failed to register " DEV_UART1_NAME);
}
if ((rs485 = fopen(DEV_UART1_NAME, "r+")) == NULL) {
puts("Failed to open " DEV_UART1_NAME);
}
if (_ioctl(_fileno(rs485), UART_SETFLOWCONTROL, &flow_485)) {
puts("Failed to set flow control");
}
if (_ioctl(_fileno(rs485), UART_SETSPEED, &baud_485)) {
puts("Failed to set baudrate");
}
if (_ioctl(_fileno(rs485), UART_SETDATABITS , &DataBit)) {
puts("Failed to set DataBit");
}
if (_ioctl(_fileno(rs485), UART_SETPARITY , &parity)) {
puts("Failed to set Parity");
}
if (_ioctl(_fileno(rs485), UART_SETSTOPBITS, &stopBit)) {
puts("Failed to set StopBits");
}
if (_ioctl(_fileno(rs485), UART_SETREADTIMEOUT, &to_485)) {
puts("Failed to set read timeout");
}
sbi(PORTD, 2);
sbi(UCSR1A, U2X);
sbi(UCSR1B, UCSZ12); // Aktivier 9 BIT modus
for (;;) {
UCSR1B |= TXB81; // Setze Bit 9 da nun eine Adresse kommt
putc(0x55,rs485);
UCSR1B &= ~TXB81; // Rücksetzt 9.Bit da nun Daten fogeln
fflush(rs485);
fprintf(rs485, "Data");
NutSleep(1000);
}
return 0;
}
Hat jemand eine Idee wie ich dieses Problem in den Griff bekommen kann.
Muss ich vielleicht noch etwas im Nut OS einstellen?
Vielen Dank im Voraus.
Mit Freundlichen Grüßen Kai
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.egnite.de/pipermail/de-nut-discussion/attachments/20090804/783bbe68/attachment-0002.html>
More information about the De-Nut-Discussion
mailing list