سلام... یه دور کل انجمن xmega رو چرخیدم، جوابمو پیدا نکردم...
عرضم به حضورتون که...
من با وقفه سخت افزاری در بسکام برای Xmega مشکل دارم... هر جوره فعالش میآکنم، جواب نمیده...
تو چند تا سایت خارجی هم چرخیدم... یه بنده خدا بود به اسم MAK3 که شاخیه واسه خودش تو بسکام که چند تا سورس مربوط به استفاده از وقفه رو گذاشته بود که البته همونا رو هم استفاده کردم، باز جواب نگرفتم...
اینم نمونه کد جناب MAK3 :
$regfile = "xm128a1def.dat"
$crystal = 32000000 '32MHz
$hwstack = 64
$swstack = 40
$framesize = 40
$lib "xmega.lib" 'ab BASCOM 1.11.9.8
$external _xmegafix_clear
$external _xmegafix_rol_r1014
Config Osc = Enabled , 32mhzosc = Enabled 'internen 32MHz Oszillator konfigurieren
Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1 'internen 32MHz Oszillator konfigurieren, kein Prescaler
'Alternativen zu 32mhz:
'2MHZ --> interner 2MHz
'External --> externer Oszillator --> Es muss dann auch der "Range" angegeben werden z.B. 12MHZ_16MHZ
'Pll --> Phase Locked Loop (PLL) --> damit kann z.B. ein externer Oszillator Takt von z.B. 16MHz mit einem
'Faktor multipliziert werden also z.B. 16MHz * 10 = 160MHz (max. 200MHz)
'INPUT Konfiguration
Ddrf = &B00000000 'alles INPUT bei PortF ; 'Zur Kompatibilität ist in der dat Datei DDRF = PORTF_DIR (also I/O Port Data Direction)
' Bit Klarnamen der PINnCTRL Register
Const Isc0 = 0 'Input/Sense Configuration 0
Const Isc1 = 1 'Input/Sense Configuration 1
Const Isc2 = 2 'Input/Sense Configuration 2
Const Opc0 = 3 'Output and Pull Configuration 0
Const Opc1 = 4 'Output and Pull Configuration 1
Const Opc2 = 5 'Output and Pull Configuration 2
Const Inven = 6 'Inverted I/O Enable
Const Srlen = 7 'Slew Rate Limit Enable
Portcfg_mpcmask = &B00000001 'nachfolgende Konfiguration eines Pins gilt hier nur für F.0
Portf_pin0ctrl = Bits(opc1 , Opc0 , Isc1) 'opc[0..2] = 011 --> Totempole Pull-up (on input)
'isc[0..2] = 010 --> FALLING Sense falling edge
Eingang Alias Pinf.0
Portf_int0mask = &B00000001 'Portf.0 soll als Interrupt dienen
Dim Int_portf_0_flag As Bit
'OUTPUT Konfiguration
Config Porte.0 = Output 'Porte.0 als Ausgang
Ausgang Alias Porte.0
'configure the INTERRUPT priority
'config priority=static|roundrobin,vector=application|boot ,HI=enabled|disabled, LO=enabled|disabled,ME=enabled|disabled
Config Priority = Static , Vector = Application , Lo = Enabled , Med = Enabled
On Portf_int0 Port_f_interrupt
Enable Portf_int0 , Lo
Enable Interrupts
Do
If Int_portf_0_flag = 1 Then
Int_portf_0_flag = 0
Set Ausgang 'Bei Interrupt soll der Ausgang 500ms auf 1 gesetzt werden
Waitms 500
Reset Ausgang
End If
Loop
Port_f_interrupt:
Set Int_portf_0_flag 'Im Interrupt Fall wird nur ein Flag gesetzt
Return
ظاهرا همه چی درست باید باشه... اما نیست!
حالا از دوستان کسی هست که به داد ما برسه؟
عرضم به حضورتون که...
من با وقفه سخت افزاری در بسکام برای Xmega مشکل دارم... هر جوره فعالش میآکنم، جواب نمیده...
تو چند تا سایت خارجی هم چرخیدم... یه بنده خدا بود به اسم MAK3 که شاخیه واسه خودش تو بسکام که چند تا سورس مربوط به استفاده از وقفه رو گذاشته بود که البته همونا رو هم استفاده کردم، باز جواب نگرفتم...
اینم نمونه کد جناب MAK3 :
$regfile = "xm128a1def.dat"
$crystal = 32000000 '32MHz
$hwstack = 64
$swstack = 40
$framesize = 40
$lib "xmega.lib" 'ab BASCOM 1.11.9.8
$external _xmegafix_clear
$external _xmegafix_rol_r1014
Config Osc = Enabled , 32mhzosc = Enabled 'internen 32MHz Oszillator konfigurieren
Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1 'internen 32MHz Oszillator konfigurieren, kein Prescaler
'Alternativen zu 32mhz:
'2MHZ --> interner 2MHz
'External --> externer Oszillator --> Es muss dann auch der "Range" angegeben werden z.B. 12MHZ_16MHZ
'Pll --> Phase Locked Loop (PLL) --> damit kann z.B. ein externer Oszillator Takt von z.B. 16MHz mit einem
'Faktor multipliziert werden also z.B. 16MHz * 10 = 160MHz (max. 200MHz)
'INPUT Konfiguration
Ddrf = &B00000000 'alles INPUT bei PortF ; 'Zur Kompatibilität ist in der dat Datei DDRF = PORTF_DIR (also I/O Port Data Direction)
' Bit Klarnamen der PINnCTRL Register
Const Isc0 = 0 'Input/Sense Configuration 0
Const Isc1 = 1 'Input/Sense Configuration 1
Const Isc2 = 2 'Input/Sense Configuration 2
Const Opc0 = 3 'Output and Pull Configuration 0
Const Opc1 = 4 'Output and Pull Configuration 1
Const Opc2 = 5 'Output and Pull Configuration 2
Const Inven = 6 'Inverted I/O Enable
Const Srlen = 7 'Slew Rate Limit Enable
Portcfg_mpcmask = &B00000001 'nachfolgende Konfiguration eines Pins gilt hier nur für F.0
Portf_pin0ctrl = Bits(opc1 , Opc0 , Isc1) 'opc[0..2] = 011 --> Totempole Pull-up (on input)
'isc[0..2] = 010 --> FALLING Sense falling edge
Eingang Alias Pinf.0
Portf_int0mask = &B00000001 'Portf.0 soll als Interrupt dienen
Dim Int_portf_0_flag As Bit
'OUTPUT Konfiguration
Config Porte.0 = Output 'Porte.0 als Ausgang
Ausgang Alias Porte.0
'configure the INTERRUPT priority
'config priority=static|roundrobin,vector=application|boot ,HI=enabled|disabled, LO=enabled|disabled,ME=enabled|disabled
Config Priority = Static , Vector = Application , Lo = Enabled , Med = Enabled
On Portf_int0 Port_f_interrupt
Enable Portf_int0 , Lo
Enable Interrupts
Do
If Int_portf_0_flag = 1 Then
Int_portf_0_flag = 0
Set Ausgang 'Bei Interrupt soll der Ausgang 500ms auf 1 gesetzt werden
Waitms 500
Reset Ausgang
End If
Loop
Port_f_interrupt:
Set Int_portf_0_flag 'Im Interrupt Fall wird nur ein Flag gesetzt
Return
ظاهرا همه چی درست باید باشه... اما نیست!
حالا از دوستان کسی هست که به داد ما برسه؟
دیدگاه