اطلاعیه

Collapse
No announcement yet.

EEPROM داخلی NVM ) XMEGA )

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

    EEPROM داخلی NVM ) XMEGA )

    با سلام اگر امکان دارد در مورد دستورات زیر که در کتابخانه eeprom_driver.h اتمل می باشد که چه کاری انجام می دهند(البته بجز دستورات push , pop)؟
    #define NVM_EXEC() asm("push r30" "\n\t" \
    "push r31" "\n\t" \
    "push r16" "\n\t" \
    "push r18" "\n\t" \
    "ldi r30, 0xCB" "\n\t" \
    "ldi r31, 0x01" "\n\t" \
    "ldi r16, 0xD8" "\n\t" \
    "ldi r18, 0x01" "\n\t" \
    "out 0x34, r16" "\n\t" \
    "st Z, r18" "\n\t" \
    "pop r18" "\n\t" \
    "pop r16" "\n\t" \
    "pop r31" "\n\t" \
    "pop r30" "\n\t" \
    )


    اگر از دستورات اسمبلی استفاده نمی کرد چه مشکلی داشت ؟
    دلیل وجود حروف و نشانه های "\n\t" روبروی دستورات اسمبلی چیست ؟ چرا میان " " قرار گرفته اند ؟

    #2
    پاسخ : EEPROM داخلی NVM ) XMEGA )

    در این ماکرو در آدرس 0x1CB که همان رجیستر NVM_CTRLA است عدد 1 نوشته می شود که به معنی یک کردن بیت CMDEX است. این کار از طریق رجیستر های R31:R30 یا همان رجیستر Z انجام می شود. با توجه به حفاظت شده بودن رجیستر NVM_CTRLA لازم است برای تغییر آن در رجیستر CCP به آدرس 0X34 ابتدا مقدار 0XD8 نوشته شود و در کمتر از 4 سیکل عمل نوشتن انجام شود. با توجه به نقش رجیستر Z در عملکرد NVM Controller و فرمان های مختلف آن و همچنین زمان بندی CCP، این روتین بصورت اسمبلی نوشته شده که در آن محتوای رجیستر Z هرچه که باشد، محفوظ می ماند. قرار دادن دستورات اسمبلی بین "" جزء روال IAR در زمان نوشتن اسمبلی بصورت inline است. نوشتن n\ به معنای خط جدید و t\ به معنای اضافه کردن یک tab است که می توان t\ را قرار نداد.
    اوژن: به معنای افکننده و شکست دهنده است
    دانایی، توانایی است-Knowledge is POWER
    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

    دیدگاه


      #3
      پاسخ : EEPROM داخلی NVM ) XMEGA )

      با درورد خدمت تمامی دوستان
      من برای نوشتن درون eeprom 32a4
      بصورت زیر عمل میکنم
      ابتدا با اجرای دو تابع

      کد:
      EEPROM_FlushBuffer();
         EEPROM_DisableMapping();
      و سپس متغیر هارو درون page ها ذخیره میکنم
      و نهایتنا با اجرای
      کد:
      EEPROM_EnableMapping();
      به روال اصلی برنامه بر میگردم
      چند سوال برام پیش اومد
      کار کلی این دوتابع چیست و در صورت غیر فعال کردن مپینگ برای رم و یا قسمت های دیگه مشکلی پیش میاد؟
      هرچه سعی کنیم لایه های نرم افزاری زیاد کرده و از سخت افزار دور کنیم مشکلات(باگ ها) کمتر خواهد شد(امنیت بیشتری خواهید داشت)
      بهترین جواب دهنده برای سوال شما، خود شما هستید البته بعد تلاش،پشتکار و مطالعه بیشتر
      میدونی مشکل ما کجاست؟سرمایه و مغز ها رو نمیتونیم یکجا جمع کنیم...

      تعدادی ماژول GPS GP5MX1513F1 با بالاتریت حساسیت -170db به قیمت خرید بفروش میرسد

      دیدگاه


        #4
        پاسخ : EEPROM داخلی NVM ) XMEGA )

        شما احتمالا از نمونه کد AVR1315 استفاده کرده اید که در آن با هر دو شیوه Memory-mapped و IO-mapped عمل کرده و به همین دلیل بین این دو وضعیت سوئیچ کرده است. اما در عمل نیازی به این تغییر وضعیت نیست و با توجه به اینکه وضعیت پیش فرض همان IO-mapped است و با توجه به وجود یک مشکل در شماره مورد استفاده شما برای مد memory-mapped، بهتر است از همان وضعیت پیش فرض استفاده کنید.
        اوژن: به معنای افکننده و شکست دهنده است
        دانایی، توانایی است-Knowledge is POWER
        برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
        وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
        قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
        اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
        ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

        دیدگاه


          #5
          پاسخ : EEPROM داخلی NVM ) XMEGA )

          در عمل
          در صورت عدم غیرفعال کردن Memory-mapped عمل نوشتن رو نیمیتونم انجام بدم
          ولی خواندن مشکلی ندارم
          هرچه سعی کنیم لایه های نرم افزاری زیاد کرده و از سخت افزار دور کنیم مشکلات(باگ ها) کمتر خواهد شد(امنیت بیشتری خواهید داشت)
          بهترین جواب دهنده برای سوال شما، خود شما هستید البته بعد تلاش،پشتکار و مطالعه بیشتر
          میدونی مشکل ما کجاست؟سرمایه و مغز ها رو نمیتونیم یکجا جمع کنیم...

          تعدادی ماژول GPS GP5MX1513F1 با بالاتریت حساسیت -170db به قیمت خرید بفروش میرسد

          دیدگاه


            #6
            پاسخ : EEPROM داخلی NVM ) XMEGA )

            1- سه متغییر بنام x,y,z تعریف کرده ایم ، چگونه میتوان طوری آنها را تعریف کرد (در کامپایلر IAR) که آدرس هر سه بصورت پشت سر هم ایجاد شود و در نهایت بتوان مقدار هر سه را باهم در NVM نوشت و سپس خواند ؟ ( بخاطر افزایش سرعت در نوشتن و خواندن NVM امکان نوشتن و خواندن در برخی موارد بصورت موردی مقدور نمی باشد ؟
            2- آیا در هنگام نوشتن در NVM نیازی به قرار گرفتن در مد SLEEP می باشد ؟

            دیدگاه


              #7
              پاسخ : EEPROM داخلی NVM ) XMEGA )

              پاسخ شما بسته به شماره میکروکنترلر مورد استفاده متفاوت است. در بعضی از شماره ها می توانید متغیر را بصورت eeprom__ تعریف کنید و وظیفه کار با NVM controller به عهده توابع داخلی کامپایلر وجود دارد. در بعضی از شماره هم نیاز به وارد شدن در مد Sleep است که تا نسخه 5.50 در IAR در کار با eeprom این امر لحاظ نشده است. بنابراین در ابتدا شماره مورد استفاده را مشخص کنید.
              اوژن: به معنای افکننده و شکست دهنده است
              دانایی، توانایی است-Knowledge is POWER
              برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
              وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
              قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
              اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
              ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

              دیدگاه


                #8
                پاسخ : EEPROM داخلی NVM ) XMEGA )

                """"ATXMEGA63A و IAR نسخه 6 """"،
                ضمنا با نصب نسخه 6 مشکلات زیر که در نسخه 5.2 بود برطرف شد :
                1- مشکلی را که در موضوع کامپایلر IAR پست 280 مطرح نمودم برطرف شده و خطا صادر نمی کند .
                2- اگر حین کار با IAR نسخه 5.2چندین TAB مورد نیاز را باز نموده اید و با این TABها برنامه را ذخیره و بسته اید و سپس فایل را بروی کامپیوتردیگری با همان نسخه 5.2 بازکنید مشاهده خواهید کرد که TABها بسته شده و مجبور خواهید بود دوباره انها را باز کنید که در نسخه 6 این مشکل برطرف شده است .

                دیدگاه


                  #9
                  پاسخ : EEPROM داخلی NVM ) XMEGA )

                  اگر یک بایت را در بافر قرار دهیم و بخواهیم از طریق روش atomic داده را ارسال کنیم آیا در حین عملیات erase کل page تحت تاثیر قرار خواهد گرفت و کل page پاک خواهدشد یا فقط همان بایت erase خواهد شد ؟

                  دیدگاه


                    #10
                    پاسخ : EEPROM داخلی NVM ) XMEGA )

                    در سری A3 وارد شدن به مد sleep لازم است.

                    نوشته اصلی توسط مهدی صفر جوکار
                    اگر یک بایت را در بافر قرار دهیم و بخواهیم از طریق روش atomic داده را ارسال کنیم آیا در حین عملیات erase کل page تحت تاثیر قرار خواهد گرفت و کل page پاک خواهدشد یا فقط همان بایت erase خواهد شد ؟
                    تنها نقاطی از page که اطلاعات آن در بافر تغییر داده شده erase و write خواهند شد.

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

                    دیدگاه


                      #11
                      پاسخ : EEPROM داخلی NVM ) XMEGA )

                      [quote]1- سه متغییر بنام x,y,z از نوع uint16_t تعریف کرده ایم ، چگونه میتوان طوری آنها را تعریف کرد (در کامپایلر IAR) که آدرس هر سه بصورت پشت سر هم ایجاد شود و در نهایت بتوان مقدار هر سه را باهم در NVM نوشت و سپس خواند ؟ ( بخاطر افزایش سرعت در نوشتن و خواندن NVM امکان نوشتن و خواندن در برخی موارد بصورت موردی مقدور نمی باشد ؟

                      لطفا اگر امکان دارد به موارد بالا پاسخ دهید .

                      دیدگاه


                        #12
                        پاسخ : EEPROM داخلی NVM ) XMEGA )

                        اگر منظور از نوشتن هر سه با هم، نوشتن در یک page است، چنین کاری میسر است و در این رابطه می توانید به توابع و روش های موجود در AVR1315 مراجعه کنید. البته در مورد خانواده A3 باید ماکرو اسمبلی () NVM_EXEC در برنامه تغییر داده شود و وارد شدن به مد sleep هم برای بعضی عملیات به آن اضافه شود. در صورتی که قصد انجام این کار را دارید و موفق نشدید تغییر لازم را انجام دهید، به من اعلام کنید تا سورس لازم را در اختیار شما قرار دهم.
                        اوژن: به معنای افکننده و شکست دهنده است
                        دانایی، توانایی است-Knowledge is POWER
                        برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                        وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                        قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                        اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                        ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                        دیدگاه


                          #13
                          پاسخ : EEPROM داخلی NVM ) XMEGA )

                          AVR1315 را مطالعه کردم و با استفاده از آن عمیلیات خواندن و نوشتن انجام پذیرفت اما می خواستم بجای آنکه مثلا سه متغییر a,b,c را تک تک در eeprom ذخیر کنم هر سه را در یک حلقه for فقط با اضافه کردن به ادرس اول مثل یک ارایه ذخیره کنم . با فرض اینکه a در ادرس 2000 از RAM و b در 2001 و c در 2002 باشد با دادن ادرس 2000 در یک حلقه for و اضافه کردن ادرس ، همه را بترتیب در page قرار داده و در eeprom ذخیره و یا همه را بخوانم.
                          البته در مورد خانواده A3 باید ماکرو اسمبلی () NVM_EXEC در برنامه تغییر داده شود و وارد شدن به مد sleep هم برای بعضی عملیات به آن اضافه شود. در صورتی که قصد انجام این کار را دارید و موفق نشدید تغییر لازم را انجام دهید، به من اعلام کنید تا سورس لازم را در اختیار شما قرار دهم.
                          اگر منظورتان مانند کاری که در AVR1008 در مورد 256A3 انجام گرفته باشد که به همان روش در مورد 64A3 عمل خواهم کرد اگر موفق نشدم حتما به اطلاعتان می رسانم و زحمت ارسال سورس را به عهده شما می گذارم.

                          دیدگاه


                            #14
                            پاسخ : EEPROM داخلی NVM ) XMEGA )

                            استاد گرامی جناب اقای کی نژاد
                            اگر امکان دارد به پست بالا (12) پاسخ دهید . با سپاس

                            دیدگاه


                              #15
                              پاسخ : EEPROM داخلی NVM ) XMEGA )

                              اگر به درستی متوجه منظور شما شده باشم، می توانید N متغیر را در یک آرایه تعریف کنید و با استفاده از یک حلقه for مقادیر آرایه را در eeprom بنویسید که اندیس (index) آرایه در حلقه for اضافه می شود.
                              اوژن: به معنای افکننده و شکست دهنده است
                              دانایی، توانایی است-Knowledge is POWER
                              برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                              وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                              قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                              اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                              ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                              دیدگاه

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