اطلاعیه

Collapse
No announcement yet.

LPC_GPIO2

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

    LPC_GPIO2

    سلام
    این دستور LPC_GPIO2
    در کتابخانه CMSIS اینطوری معنی شده
    define LPC_GPIO2

    ((LPC_GPIO_TypeDef *)
    کسی میدونه یعنی چی

    #2
    پاسخ : LPC_GPIO2

    خط بعدیش رو هم بذار احتمالا انتهای خط برای پرهیز از طولانی نشدن \ گذاشته. تمامی خطوطی که آخرشون \ هست به خط بعدی وصل میشه.

    دیدگاه


      #3
      پاسخ : LPC_GPIO2

      01029 #define LPC_GPIO2 ((LPC_GPIO_TypeDef *) LPC_GPIO2_BASE )
      خط 1029 کتابخانه CMSIS اینو نوشته ولی نمیدونم چرا اینجا Paste میکنم برعکس lمیافته

      دیدگاه


        #4
        پاسخ : LPC_GPIO2


        #define LPC_GPIO2 ((LPC_GPIO_TypeDef*)LPC_GPIO2_BASE)


        این یعنی یک آدرسی به نام LPC_GPIO2_BASE داریم که اگر خواستی باهاش کار کنی فرض رو بر این قرار بده که دارای ساختاری مثل ساختار LPC_GPIO_TypeDef هست. یا به نوعی دیگه LPC_GPIO2 در اصل یک ساختاری مثل LPC_GPIO_TypeDef هست که در آدرس LPC_GPIO_BASE قرار داره.

        دیدگاه


          #5
          پاسخ : LPC_GPIO2

          :biggrin:
          ممنون آقا رضا
          مشکل اینجاست که نمیدونم LPC_GPIO_TypeDe یعنی چی

          دیدگاه


            #6
            پاسخ : LPC_GPIO2

            ببین آقا جون!
            اگر به آدرس رجیستر های GPIO در دیتا شیت مثلا LPC1768 دقت کنی میبینی که مثلا نحوه چیدمان رجیستر ها به این صورت هست:

            آدرس صفر: FIODIR
            آدرس 16: FIOMASK
            آدرس 20: FIOPIN
            آدرس 24: FIOSET
            آدرس 28: FIOCLR
            بنا براین میتونیم فرض کنیم که اگر آدرس شروع FIO0DIR برابر با 0x2009C000 باشه در حقیقت در این آدرس ساختاری مثل زیر وجود داره:


            struct
            {
            unsigned int FIODIR; // 0
            unsigned int reserved1[3];
            unsigned int FIOMASK;
            unsigned int FIOPIN;
            unsigned int FIOSET;
            unsigned int FIOCLR;
            }


            بنا براین برای دسترسی به این رجیستر ها میتونیم بگیم که یک ساختار عمومی داریم بنام LPC_GPIO_TypeDef که به این فرمی که قید کردم تعریف شده. حالا برای دسترسی به این رجیستر ها کافیه بگیم که رجیستر های GPIO پورت صفر از این ساختار تبعیت میکنه و در آدرس 0x2009C000 نشسته. این میشه دقیقا تفسیر اون خطی که شما خواستین.

            دیدگاه


              #7
              پاسخ : LPC_GPIO2

              نوشته اصلی توسط ieee7
              :biggrin:
              ممنون آقا رضا
              مشکل اینجاست که نمیدونم LPC_GPIO_TypeDe یعنی چی
              سلام دوست عزیز
              سوال خوبی پرسیدید چون فهمیدم منم روش مشکل دارم بر همین خاطر فایل help کتابخونه cmsis رو باز کردم این کلمه رو پیدا کردم
              این کلمه توی فایل lpc17xx.h تعریف شده خط 251 و چیزی غیر از اسم structure نیست اما مشکل این بود که توی فایل از دستور struct استفاده نشده
              و از typedef struct استفاده شده هر دو تای این دستورها برای تعریف structure بکار میرند اما تو اولی اسم اول میاریم و تو دومی اسم structure رو آخر میاریم
              البته خود struct هم در بعضی موارد بدون اسم تعریف میشه مثل وقتیکه توی union باشه
              بعد با استفاده از این اسم یک pointer با نام LPC_GPIO2 وارد structure کرده و به اعضای داخل sructure از روش خودش دسترسی پیدار میکنه (توی فایل lpc17xx.h خط 986 )
              اما روش تعریف pointer و پرانتزهای اطرفش هنوز گنگ برای من چون تا حالا اینطوریش ندیده بودم

              دیدگاه


                #8
                پاسخ : LPC_GPIO2

                این چیز مهمی نیست. برای اشاره کردن به جایی باید آدرس داشت. اما آدرس ها به خودی خود فقط عدد هستن. حالا میشه این عدد آدرس رو توی یک متغیر ریخت و یا بطور مطلق ازش استفاده کرد. شما موقعی که میگین:
                a = (int)b مگه منظورتون این نیست که میخوایین b رو به نوعی به عنوان یک int ببینین؟ حالا اینجا هم میگین به آدرس
                LPC_GPIO2_BASE به عنوان اشاره گری به یک ساختار از جنس LPC_GPIO_TypeDef نگاه کن. حالا هر کاری بشه با اشاره گری از این جنس انجام داد با این اشاره گر فرضی هم میشه.

                دیدگاه

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