اطلاعیه

Collapse
No announcement yet.

چند سوال در مورد ریجیستر ها

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

    چند سوال در مورد ریجیستر ها

    سلام
    من چند تا سوال برام پیش اومده نیاز مند راهنمایی هستم :nerd:
    دقیقا فرق ریجیستر piox_pdsr و piox_odsr چیه؟
    ---------------------
    پوشش وقفه چیه و ریجیستر piox_imr چیکار میکنه؟
    ----------------------------------------------
    peripheral چیه؟
    ---------------------------------------------
    اگه میشه یه مثال کامل واسه خوندن از یه کلید و مقدار دهی ریجیستر ها بزنید

    با تشکر

    #2
    پاسخ : چند سوال در مورد ریجیستر ها

    نوشته اصلی توسط علی علی پور ریکنده
    دقیقا فرق ریجیستر piox_pdsr و piox_odsr چیه؟
    سلام
    رجیستر PIO_PDSR برای خواندن مقدار پین های ورودی می باشد.
    رجیستر PIO_ODSR برای خواندن مقدار پین های خروجی می باشد در حالت خواندن. اگر توسط رجیستر PIO_OWER یک سری پین خروجی را فعال کنید آنگاه هر مقداری که در رجیستر PIO_ODSR بنویسید در آن پین های خروجی اعمال می شود.

    نوشته اصلی توسط علی علی پور ریکنده
    پوشش وقفه چیه و ریجیستر piox_imr چیکار میکنه؟
    رجیستر PIO_IMR رجیستر ماسک وقفه می باشد و نشان می دهد که کدام وقفه پین متناظر فعال است و کدام وقفه پین متناظر غیر فعال است.

    نوشته اصلی توسط علی علی پور ریکنده
    peripheral چیه؟
    peripheral یا دستگاه های جانبی، به واحد های داخل میکرو مثل PIO,SPI,USART,ADC,... گفته می شود.

    برای مثال ورودی و خروجی به تایپیک زیر برو آنجا یک مثال گذاشتم.
    http://www.eca.ir/forum2/index.php?topic=49136.0

    دیدگاه


      #3
      پاسخ : چند سوال در مورد ریجیستر ها

      ممنون
      راستی میتونین یه مقدار در مورد پین های متناظر و پوشش وقفه و نحوه تعیین روتین برای هر وقفه خارجی و ... یکم بیبشتر توضیح بدین
      با تشکر

      دیدگاه


        #4
        پاسخ : چند سوال در مورد ریجیستر ها

        در ضمن اون تاپیک هم رفتم ولی مثال مال کمپایلر جار بود
        من فقط یه مثال واسه تعریف پین به عنوان ورودی میخوام چون شنیدم در این حالت باید به یه ریجیستر دیگه به نام PMC هم مقدار بدیم
        ایا مثال زیر درسته؟
        کد:
        *AT91C_PIOA_PER = 0x1
        *AT91C_PMC_PCER = 0x1
        فقط توجه کنید که منظور من فقط پیکر بندی پین مورد نظر هست
        -------------------------------------------------
        یه سوال دیگه! کار کردن با ریجیستر ها بهتر و راحتر هست پس چرا اومدن کتاب خانه LIB_AT91SAM7.... را نوشتند؟ ایا کاربرد دیگه ای داره؟

        دیدگاه


          #5
          پاسخ : چند سوال در مورد ریجیستر ها

          نوشته اصلی توسط علی علی پور ریکنده
          ممنون
          راستی میتونین یه مقدار در مورد پین های متناظر و پوشش وقفه و نحوه تعیین روتین برای هر وقفه خارجی و ... یکم بیبشتر توضیح بدین
          با تشکر
          منظورم از پین های متناظر یعنی اینکه مثلا در سری 7S یک پورت 32 پینی داریم خوب این رجیسترهای PIO هم 32 بیتی می باشد حالا هر پینی را که بخواهیم خروجی ، ورودی، فعال کردن وقفه،... کافی است در آن بیت آن رجیستر مقدار 1 را قرار دهیم. و همچنین مثلا وقتی می خواهیم پین PA0 که به عنوان ورودی تعریف شده را مقدارش را بخوانیم کافی مقدار بیت صفرام رجیستر PIO_PDSR را بخوانیم ...
          ببین یک رجیستر برای فعال کردن وقفه و یک رجیستر برای غیرفعال کردن وقفه وجود دارد که این رجیسترها نوشتنی هستند. رجیستر ماسک وقفه که فقط خواندنی است نشان می دهد که کدام وقفه فعال است و کدام غیر فعال است.
          در مورد استفاده از وقفه یکم دردسر دارد. من با IAR کار می کنم که باید برای فعال کردن وقفه یک سری فایل به آن اضافه کرد برای مثال وقفه هم می توانی تایپیک زیر را یک نگاهی بکنی. اون کتابی که قبلا گفته بودم بهتون را به نظرم اگر بگیرید و از اون شروع به کار کنید همه این قسمت ها رو توضیح داده مثال هم به مقدار کافی دارد.
          http://www.eca.ir/forum2/index.php?topic=48888.0

          دیدگاه


            #6
            پاسخ : پاسخ : چند سوال در مورد ریجیستر ها

            نوشته اصلی توسط علی علی پور ریکنده
            در ضمن اون تاپیک هم رفتم ولی مثال مال کمپایلر جار بود
            من فقط یه مثال واسه تعریف پین به عنوان ورودی میخوام چون شنیدم در این حالت باید به یه ریجیستر دیگه به نام PMC هم مقدار بدیم
            ایا مثال زیر درسته؟
            کد:
            *AT91C_PIOA_PER = 0x1
            *AT91C_PMC_PCER = 0x1
            فقط توجه کنید که منظور من فقط پیکر بندی پین مورد نظر هست
            -------------------------------------------------
            یه سوال دیگه! کار کردن با ریجیستر ها بهتر و راحتر هست پس چرا اومدن کتاب خانه LIB_AT91SAM7.... را نوشتند؟ ایا کاربرد دیگه ای داره؟
            آره اون مثال رو من با IAR نوشتم و فایل C و bin را آنجا گذاشتم اما همون فایل C را هم می توانی با KEIL کامپایل کنی فرقی ندارد.
            واحد PMC واحد مدیریت توان می باشد. شما از هر واحدی که بخواهید در میکرو استفاده کنید باید کلاک آنرا توسط PMC فعال کنید.
            حتی می شود توسط این واحد کلاک خود میکرو را هم غیر فعال کرد. در برنامه زیر PA0 را به عنوان ورودی تعریف کرده ام.

            #include <Atmel/ioat91sam7s64.h>
            void main ()
            {
            //-----------------------------------------------------
            AT91C_BASE_PMC->PMC_PCER = ( 1<<AT91C_ID_PIOA ); // AT91C_ID_PIOA=2
            //------------------------------------------------------
            AT91C_BASE_PIOA->PIO_PER=(1<<0);
            AT91C_BASE_PIOA->PIO_ODR=(1<<0);
            while(1)
            {

            }
            }
            من خودمم مستقیم از رجیستر ها استفاده می کنم چون راحتتر است. اگر آن کتابخانه هم ببینی چیز خاصی ندارد هر تابع مقدار ورودی که میگیرد را در رجیستر مربوطه قرار می دهد و ....

            دیدگاه

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