Hallo die Herren,
Treiber: RS232/V24 Treiber SerportC0 (XMGEA)
Fehlerbeschreibung:
Um einen RxBuffer-Überlauf zu detektieren möchte ich die Funktion PipeFull(RxBuffer) benutzen.
Im Handbuch steht auf Seite 68 geschrieben: "Weiterhin kann die Funktion "PipeFull" auf die serielle Schnittstelle angewendet werden: Function PipeFull(RxBuffer):boolean "
Leider liefert die Funktion PipeFull(RxBufferC0) immer false (XMEGA).
ATMEGA funktioniert.
Im angeführten Testprogramm schreibe ich kontinuierlich in den RxBufferC0 ohne diesen zu leeren.
Dafür sind RXD-Pin und TXD-Pin vom XMEGA (XMEGA32A4: Pin 12 und 13) miteinander verbunden.
Mit SerStat prüfe ich auf vorhandene Daten und Toggle in diesem Fall Pin A0.
Falls Pipefull(RxBufferC0) true ist, soll Pin A1 togglen. Die geschieht jedoch nie.
Ist dies ein Bug?
Gruß
Thomas.AC
program XPipeFullTest;
{$NOSHADOW}
{ $WG} {global Warnings off}
Device = xmega32A4, VCC=3.3;
{ $BOOTRST $04000} {Reset Jump to $04000}
Define_Fuses
// Override_Fuses;
NoteBook = A;
COMport = USB;
LockBits0 = [];
FuseBits0 = [];
FuseBits1 = [];
FuseBits2 = [];
Import SerPortC0;
Define
OSCtype = extXTAL=8000000, PLLmul=16, prescA=1, prescB=2, prescC=2, FailDet;
StackSize = $0064, iData;
FrameSize = $0064, iData;
{USART}
SerportC0 = 9600;
TxBufferC0 = 16, iData;
RxBufferC0 = 16, iData;
Implementation
{$IDATA}
var
PA0[@PORTA,0] : bit;
PA1[@PORTA,1] : bit;
begin
DDRA := $FF; // set outputs
EnableInts($87);
loop
SerOutC0($AA);
if SerStatC0 then
TOGGLE(PA0);
endif;
if (PipeFull(RxBufferC0)) then
TOGGLE(PA1);
endif;
endloop;
end XPipeFullTest.
Treiber: RS232/V24 Treiber SerportC0 (XMGEA)
Fehlerbeschreibung:
Um einen RxBuffer-Überlauf zu detektieren möchte ich die Funktion PipeFull(RxBuffer) benutzen.
Im Handbuch steht auf Seite 68 geschrieben: "Weiterhin kann die Funktion "PipeFull" auf die serielle Schnittstelle angewendet werden: Function PipeFull(RxBuffer):boolean "
Leider liefert die Funktion PipeFull(RxBufferC0) immer false (XMEGA).
ATMEGA funktioniert.
Im angeführten Testprogramm schreibe ich kontinuierlich in den RxBufferC0 ohne diesen zu leeren.
Dafür sind RXD-Pin und TXD-Pin vom XMEGA (XMEGA32A4: Pin 12 und 13) miteinander verbunden.
Mit SerStat prüfe ich auf vorhandene Daten und Toggle in diesem Fall Pin A0.
Falls Pipefull(RxBufferC0) true ist, soll Pin A1 togglen. Die geschieht jedoch nie.
Ist dies ein Bug?
Gruß
Thomas.AC
program XPipeFullTest;
{$NOSHADOW}
{ $WG} {global Warnings off}
Device = xmega32A4, VCC=3.3;
{ $BOOTRST $04000} {Reset Jump to $04000}
Define_Fuses
// Override_Fuses;
NoteBook = A;
COMport = USB;
LockBits0 = [];
FuseBits0 = [];
FuseBits1 = [];
FuseBits2 = [];
Import SerPortC0;
Define
OSCtype = extXTAL=8000000, PLLmul=16, prescA=1, prescB=2, prescC=2, FailDet;
StackSize = $0064, iData;
FrameSize = $0064, iData;
{USART}
SerportC0 = 9600;
TxBufferC0 = 16, iData;
RxBufferC0 = 16, iData;
Implementation
{$IDATA}
var
PA0[@PORTA,0] : bit;
PA1[@PORTA,1] : bit;
begin
DDRA := $FF; // set outputs
EnableInts($87);
loop
SerOutC0($AA);
if SerStatC0 then
TOGGLE(PA0);
endif;
if (PipeFull(RxBufferC0)) then
TOGGLE(PA1);
endif;
endloop;
end XPipeFullTest.