PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Serialin mit XMEGA



Che Guevara
22.03.2012, 20:11
Hallo,

ich möchte mithilfe des Config Serialin Befehls eine Sub beim Eintreffen eines "CR" ausführen. Jedoch springt der XMEGA64A3 nie in die Sub. Weiß jemand, woran das liegen könnte?
Hier der Code:


$regfile = "xm64a3def.dat"
$crystal = 32000000
$hwstack = 64
$swstack = 40
$framesize = 40

$lib "xmega.lib"
$external _xmegafix_clear
$external _xmegafix_rol_r1014

Config Osc = Disabled , 32mhzosc = Enabled
Config Sysclock = 32mhz


Declare Sub Serial1charmatch()


Config Com2 = 38400 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8

Config Serialin1 = Buffered , Size = 100 , Bytematch = 13

Open "COM2:" For Binary As #1


Dim Datastring As String * 10


Config Priority = Static , Vector = Application , Lo = Enabled
Enable Interrupts



Do


!nop


Loop

End


Sub Serial1charmatch()
Input #1 , Datastring , Noecho
Print #1 , "Empfangen!"
End Sub


Vielen Dank & Gruß
Chris

BastelWastel
22.03.2012, 20:18
Servus Chris,
vllt raff ich's gerade einfach nicht..aber ich sehe auch nich von wo die sub aufgerufen wird.

Che Guevara
22.03.2012, 20:23
Hi,

die Sub ist in dem Fall eine ISR, d.h. wenn über die UART ein CR empfangen wird, löst das einen Interrupt aus und dieser springt dann in die SUB ;)

Gruß
Chris

MagicWSmoke
22.03.2012, 20:24
Du musst den Med Interruptlevel aktivieren.

Che Guevara
22.03.2012, 20:28
Hi,

du hast Recht ... Aber ich dachte, "Enable Interrupts" aktiviert den MED Interruptlevel?!

Vielen Dank & Gruß
Chris

BastelWastel
22.03.2012, 20:33
Ah, ok..war irgendwie gerade darauf dass es als ISR deklariert werden muss.
Bau mal $baud1 mit ein und schau ob sich was tut.

MagicWSmoke
22.03.2012, 20:33
Aber ich dachte, "Enable Interrupts" aktiviert den MED Interruptlevel?!
Ein Enable Interrupts setzt das I-Flag im SReg und erlaubt die gesetzten Interrupts grundsätzlich. Der dem gewählten Interrupt entsprechende Level muss beim XMega aber aktiviert werden, sonst geht gar nix.
Hab' aber irgendwie in Erinnerung, dass Mark standardmäßig den Med-Level erlauben wollte. Kann's sein, dass Du eine etwas ältere Bascom-Version verwendest ?

Che Guevara
22.03.2012, 20:36
Hm evtl. hab ich das auch blos mal irgendwo aufgeschnappt... Meine Version ist die 2.0.7.2.
Vielen Dank nochmal für die schnelle Hilfe :D

Gruß
Chris

MagicWSmoke
22.03.2012, 22:56
Nachtrag: Wenn Du Config Priority im Code aktiv hast, werden nur die Levels erlaubt, die Du dort angibst, da wird dann angenommen, dass Du gezielt selbst eingreifen willst.
Lässt Du Config Priority weg, so wird per Default der Med-Level aktiviert, damit die Kiste schon mal läuft.
Dein Fehler war also das gezielte Erlauben des falschen Levels.