اطلاعیه

Collapse
No announcement yet.

دلیل ریست شدن میکرو (رجیستر RST_Status)

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

    دلیل ریست شدن میکرو (رجیستر RST_Status)

    با سلام.
    با توجه به Manual میکرو های سری XMEGA، ذکر شده که مثلا اگر میکرو توسط Software Reset، ریست شود، رجیستر RST_status در بیت پنجم مقدارش برابر 1 می شود. یا با ریست شدن در حالت Power_On، رجیستر RST_Status در بیت 0 مقدارش set می شود. اما من کد زیر را نوشتم و بعد از Software_Reset کردن میکرو، رجیستر های مذکور را می خوانم، اما در تمام حالات مقدار 0 برگشت داده می شود. لطفا راهنمایی کنید ایراد کار کجا است.
    با تشکر


    کد:
    $regfile = "xm128a3udef.dat"
    $crystal = 50000000
    
    $hwstack = 100
    $swstack = 100
    $framesize = 100
    
    
    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ System OSC & Clock ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    '>>>>>> WORKS <<<<<<<
    'Try Overclocking for Logic Analyzer Sampling.
    'Xmega Max Spec is 32 MHz.
    'Incrementally Incr PLL using 2 MHz Int Osc.
    'PLL = x16 = 32 MHz = Baseline, in spec.
    
    'Set up the Xmega clock.
    'Run on Internal 2 MHz Osc, PLL= x25, Clk = 50 MHz.
    'This MANUALLY turns on the Xmega PLL.
    'Xmega runs at 2MHz on power up.
    
    
    Osc_ctrl = 15                        'All Osc ON, PLL Off
    Clk_psctrl = 0                       'No PreScaler in use
    Osc_xoscctrl = 195                     '12-16MHz, 256 Clks
    Osc_pllctrl = 25                      'PLL: Int 2 MHz Osc x 25 !!!
    Waitms 3
    Osc_ctrl = 31                        'PLL ON, All Osc Sources On
    Waitms 3
    Cpu_ccp = 216                        'Config Change Protection
    Clk_ctrl = 4                        '4=Use PLL as Clock Source / 1=32MHz internal
    
    
    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ System OSC & Clock ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
    
    
    '******************************************************************************
    '************************ Config Interrupts & Includes ************************
    '******************************************************************************
    Config Submode = New
    Config Priority = Static , Vector = Application , Lo = Enabled    'config interrupts
    Enable Interrupts
    '******************************************************************************
    '************************ Config Interrupts & Includes ************************
    '******************************************************************************
    
    Sw1 Alias Pinf.3
    Sw2 Alias Pinf.4
    
    
    Config Sw1 = Input
    Config Sw2 = Input
    
    Dim Cou1 As Byte
    Dim Rr As Byte
    
    
    Config Com1 = 9600 , Mode = 0 , Parity = None , Stopbits = 1 , Databits = 8
    Open "Com1:" For Binary As #1                'Must Open Com1 Before Printing'
    Print #1 , "Hello"
    Print #1 , "Hello"
    Print #1 , "Hello"
    
    Do
      If Sw1 = 1 Then
       Waitms 30
       If Sw1 = 1 Then
         Waitms 200
         Gosub Sww1
       End If
      End If
    
      If Sw2 = 1 Then
       Waitms 30
       If Sw2 = 1 Then
         Waitms 200
         Gosub Sww2
       End If
      End If
    
    
      If Cou1 > 254 Then
       Cpu_ccp = 216
       Rst_ctrl.0 = 1
      Else
       Incr Cou1
      End If
    
      Waitms 40
    
    Loop
    
    
    
    Close #1
    
    End
    
    
    
    Sww1:
      Print #1 , "RST_Status.5= " ; Rst_status.5        'Software Reset'
      Print #1 , "RST_Status.0= " ; Rst_status.0        'Power-On Reset'
    Return
    End
    
    
    Sww2:
      Rst_status.5 = 0
      Print #1 , "RST_Status.5 return to 0 manually"
    Return
    End

    #2
    پاسخ : دلیل ریست شدن میکرو (رجیستر RST_Status)

    در کد شما اطلاعات از طریق usart ارسال می شود که مشخص نیست سمت مقابل دیتا را با چه فرمتی دریافت می کند. اما اگر قرار باشد اطلاعات بصورت ASCII ارسال شود، نحوه استفاده شما از دستور PRINT صحیح نیست. ضمنا برای پاک کردن Flag باید در محل آن یک بنویسید که در کد شما صفر نوشته شده است.
    اوژن: به معنای افکننده و شکست دهنده است
    دانایی، توانایی است-Knowledge is POWER
    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

    دیدگاه


      #3
      پاسخ : پاسخ : دلیل ریست شدن میکرو (رجیستر RST_Status)

      نوشته اصلی توسط طراح
      در کد شما اطلاعات از طریق usart ارسال می شود که مشخص نیست سمت مقابل دیتا را با چه فرمتی دریافت می کند. اما اگر قرار باشد اطلاعات بصورت ASCII ارسال شود، نحوه استفاده شما از دستور PRINT صحیح نیست. ضمنا برای پاک کردن Flag باید در محل آن یک بنویسید که در کد شما صفر نوشته شده است.
      ضمن تشکر، اول آن که منظور شما از ارسال اطلاعات ببه صورت ASCII به چه روشی است؟ و روش صحیح دستور پرینت به چه صورت است؟

      و دوم آن که در manual ذکر شده که "This flag is set if a software reset occurs. The flag will be cleared by a power-on reset or by writing a one to the bit
      location" در اینجا SET به معنای 0 است یا 1؟؟؟
      با تشکر

      دیدگاه


        #4
        پاسخ : دلیل ریست شدن میکرو (رجیستر RST_Status)

        برای نمایش کارکترها روی صفحه LCD و Hyper Terminal و مانند آن کد ASCII عدد مورد نیاز است. در جمله نقل قول شده set به معنای یک است. اما برای صفر کردن flag باید در محل آن یک بنویسید تا مقدار آن صفر شود (writing a one to the bit).
        اوژن: به معنای افکننده و شکست دهنده است
        دانایی، توانایی است-Knowledge is POWER
        برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
        وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
        قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
        اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
        ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

        دیدگاه


          #5
          پاسخ : دلیل ریست شدن میکرو (رجیستر RST_Status)

          با سلام و تشکر.
          جناب طراح خیلی عذر می خوام که اینقدر سوال می پرسم. می خواهم مسئله کاملا برایم جا بافتد.
          من دقیقا اطلاعات را به پورت سریال کامپوتر ارسال می کنم و در هایپر ترمینال می خوانمشون. Help خود بسکام را هم مطالعه کردم ولی متوجه منضور شما از ارسال اطلاعات به صورت ASCII نمی شوم. آیا منظور شما دستور Printbin() است؟ چرا باید اطلاعات به صورت ASCII ارسال شود؟ مزیت آن چیست و عیب روش فعلی چیست؟

          نهایتا در مورد رجیستر RST_STATUS، هر کاری کردم موفق نشدم درستش کنم. مشکل اینه که چه قبل از سافت ریست و چه بعد آن مقدار رجیستر RST_STATUS.5 برای من مقدار 0 را بر می گرداند. آیا روش خواندن من برای رجیستر ها درست است؟؟ همچنین سایر بیت های رجیستر فوق هم همیشه مقدار 0 را برایم برمی گردانند (مثلا بیت 0 که مربوط به Power-On Reset می باشد و تاجایی که می دانم وقتی میکرو روشن می شود باید مقدارش set شود).
          من کد برنامه را طبق دستور شما تغییر دادم ولی مشکل همچنان پا برجاست.
          با تشکر.

          [code=vb]$regfile = "xm128a3udef.dat"
          $crystal = 50000000

          $hwstack = 100
          $swstack = 100
          $framesize = 100


          '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
          '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ System OSC & Clock ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
          '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
          '>>>>>> WORKS <<<<<<<
          'Try Overclocking for Logic Analyzer Sampling.
          'Xmega Max Spec is 32 MHz.
          'Incrementally Incr PLL using 2 MHz Int Osc.
          'PLL = x16 = 32 MHz = Baseline, in spec.

          'Set up the Xmega clock.
          'Run on Internal 2 MHz Osc, PLL= x25, Clk = 50 MHz.
          'This MANUALLY turns on the Xmega PLL.
          'Xmega runs at 2MHz on power up.


          Osc_ctrl = 15 'All Osc ON, PLL Off
          Clk_psctrl = 0 'No PreScaler in use
          Osc_xoscctrl = 195 '12-16MHz, 256 Clks
          Osc_pllctrl = 25 'PLL: Int 2 MHz Osc x 25 !!!
          Waitms 3
          Osc_ctrl = 31 'PLL ON, All Osc Sources On
          Waitms 3
          Cpu_ccp = 216 'Config Change Protection
          Clk_ctrl = 4 '4=Use PLL as Clock Source / 1=32MHz internal


          '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
          '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ System OSC & Clock ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
          '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^



          '******************************************** **********************************
          '************************ Config Interrupts & Includes ************************
          '******************************************** **********************************
          Config Submode = New
          Config Priority = Static , Vector = Application , Lo = Enabled 'config interrupts
          Enable Interrupts
          '******************************************** **********************************
          '************************ Config Interrupts & Includes ************************
          '******************************************** **********************************

          Sw1 Alias Pinf.3
          Sw2 Alias Pinf.4


          Config Sw1 = Input
          Config Sw2 = Input

          Dim Cou1 As Byte
          Dim Rr As Byte

          Config Com1 = 9600 , Mode = 0 , Parity = None , Stopbits = 1 , Databits = 8
          Open "Com1:" For Binary As #1 'Must Open Com1 Before Printing'
          Print #1 , "Hello"
          Print #1 , "Hello"
          Print #1 , "Hello"

          Do
          If Sw1 = 1 Then
          Waitms 30
          If Sw1 = 1 Then
          Waitms 200
          Gosub Sww1
          End If
          End If

          If Sw2 = 1 Then
          Waitms 30
          If Sw2 = 1 Then
          Waitms 200
          Gosub Sww2
          End If
          End If


          If Cou1 > 254 Then
          Cpu_ccp = 216
          Rst_ctrl.0 = 1
          Else
          Incr Cou1
          End If

          Waitms 40

          Loop



          Close #1

          End



          Sww1:
          Print #1 , "RST_Status.5= " ; Rst_status.5 'Software Reset'
          Print #1 , "RST_Status.0= " ; Rst_status.0 'Power-On Reset'
          Return
          End


          Sww2:
          Rst_status.5 = 1
          Print #1 , "RST_Status.5 return to 1 manually"
          Return
          End[/code]

          دیدگاه


            #6
            پاسخ : دلیل ریست شدن میکرو (رجیستر RST_Status)

            برای نمایش 0 در Hyper Terminal باید کد ASCII آن که معادل 48 است برای PC ارسال شود و برای نمایش 1 هم این مقدار باید 49 باشد. برای بررسی اینکه آیا توسط دستور PRINT و مثلا Rst_status.0 آیا کد صحیح ارسال می شود یا نه یک روش این است که یکی از بیت های رجیستر دیگری که مطمئن هستید مقدار آن 1 است به همین روش برای PC ارسال کنید و ببینید که آیا 1 نمایش داده می شود؟
            اوژن: به معنای افکننده و شکست دهنده است
            دانایی، توانایی است-Knowledge is POWER
            برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
            وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
            قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
            اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
            ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

            دیدگاه

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