اطلاعیه

Collapse
No announcement yet.

وقفه سخت افزاری با Xmega128 در بسکام

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    وقفه سخت افزاری با Xmega128 در بسکام

    سلام... یه دور کل انجمن 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


    ظاهرا همه چی درست باید باشه... اما نیست!
    حالا از دوستان کسی هست که به داد ما برسه؟

    #2
    پاسخ : وقفه سخت افزاری با Xmega128 در بسکام

    سلام

    من xmega رو با بسکام تجربه نکردم ولی نسخه اخرش رو که دارم اگه برید تو sampel های خودش داخل پوشه xmega انواع نمونه کد برای راه اندازی بخش های مختلفش وجود داره مثل:XMEGA_external_interrupt
    که به نظرم جزء بهترین منابع می تونه باشه و همچنین help خود نرم افزار.
    دکتر شریعتی:

    زنده بودن را به بیداری بگذرانیم که سالها به اجبار خواهیم خفت.

    دیدگاه


      #3
      پاسخ : وقفه سخت افزاری با Xmega128 در بسکام

      sampleها رو شخم زدم...

      همین تیکه کدی هم که گذاشتم، شبیه همون sample هستش...

      نمیدونم کجای کارم ایراد داره... اونچه که مسلمه ایراد از منه... نه Xmega :mrgreen:

      حالا فوت کاسگری، چیزی داره...!!؟؟

      دیدگاه


        #4
        پاسخ : وقفه سخت افزاری با Xmega128 در بسکام

        این برنامه بر حسب ظاهر قرار است با وقفه ناشی از لبه پائین رونده PF0، پالسی با عرض 500 میلی ثانیه روی خروجی PE0 ایجاد کند. آیا منظور شما همین عملکرد بوده است؟
        اوژن: به معنای افکننده و شکست دهنده است
        دانایی، توانایی است-Knowledge is POWER
        برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
        وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
        قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
        اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
        ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

        دیدگاه


          #5
          پاسخ : وقفه سخت افزاری با Xmega128 در بسکام

          درسته... البته این Sample Code بوده...

          مشکل رو متوجه شدم...
          هر بار که وقفه رخ میداد، برای اینکه با وقفهآ‌های دیگه تداخل ایجاد نکنه، ابتدای برچسب Disable Interrupt و در انتها Enable Interrupts میگذاشتم که این باعث میآ‌شد که کلیه تنظیمات مربوط به وقفه، از بین بره...
          منطورم ایناست:

          Portc_pin0ctrl = &B00_011_010
          Portc_int0mask = &B0000_0001
          Portc_intctrl = &B0000_00_01

          حالا یه سوال دیگه.... اشکال کارم چیه که این تنظیمات به هم میخوره؟
          عملا وقفه فقط یک بار رخ میده!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! دفعات بعد، وقفه ندارم!
          داخل پرانتز:
          نمیتونم وقفهآ‌ها رو درست اولویت بندی کنم... برای همین مجبورم وقفهآ‌ها رو فعال و غیر فعال کنم... :sad:

          دیدگاه


            #6
            پاسخ : وقفه سخت افزاری با Xmega128 در بسکام

            دوست عزیز با این اطلاعات که نمیشه کمک کرد.فایل برنام مورد نظرتون رو قرار بدید تا ببینیم چیکار کردید.
            دکتر شریعتی:

            زنده بودن را به بیداری بگذرانیم که سالها به اجبار خواهیم خفت.

            دیدگاه

            لطفا صبر کنید...
            X