اطلاعیه

Collapse
No announcement yet.

UPIO در Keil

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

    UPIO در Keil

    برای خاموش روشن کردن یکی از پایه های میکرو که :
    شماره پین 42
    اسمش هم UPIO2 i
    هست چی باید بنویسم ؟ توی دیتا شیتش که اسم پورت همین بود ولی توی Keil که چیزی به این نام نمیشناسه
    دستور زیر را باید چی بنویسم ؟
    کد:
    AT91F_PIO_CfgOutput(AT91C_BASE_PIOB, AT91C_PIO_PB1);
    پیوست » نوع میکرو AT91SAM7A2 هست .
    هدر فایلش را چی بنویسم >؟
    فایل های پیوست شده
    آن دم که مرا می زده بر خاک سپارید زیر کفنم خمره ای از باده گذارید
    تا در سفر دوزخ از این باده بنوشم
    آنلحظه که با دوزخیان کنم ملاقات یک خمره شراب ارغوان برم به سوغات
    هرقدر که در خاک ننوشیدم از این باده صافی ، بنشینم و با دوزخیان کنم تلافی

    #2
    پاسخ : UPIO در Keil

    یعنی رجیسترش تو هدر keil تعریف نشده؟
    keil من که که اصلا هدر برای SAM7A2 نداشت. SAM7A3 بود که توش UPIO نبود.
    دیتاشیت رو ندیدم. اما حتما رجیستر داره دیگه؟ باید با توجه به آدرس شروع peripheral و آفست تعریف شده تو بخش UPIO برای رجیسترها تو اون قسمت از حافظه بنویسی. (با پوینتر)
    البته من تاحالا به همچین موردی برنخوردم!

    نوشته اصلی توسط J0KER
    دستور زیر را باید چی بنویسم ؟
    کد:
    AT91F_PIO_CfgOutput(AT91C_BASE_PIOB, AT91C_PIO_PB1);
    پیوست » نوع میکرو AT91SAM7A2 هست .
    هدر فایلش را چی بنویسم >؟
    احتمالا تو این هدر : lib_AT91SAM7A2.h که باید تو اینترنت پیداش کنی.
    بجاش میتونی اینو بنویسی : (من اینو ترجیح میدم)

    کد:
    *AT91C_PIOB_OER=(1<<AT91C_PIO_PB1);
    https://www.linkedin.com/in/mohammadhosseini69

    http://zakhar.blog.ir

    دیدگاه


      #3
      پاسخ : UPIO در Keil

      ها ، نفهمیدم
      الان من با توجه به اون نقشه و اینکه احتمالا A3 شکل همین A2 هست ایشالا !! چطوری پین 42 را روشن یا خاموش کنم ؟
      PBکه یعنی پورت B ولی این که معلوم نیست چه پورتیه :((
      آن دم که مرا می زده بر خاک سپارید زیر کفنم خمره ای از باده گذارید
      تا در سفر دوزخ از این باده بنوشم
      آنلحظه که با دوزخیان کنم ملاقات یک خمره شراب ارغوان برم به سوغات
      هرقدر که در خاک ننوشیدم از این باده صافی ، بنشینم و با دوزخیان کنم تلافی

      دیدگاه


        #4
        پاسخ : UPIO در Keil

        نوشته اصلی توسط J0KER
        ها ، نفهمیدم
        الان من با توجه به اون نقشه و اینکه احتمالا A3 شکل همین A2 هست ایشالا !! چطوری پین 42 را روشن یا خاموش کنم ؟
        PBکه یعنی پورت B ولی این که معلوم نیست چه پورتیه :((
        سلام
        متاسفانه اصلا 7A3 مشابه 7A2 نیست . 7A3 بیشتر شبیه به 7X و 7S هست و دارای دو پورت A,B هست با آن خاصیت های خودشان اما در A2 اینطور نیست دارای دو پورت UPIO,MPIO هست که UPIO ها فقط به عنوان IO استفاده می شوند و MPIO ها با دستگاه های جانبی به صورت چندمنظوره می باشند. اما در مورد روشن و خاموش کردن این پین، در 7A3 پایه شماره 42 همان PA11 هست و به راحتی مثل همان 7X,7S می توانی آنها را روشن و خاموش کنی اما در 7A2 همان UPIO2 هست و با توجه به رجیستر ها که تقریبا مشابه 7X,7S هست اول باید در رجیستر UPIO_OER مقدار 0X4 را بریزی تا این پایه به عنوان خروجی فعال شود و سپس با ریختن مقدار 0X4 در رجیسترهای UPIO_SODR و UPIO_CODR می توانی آن را خاموش و روشن کنید. البته برای استفاده از این رجیسترها باید یک آدرس پایه را در ابتدای این نام ها استفاده کنی به طور مثال برای همان PA11 میکرو 7A3 برای دسترسی به PIO_OER از نام AT91C_BASE_PIOA->PIO_OER استفاده می کنیم البته این نام که در ابتدا هست در هدر ioat91sam7a3.h معلوم می باشد. من ioat91sam7a2.h را نداشتم که این را برای 7a2 بگم.

        دیدگاه


          #5
          پاسخ : UPIO در Keil

          تشکر .

          آیا جائی هست که بتونم این هدر فایل را گیر بیارم روی اینترنت ؟

          ______________________________________________

          و دو سوال جانبی :
          من این بورد را تهیه کردم ، ولی دیوایس شبکه اون به هیچ وجه فعال نمیشه ، حتی این آخریه دیگه گتگوری کابل شبکه را هم به کراس تغییر دادم ولی انگار نه انگار ، چیزی به ذهن شما میرسه که چرا فعال نیست ؟
          http://www.olimex.com/dev/sam7-ea2.html

          سوال دوم : اصلا این نمونه ic یعنی AT91SAM7A2 توی بازار ایران هست ؟ ( هدرفایلهاش که الان سرچ کردم که روی اینترنت نبود ، خودش را نمیدونم
          آن دم که مرا می زده بر خاک سپارید زیر کفنم خمره ای از باده گذارید
          تا در سفر دوزخ از این باده بنوشم
          آنلحظه که با دوزخیان کنم ملاقات یک خمره شراب ارغوان برم به سوغات
          هرقدر که در خاک ننوشیدم از این باده صافی ، بنشینم و با دوزخیان کنم تلافی

          دیدگاه


            #6
            پاسخ : UPIO در Keil

            نوشته اصلی توسط J0KER
            تشکر .

            آیا جائی هست که بتونم این هدر فایل را گیر بیارم روی اینترنت ؟
            من خودم سرچ کردم و همچین فایلی برای این گیر نیاوردم حتی تو مثال های IAR هم نبود اما برای 7A3 بود.
            اما تو لینکی که خودتون گذاشتید مثال LED را دانلود کردم داخل اون یه چیزایی بود فایل CSP.h را ببین آدرس های پایه (Peripheral Base Addresses) موجود بود برای مثال برای UPIO نام UPIO_BASE_ADDRESS این بود و داخل فایل CSP_PIO.h هم دستوراتی بود برای دسترسی به رجیسترها برای مثال برای قرار دادن مقدار 0X4 در UPIO_OER می توانی از دستور
            CSP_PIO_SET_OER(pio, val)
            استفاده کنی که val را همان 0x4 و pio را UPIO_BASE_ADDRESS قرار می دهید. و همچنین هم می توانی به صورت زیر هم استفاده کنی.
            UPIO_BASE_ADDRESS->OER=0x4
            البته این برنامه برای IAR نوشته شده است بهتر هست شما هم از IAR استفاده کنید.
            نوشته اصلی توسط J0KER
            و دو سوال جانبی :
            من این بورد را تهیه کردم ، ولی دیوایس شبکه اون به هیچ وجه فعال نمیشه ، حتی این آخریه دیگه گتگوری کابل شبکه را هم به کراس تغییر دادم ولی انگار نه انگار ، چیزی به ذهن شما میرسه که چرا فعال نیست ؟
            http://www.olimex.com/dev/sam7-ea2.html

            سوال دوم : اصلا این نمونه ic یعنی AT91SAM7A2 توی بازار ایران هست ؟ ( هدرفایلهاش که الان سرچ کردم که روی اینترنت نبود ، خودش را نمیدونم
            در مورد دیوایس شبکه نمی دونم چرا کار نمی کنه.
            همانطور که بر روی پشت برد می بینی برای سال 2006 هست . خود اتمل هم سری 7A2 را از محصولاتش حذف کرده و فکر کنم دیگر تولید نکنه داخل ایران هم فکر کنم اصلا گیرتان نیاید.

            دیدگاه


              #7
              پاسخ : UPIO در Keil

              من عاشق بحث های اصولی و پایه ای م. :rolleyes:
              آدرس دهی یکی از اون بحث هایی که جون میده واسه تجزیه تحلیل !!!

              خب با داشتن دیتاشیت چیکار میشه کرد؟

              اول از همه رجوع میشه به memory map
              این تصویر آدرس دهی 256مگابایت آخر AT91SAM7X رو نشون میده که مربوط به peripheralها میشه.

              آدرس شروع PIOB رو ببینید.
              0xFFFFF600

              حالا میریم به قسمت user interface پریفرال مورد نظر (PIOB)
              می خوایم رجیستر OER که برای فعال کردن خروجی یک پایه هست رو مقداردهی کنیم

              با توجه به تصویر، آدرس آفست رجیستر چنده؟
              0x10
              یعنی رجیستر 0x10 خونه بعد از آدزس base پریفرال قرار داره. بنابراین آدرس رجیستر میشه 0xFFFFF610

              خب حالا یه پوینتر تعریف میکنیم به این مکان از حافظه اشاره کنه

              unsigned int *pointer;
              pointer = (unsigned int *)0xFFFFF610;


              مقداردهی به رجیستر :

              *pointer = (1<<20);


              به همین سادگی. کار اون هدرها همینه. اما خیلی منظم و با استفاده از struct ها تمام آدرس دهی ها رو انجام دادن و ما فقط با نام رجیستر سریع به آدرس مورد نظر دسترسی پیدا میکنیم.
              اون دستورات رو میشه با این یه دستور خلاصه کرد :

              *((unsigned int *) 0xFFFFF610) = (1<<20);

              تو اسمبلی هم که نوشتن تو خونه های حافظه مثل آب خوردن ...

              یهو هوس کزدم بنویسم!! :mrgreen:
              https://www.linkedin.com/in/mohammadhosseini69

              http://zakhar.blog.ir

              دیدگاه


                #8
                پاسخ : UPIO در Keil

                دقیقا همین طور می باشد که آقای محمد حسینی گفتن برای دسترسی به هر رجیستر می توان به همین صورت آدرس آنرا پیدا کرد ولی برای میکرو ARM که این همه رجیستر دارد کار منطقی نیست که بییایم این کار را بکنیم بهتر هست از همون هدرهایی که کامپایلرها در دسترس ما گذاشتن استفاده کنیم. من یادم هست یکبار یک پروژه البته برای چندین سال پیش بود باید از 8051 استفاده می کردم بعد نیاز به EEPROM داشتم و با سرچ تو اینترنت دیدم یک سری به نام AT89S8253 وجود دارد که فکر کنم 2K حافظه EEPROM داشت و هیچ فرق دیگه ای با AT89S52 نداشت بعد هدر فایل آن در دسترسم نبود و اون ورژن KEIL هم اونو ساپورت نمی کرد برای دسترسی به رجیسترهای EEPROM از همین روش استفاده کردم و آدرس رجیسترها را از دیتاشیت در آوردم.

                دیدگاه

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