Hier erst mal ein Test-Programm. Der Compiler zeigt die Fehler dann auf.
Beide Funktionen (SerBaud und SerPort_Send) habe ich erst letzte Woche neu hinzu genommen. Ob sie früher funktioniert haben, kann ich nicht sagen. (Ich habe 4.97.0 und 4.97.8 getestet: beide NIO)
SerBaud(921600) wäre wichtiger, da ich jetzt die Baudraten zur Laufzeit umstellen muß.
Mit Define Serport = 921600; funktioniert die Baudrate, aber eben nur beim StartUp.
Code
program Test;
{$NOSHADOW} // make this a comment, so that ALL registers get saved
{ $WG} {global Warnings off} // activate for error.list and unused variables
{ $W+} // activate for error.list and unused variables
{$TYPEDCONST OFF} // so können Typdefinitionen in Const weggelassen werden... naja
Device = mega2561, VCC=5;
Define_Fuses // Fuses hier zur Dokumentation angegeben. Nicht angegeben = 1 = NICHT gesetzt
Override_Fuses; // Das funktioniert nicht wie im Compiler-Handbuch auf S. 52 beschrieben
LockBits0 = [];
FuseBits0 = [SUT1]; // CKSEL3..1 = 111 --> 16 MHz external oscillator
// CKSEL0 = 1, SUT1..0 = 01 --> Crystal oscillator, BOD enabled
FuseBits1 = [SPIEN, EESAVE]; // BOOTSZ1 --> Bootstart at WORD ADDRESS $F800, EESAVE --> EEPROM is preserved during a chip erase
FuseBits2 = [BODLEVEL0,BODLEVEL2]; // Brown Out at 4.3V 0:1, 1:1, 2:0; 2.7V: 0:0, 1:1, 2:0
ProgMode = SPI;
Import SysTick, SerPort, RTClock;
From System Import Float;
Define
ProcClock = 14745600; {Hertz}
SysTick = 10; {msec}
StackSize = $0100, iData;
FrameSize = $0200, iData;
Serport = 921600, Stop2;
SerPortDTR = PinF, 0, Negative; // Input (CTS): Handshake from XPort to ATMega: Hi indicates ATMega STOP sending to XPort!
SerPortDSR = PortF, 1, Negative; // Output(RTS): Handshake from ATMega to XPort: Hi indicates XPort STOP sending to ATMega!
RxBuffer = 254, iData;
TxBuffer = 254, iData;
RTClock = iData, DateTime;{Time, DateTime}
RTCsource = SysTick;
Implementation
{$IDATA}
{--------------------------------------------------------------}
{ Const Declarations }
const
{--------------------------------------------------------------}
{ Type Declarations }
Type
{--------------------------------------------------------------}
{$EEPROM}
// Find the SerialNo at the end of the EEPROM!
{$IDATA}
{ Var Declarations }
Var
IFPPower[@PortF,3] : Bit;
DTR [@PinF, 0] : Bit; // Input (CTS): Handshake from XPort to ATMega: Hi indicates ATMega STOP sending to XPort!
DSR [@PortF, 1] : Bit; // Output(RTS): Handshake from ATMega to XPort: Hi indicates XPort STOP sending to ATMega!
// If RXBuffer is defined, it runs in Interrupt mode! Else in Polling mode
RxBuff : array[0..254] of byte; // Große Puffer! Anpassen an SLIP_ReadStr...
TxBuff : array[0..254] of byte;
RxPtr : Pointer;
TxPtr : Pointer;
{--------------------------------------------------------------}
{ functions }
{--------------------------------------------------------------}
{ Main Program }
{$IDATA}
begin
// PB0 = O /SS SPI for MMC-Card
// PB1 = O SCLK SPI for MMC-Card
// PB2 = O MOSI SPI for MMC-Card
// PB3 = I MISO SPI for MMC-Card
// PB4 - PB7 = I direct fast Inputs via Optocoupler Input 17 - 24
DDRB := %00000111; // DDRx : 0 is Input, 1 is Output. If 0 = Input: then PortX = 1 activates the internal pullup
PortB := %11111000; // All Outputs Lo, All Inputs with Pullup
// PF0 = I CTS for controlling serial flow
// PF1 = O RTS for controlling serial flow
// PF2 = I from XPort CP2
// PF3 = O Interface Platine IFP Power. 0 = IFP Off, 1 = IFP On.
// PF4 - PF6 = I JTAG Interface, Not used
// PF7 = I Analog Digital Converter input
DDRF := %00001010; // DDRx : 0 is Input, 1 is Output. If 0 = Input: then PortX = 1 activates the internal pullup
PortF := %00000101; // All Outputs Lo, JTAGs and ADC PF7 no Pullup, CP2 and CTS with Pullup.
mDelay(100);
IFPPower := 1; // Do this late!
mDelay(100);
EnableInts;
SerBaud(300000); // Geht
SerPort_Send; // Geht nicht
SerBaud(921600); // Geht nicht
loop
endloop;
{ $DEPHASE}
end Test.