Hallo,
ich habe einen XMega128A1 der das kleine Programm unten ausführt. Solange über die serielle
Schnittstelle keine Zeichen empfangen werden läuft der TimerA regelmäßig, LED blinkt.
Sobald ein Zeichen empfangen wurde steht der Timer. Das Verhalten wird auch im Simulator gezeigt.
Da ich das Programm schon recht weit reduziert habe gehen mir auch langsam die Ideen aus.
Inwieweit sind diese Sachen bereits auf den XMega angespasst?
Gibt es eine Zusammenfassung was auf den XMega angepasst wurde und was noch nicht geht, bzw. getestet ist. Dann hat man es leichter nach seinen Fehler zu suchen.
Ich hatte auch versucht die ser. Schnittstelle in einen eigenen Prozess auszulagern und die Daten über eine Pipe ins Hauptprogramm zu übernehmen funktionierte aber auch nicht.
Freue mich über einen Tipp, danke.
Torsten
program ChopStab;
{$NOSHADOW}
{$WG} {global Warnings on}
Device = xmega128A1, VCC=3.3;
//{ $BOOTRST $10000} {Reset Jump to $10000}
Define_Fuses
// Override_Fuses;
NoteBook = A;
COMport = USB;
LockBits0 = [];
FuseBits0 = [];
FuseBits1 = [];
FuseBits2 = [];
Import SysTick,SerPortC0,SPI_C;
From SysTick import SystemTime16;
Define
OSCtype = extClock=10000000, PLLmul=2, prescA=1 , prescB=1, prescC=1;
SysTick = 10; {msec}
StackSize = $100, iData;
FrameSize = $100, iData;
FlashChksum = ProgEnd; {or absolute address}
RxBufferC0 = 32, iData;
TxBufferC0 = 64, iData;
SerPortC0 = 9600,Stop1;
SPIorderC = MSB;
SPImodeC = 0;
SPIprescC = 1;
SPI_SSC = none;
Implementation
{$IDATA}
{--------------------------------------------------------------}
{ Type Declarations }
type TString8 = string[8];
{--------------------------------------------------------------}
{ Const Declarations }
const
Version : Tstring8 ='V1.0';
{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
var LEDgn[@PortJ,0] : bit;
var LEDrt[@PortJ,1] : bit;
var zeichen : char;
var TimerA : Systimer;
{--------------------------------------------------------------}
{ functions }
procedure init_Ports;
begin
// Port J
DDRJ :=$03;
end;
{--------------------------------------------------------------}
{ Main Program }
{$IDATA}
begin
Init_Ports;
LEDgn:=FALSE;
LEDrt:=FALSE;
SetSysTimer(TimerA,100);
EnableInts($87);
loop
if SerStatC0 then
repeat
zeichen :=serinpC0;
until SerStatC0;
endif;
if isSysTimerZero(TimerA) then
Toggle(LEDrt);
SetSysTimer(TimerA,100);
endif;
endloop;
end ChopStab.
ich habe einen XMega128A1 der das kleine Programm unten ausführt. Solange über die serielle
Schnittstelle keine Zeichen empfangen werden läuft der TimerA regelmäßig, LED blinkt.
Sobald ein Zeichen empfangen wurde steht der Timer. Das Verhalten wird auch im Simulator gezeigt.
Da ich das Programm schon recht weit reduziert habe gehen mir auch langsam die Ideen aus.
Inwieweit sind diese Sachen bereits auf den XMega angespasst?
Gibt es eine Zusammenfassung was auf den XMega angepasst wurde und was noch nicht geht, bzw. getestet ist. Dann hat man es leichter nach seinen Fehler zu suchen.
Ich hatte auch versucht die ser. Schnittstelle in einen eigenen Prozess auszulagern und die Daten über eine Pipe ins Hauptprogramm zu übernehmen funktionierte aber auch nicht.
Freue mich über einen Tipp, danke.
Torsten
Code
program ChopStab;
{$NOSHADOW}
{$WG} {global Warnings on}
Device = xmega128A1, VCC=3.3;
//{ $BOOTRST $10000} {Reset Jump to $10000}
Define_Fuses
// Override_Fuses;
NoteBook = A;
COMport = USB;
LockBits0 = [];
FuseBits0 = [];
FuseBits1 = [];
FuseBits2 = [];
Import SysTick,SerPortC0,SPI_C;
From SysTick import SystemTime16;
Define
OSCtype = extClock=10000000, PLLmul=2, prescA=1 , prescB=1, prescC=1;
SysTick = 10; {msec}
StackSize = $100, iData;
FrameSize = $100, iData;
FlashChksum = ProgEnd; {or absolute address}
RxBufferC0 = 32, iData;
TxBufferC0 = 64, iData;
SerPortC0 = 9600,Stop1;
SPIorderC = MSB;
SPImodeC = 0;
SPIprescC = 1;
SPI_SSC = none;
Implementation
{$IDATA}
{--------------------------------------------------------------}
{ Type Declarations }
type TString8 = string[8];
{--------------------------------------------------------------}
{ Const Declarations }
const
Version : Tstring8 ='V1.0';
{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
var LEDgn[@PortJ,0] : bit;
var LEDrt[@PortJ,1] : bit;
var zeichen : char;
var TimerA : Systimer;
{--------------------------------------------------------------}
{ functions }
procedure init_Ports;
begin
// Port J
DDRJ :=$03;
end;
{--------------------------------------------------------------}
{ Main Program }
{$IDATA}
begin
Init_Ports;
LEDgn:=FALSE;
LEDrt:=FALSE;
SetSysTimer(TimerA,100);
EnableInts($87);
loop
if SerStatC0 then
repeat
zeichen :=serinpC0;
until SerStatC0;
endif;
if isSysTimerZero(TimerA) then
Toggle(LEDrt);
SetSysTimer(TimerA,100);
endif;
endloop;
end ChopStab.