اطلاعیه

Collapse
No announcement yet.

آموزش CMSIS برای میکروکنترلر LPC1768

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

    #16
    پاسخ : آموزش CMSIS برای میکروکنترلر LPC1768

    تابع FIO_ByteSetMask

    شکل کلی تابع :

    Void FIO_ByteSetMask (uint8_t portNum, uint8_t byteNum, uint8_t bitValue, uint8_t maskValue)

    برای اعمال ماسک بر روی پین های یک بایت از پورت ، از تابع فوق استفاده می شود.

    • این تابع بر تمامی بیت های باقیمانده که در bitValue غیر فعال هستند ، هیچ تاثیری ندارد

    • پس از اجرای این تابع ، مقدار صفر در در هر بیت دسترسی به پین های متناظر فیزیکی برای خواندن و نوشتن را فعال میکند ، زمانی که مقدار بیت 1 باشد یعنی ماسک شده باشد پین متناظر با نوشتن در آن بیت تغییر نمیکند همچنین در پین های خوانده شده به روز نخواهد شد.

    ورودی های تابع :

    portNum : شماره پورت مورد نظر

    byteNum : شماره یک بایت از پورت (مقدار مجاز : صفر تا 3)

    bitValue : بیت هایی را که به آنها ماسک اعمال میکنید ( به صورت 8 بیتی )

    maskValue : با یک کردن این مقدار ماسک اعمال و با صفر کردن ماسک از بیت های انتخابی برداشته میشود.

    خروجی های تابع:
    ندارد
    برای آنکه کاری امکان پذیر گردد دیدگان دیگری لازم است، دیدگانی نو

    دیدگاه


      #17
      پاسخ : آموزش CMSIS برای میکروکنترلر LPC1768

      تابع FIO_ByteSetValue

      شکل کلی تابع :

      Void FIO_ByteSetValue (uint8_t portNum, uint8_t byteNum, uint8_t bitValue)

      برای یک کردن پایه های یک بایت از پورت ، که خروجی هستند ، از این تابع استفاده می شود

      • این تابع برای بیت هایی که به عنوان ورودی تعریف شده اند ، هیچ تاثیری ندارد.

      • این تابع برای تمامی بیت های باقیمانده که در bitValue فعال نشده اند ، هیچ تاثیری ندارد.

      ورودی های تابع :

      portNum : شماره پورت مورد نظر

      byteNum : شماره یک بایت از پورت (مقدار مجاز : صفر تا 3)

      bitValue : بیت هایی را که به صورت خروجی تنظیم شده اند را یک می کند ( به صورت 8 بیتی )

      خروجی های تابع:
      ندارد
      برای آنکه کاری امکان پذیر گردد دیدگان دیگری لازم است، دیدگانی نو

      دیدگاه


        #18
        پاسخ : آموزش CMSIS برای میکروکنترلر LPC1768

        سلام،
        آقا hossein پس چرا درس رو ادامه ندادی؟
        حالا با اجازه ما اولین سوال رو بپرسیم:
        مد fast با مد normal چه فرقی داره؟
        چون من رجیسترهای LPC1768 رو که می دیدم، فقط FIO ها بودن که میشد باهاشون پورت ها رو تغییر داد. پس توابع GPIO با چی و جطور کار می کنند؟

        ..... ممنون به خاطر وقتی که گذاشتید ....

        دیدگاه


          #19
          پاسخ : آموزش CMSIS برای میکروکنترلر LPC1768

          نوشته اصلی توسط javadraya
          سلام،
          آقا hossein پس چرا درس رو ادامه ندادی؟
          حالا با اجازه ما اولین سوال رو بپرسیم:
          مد fast با مد normal چه فرقی داره؟
          چون من رجیسترهای LPC1768 رو که می دیدم، فقط FIO ها بودن که میشد باهاشون پورت ها رو تغییر داد. پس توابع GPIO با چی و جطور کار می کنند؟

          ..... ممنون به خاطر وقتی که گذاشتید ....
          پست شما رو می خواستم نقل قول کنم اشتباهی تشکر رو زدم
          با توجه به این قسمت از هدر lpc17xx_gpio.c تفاوتی ندارن
          کد:
          
          /**
           * @brief The same with GPIO_SetDir()
           */
          void FIO_SetDir(uint8_t portNum, uint32_t bitValue, uint8_t dir)
          {
          	GPIO_SetDir(portNum, bitValue, dir);
          }
          
          /**
           * @brief The same with GPIO_SetValue()
           */
          void FIO_SetValue(uint8_t portNum, uint32_t bitValue)
          {
          	GPIO_SetValue(portNum, bitValue);
          }
          
          /**
           * @brief The same with GPIO_ClearValue()
           */
          void FIO_ClearValue(uint8_t portNum, uint32_t bitValue)
          {
          	GPIO_ClearValue(portNum, bitValue);
          }
          
          /**
           * @brief The same with GPIO_ReadValue()
           */
          uint32_t FIO_ReadValue(uint8_t portNum)
          {
          	return (GPIO_ReadValue(portNum));
          }
          افتادگی آموز اگر طالب فیضی هرگز نخورد آب زمینی که بلند است

          دیدگاه


            #20
            پاسخ : آموزش CMSIS برای میکروکنترلر LPC1768


            با سلام خدمت دوستان عزیز
            در مورد اینکه ادامه ندادم : چون استقبالی نشد!!!! :redface:
            اگه استقبال بشه ادامه میدم

            برای آنکه کاری امکان پذیر گردد دیدگان دیگری لازم است، دیدگانی نو

            دیدگاه


              #21
              پاسخ : آموزش CMSIS برای میکروکنترلر LPC1768

              نوشته اصلی توسط hossein_tomari007
              با سلام خدمت دوستان عزیز
              در مورد اینکه ادامه ندادم : چون استقبالی نشد!!!! :redface:
              اگه استقبال بشه ادامه میدم

              نازنینا
              1-این که دوستان پست های جنبی و تشکر و ... نزدن یه نکته مثبت برای تاپیک شماست چرا که بعدا افرادی که تاپیک رو مطالعه می کنن بیشتر وقتشون صرف مطالعه خود آموزش میشه. اگر این مساله در خیلی از تاپیک ها هم رعایت شده بود صرفه جویی خوبی در وقت کاربرانی که قصد یادگیری دارن می شد.
              2-خوانندگان یه موضوع فقط مخاطبان فعلی نیستند و افرادی هم در آینده با موضوع آشنا میشن و استفاده می کنن. به همین خاطر خودتون رو مقید به استقبالی که موقع نوشتن میشه نکنید.
              3-از زحمتی که تا اینجا متقبل شدید ممنونیم و امیدواریم این تاپیک همچنان ادامه داشته باشه.

              افتادگی آموز اگر طالب فیضی هرگز نخورد آب زمینی که بلند است

              دیدگاه


                #22
                پاسخ : آموزش CMSIS برای میکروکنترلر LPC1768

                سلام
                آقا کلی استفاده بردیم، ممنون
                بازم ادامه بدین ...
                اگه بعد از آموزش یه مثال هم میزدین عالی میشد . :nice:

                دیدگاه


                  #23
                  پاسخ : آموزش CMSIS برای میکروکنترلر LPC1768

                  تابع FIO_ByteClearValue

                  شکل کلی تابع :
                  Void FIO_ByteClearValue (uint8_t portNum, uint8_t byteNum, uint8_t bitValue)

                  این تابع برای صفر کردن پایه های یک بایت از پورت ، که خروجی تعریف شده اند ، بکار می رود.

                  • این تابع برای بیت هایی که به عنوان ورودی تعریف شده اند ، هیچ تاثیری ندارد.

                  • این تابع برای تمامی بیت های باقیمانده که در bitValue فعال نشده اند ، هیچ تاثیری ندارد.

                  ورودی های تابع :

                  portNum : شماره پورت مورد نظر

                  byteNum : شماره یک بایت از پورت (مقدار مجاز : صفر تا 3)

                  bitValue : بیت هایی را که به صورت خروجی تنظیم شده اند را صفر میکند ( به صورت 8 بیتی )

                  خروجی های تابع:

                  ندارد
                  برای آنکه کاری امکان پذیر گردد دیدگان دیگری لازم است، دیدگانی نو

                  دیدگاه


                    #24
                    پاسخ : آموزش CMSIS برای میکروکنترلر LPC1768

                    تابع FIO_ByteReadValue

                    شکل کلی تابع :

                    uint8_t FIO_ByteReadValue (uint8_t portNum, uint8_t byteNum)

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

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

                    ورودی های تابع :

                    portNum : شماره پورت مورد نظر

                    byteNum : شماره یک بایت از پورت (مقدار مجاز : صفر تا 4)

                    خروجی های تابع:

                    uint8_t : وضعیت پین های ورودی به صورت 8 بیتی
                    برای آنکه کاری امکان پذیر گردد دیدگان دیگری لازم است، دیدگانی نو

                    دیدگاه


                      #25
                      پاسخ : آموزش CMSIS برای میکروکنترلر LPC1768

                      سلام اگه لطف کنید برای درج کدها از حالت قرار دادن کد استفاده کنید بسیار باعث خوانایی برنامه میشه
                      ممنون
                      کد:
                      نمونه
                      زندگی آن چه که زیسته ایم نیست ، بلکه آن چیزی است که از گذشته به خاطر داریم ...گابریل گارسیا مارکز

                      دیدگاه


                        #26
                        پاسخ : آموزش CMSIS برای میکروکنترلر LPC1768

                        سلام ، اگه میشه توضیحات را با مثال کاربردی بفرمایید ،

                        توی توضیحات ، دستورات خواندن از پورت ها ، برای یک پورت بود

                        چطوری یک پین را میتونیم بخونیم؟ یا وضعیت پین را توی یک شرط قرار بدیم؟
                        Reveng will surely come... Your hard time are ahead
                        // - - - - - - - - - -
                        برگه های کتاب به منزله بالهایی هستند که روح ما را به عالم نور و روشنایی پرواز میآ*دهند. فرانسوا ولتر
                        // - - - - - - - - - -
                        اگر برای هرچیزی به غیر از علاقه ی شدیدتان به الکترونیک تلاش کنید ، خیلی دور نخواهید رفت / خیلی هم خوب نخواهید شد.
                        // - - - - - - - - - -

                        دیدگاه


                          #27
                          پاسخ : آموزش CMSIS برای میکروکنترلر LPC1768

                          سلام
                          یه سوال پایه رو وقتی ورودی می کنیم چطور پول پش کنم؟

                          دیدگاه


                            #28
                            پاسخ : آموزش CMSIS برای میکروکنترلر LPC1768

                            نوشته اصلی توسط gbg
                            سلام
                            یه سوال پایه رو وقتی ورودی می کنیم چطور پول پش کنم؟

                            در میکرو های lpc یک پایه میتواند تا 4 کاربرد مختلف داشته باشد. مثلا پایه ی شماره X میکرو میتونه هم به صورت پین عمل کنه یا به صورت ورودی adc یا sda برای i2c0...

                            برای اینکه بتوانیم این پایه را برای هریک از این کاربردها آماده کنیم باید رجیستر PINSEL مربوطه را دستکاری کنیم.همچنین برای اینکه وضعیت PULLUP / PULLDOWN/OPEN DRAIN بودن پایه را مشخص کنیم باید با رجیسترهای PINMODE را دستکاری کنیم.

                            اما برای اینکه نخواهیم با رجیستر درگیر بشیم از CMSIS و لایبری PINSEL استفاده میکنیم.
                            در اولین قدم لازمه لایبری را به برنامه اضافه کنیم. پس داریم:
                            #include"lpc17xx_pinsel.h"
                            حالا برای استفاده از این لایبری بایستی یه متغیر جدید تعریف کنیم که کمی با متغیرایی که قبلا دیدیم فرق دارد. به این دلیل که در cmsis برای راحتی بیشتر برنامه نویس یه سری متغیر های جدید که همگی از نوع ساختار هستند ایجاد شده است .
                            پس مینویسیم:
                            PINSEL_CFG_Type VarName ;
                            PINSEL_CFG_Type pincfg
                            متغیری که معرفی کردیم دارای چندین پارامتراست که تک تک بهش اشاره میکنیم
                            pincfg.Portnum= 0/4
                            این قسمت باید شماره پورت پایه مورد نظر رو بنویسین که بین 0 تا 4 هست
                            pincfg.Pinnum=0/31
                            در این قسمت شماره پایه مورد نظر قرار میگیره که بین 0 تا 31 هست
                            pincfg.Funcnum= 0/4
                            در این قسمت شماره تابعی که میخواهید پین مورد نظر در اون حالت قرار بگیره وارد میشود

                            برای تمامی پینها gpio به عنوان شماره تابع صفر در نظر گرفته شده است.مثلا برای adc در مثال فرضی بالا عدد2 و برای sda شماره تابع 3 در نظر گرفته شده است.شما میتونید از روی دیتاشیت بفهمید که شماره تابع مورد نظرتون چیست.
                            pincfg.Pinmode = 0/4
                            در این قسمت میتونید pullup یا pulldown یا opendrain بودن پین را مشخص کنید
                            برای pullup شدن عدد 0
                            برای pulldown شدن عدد 3
                            برای opendrain شدن عدد2
                            را قرار می دهیم . برای عدد 1 حالتی وجود نداره .
                            پارامتر بعدی داریم :
                            pincfg.Opendrain= 0/1
                            در این حالت تنها اگر در قسمت pincfg.pinmode عدد 2 رو قرار دادین توی این پارامتر عدد 1 رو بزارین
                            در غیر این صورت عدد 0 بزارین.که نشون میده این پین از داخل pullup یا pulldown داره یا نه.


                            تو این مرحله با تابع زیر کارمون رو کامل میکنیم و تغییرات خواسته شده رو به پین مورد نظر اعمال میکنیم.
                            PINSEL_ConfigPin(&pincfg
                            Reveng will surely come... Your hard time are ahead
                            // - - - - - - - - - -
                            برگه های کتاب به منزله بالهایی هستند که روح ما را به عالم نور و روشنایی پرواز میآ*دهند. فرانسوا ولتر
                            // - - - - - - - - - -
                            اگر برای هرچیزی به غیر از علاقه ی شدیدتان به الکترونیک تلاش کنید ، خیلی دور نخواهید رفت / خیلی هم خوب نخواهید شد.
                            // - - - - - - - - - -

                            دیدگاه


                              #29
                              پاسخ : آموزش CMSIS برای میکروکنترلر LPC1768

                              برای خواندن یک پورد ، از دستور زیر در CMSIS 3 استفاده می کنیم
                              کد:
                              Value=GPIO_ReadValue(PORT);
                              اما فقط میتونم کل پورت را بصورت 32 و 16 و 8 بیتی بخونم و بعد بیت مورد نظرم را ازش جدا کنم /

                              حالا سوال اینه که من دستوری برای مشخص کردن وضعیت تنها یک پین از میکرو پیدا نمیکنم :angry:

                              اگه کسی میدونه راهنمایی کنه لطفا. :job:
                              Reveng will surely come... Your hard time are ahead
                              // - - - - - - - - - -
                              برگه های کتاب به منزله بالهایی هستند که روح ما را به عالم نور و روشنایی پرواز میآ*دهند. فرانسوا ولتر
                              // - - - - - - - - - -
                              اگر برای هرچیزی به غیر از علاقه ی شدیدتان به الکترونیک تلاش کنید ، خیلی دور نخواهید رفت / خیلی هم خوب نخواهید شد.
                              // - - - - - - - - - -

                              دیدگاه


                                #30
                                پاسخ : آموزش CMSIS برای میکروکنترلر LPC1768

                                من اینجوری استفاده می کنم

                                کد:
                                portvalue=GPIO_ReadValue(PORT);
                                if((portvalue & (1<<MyPIN))!=(1<<MyPIN)){
                                }

                                دیدگاه

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