Hallo,
Habe meinen ATXMEGA128A1U mit einem GSM Modul über COM4 verbunden.
Jetzt möchte ich mit meinem ATXMega128A1U einen AT Command absetzen und
interrupt-gesteuert die Antwort des GSM Moduls empfangen.
Dazu habe ich mich durch einige Quellen gelesen und einen Code
geschrieben.
Zuerst die Quellen:
- avrhelp.mcselec.com/index.html?enable.htm
- avrhelp.mcselec.com/index.html?on_interrupt.htm
- avrhelp.mcselec.com/atxmega.htm?zoom_highlightsub=usarte0
- www.g-heinrichs.de/attiny/bascom-avr20manual%20201_11_7.pdf
- www.rowalt.de/mc/avr/avrboard/06/avrb06.htm
- rn-wissen.de/wiki/index.php?title=Bascom_Interrupts
Nun der Code:
1 | $regfile = "xm128a1def.dat"
|
2 | $crystal = 8000000
|
3 | $hwstack = 80
|
4 | $swstack = 80
|
5 | $framesize = 80
|
6 | $loadersize = 8192
|
7 | $lib "xmega.lib" : $external _xmegafix_clear : $external _xmegafix_rol_r1014
|
8 | Config Osc = Enabled , 32mhzosc = Enabled , 32khzosc = Enabled , 32khzpowermode = Low_power
|
9 | Config Sysclock = 32mhz , Prescalea = 4 , Prescalebc = 1_1
|
10 | Config Clock = Soft , Rtc = 1khz_32khz_crystosc
|
11 |
|
12 | ' CPU zu Putty Kommunikation
|
13 | Config Com5 = 19200 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8
|
14 | Open "COM5:" For Binary As #5
|
15 |
|
16 | ' CPU zu GSM Kommunikation
|
17 | Config Com4 = 9600 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8
|
18 | Config Serialin3 = Buffered , Size = 254
|
19 | Open "COM4:" For Binary As #4
|
20 |
|
21 | ' Interrupts für SIM 808
|
22 | Config Priority = Static , Vector = Application , Lo = Enabled , Med = Enabled , Hi = Enabled
|
23 | Enable Interrupts
|
24 | On Urxc Ongsmrecieveinterrupt
|
25 | Enable Urxc
|
26 |
|
27 | ' schreib irgendeinen AT Command ins GSM Modul
|
28 | Print #4 , "AT+ECHARGE?"
|
29 | Print #5 , "written AT command to GSM Module"
|
30 |
|
31 | Do
|
32 | nop
|
33 | Loop
|
34 | End
|
35 |
|
36 | Ongsmrecieveinterrupt:
|
37 | Print #5 , "Called the interrupt Routine for the GSM module!"
|
38 | Return
|
Leider bestätigt sich meine Erwartung nicht: Das Label
Ongsmrecieveinterrupt wird nicht aufgerufen, während der Schleife des
Hauptprogramms.
Die LEDS auf dem GSM Modul leuchten eine blinkt alle 3 Sekunden. (SIMCOM
808)
Warum feuert der Interrupt nicht und führt das Label aus?