اطلاعیه

Collapse
No announcement yet.

SPi با LPC1768

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

    #16
    پاسخ : SPi با LPC1768

    جریان استفاده شدن از یک تابع داخل دیتاشیت تمام میکروهایی که spi دارن اومده.
    اما خلاصه اش (اونطوری که من فهمیدم) اینه که تو این ارتباط spi، تو دو طرف یک شیفت رجیستر (8 بیتی یا هر چند بیتی که استفاده میشه) در نظر بگیرید. حالا شما میخواین مثلا 0x11 رو انتقال بدین به سمت دیگه. اون طرف هم میخواد 0x87 رو بفرسته این طرف. (اعداد همینجوری مثال زدم). شما بیت به بیت (اول بیت پرارزش یا کم ارزش) می فرستید. یعنی 0x11 میره تو این شیفت رجیستر و اول بیت پرارزش یعنی 0 انتقال پیدا می کنه. بعد سمت دیگه (slave) هم همزمان با این طرف بیت پرارزش یعنی 1 رو می فرسته. حالا تو شیفت رجیستر سمت شما (master) یه بیت انتقال داده شده، واسه همین یه شیفت به سمت چپ خواهید داشت. بیت دریافتی هم میاد میره تو سمت راست، یعنی قسمت کم ارزش شیفت رجیستر.
    این روند تو 8 کلاک انجام میشه. یعنی هر 8 بیت شما میره سمت slave و 8 بیت سمت slave میاد تو شیفت رجیستر یا رجیستر SPDR سمت شما. واسه همینه که هم واسه ارسال و هم واسه دریافت از یک تابع استفاده میشه. اگر فقط مهم ارسال هستش که می تونید تابع رو دستکاری کنید تا چیزی برنگردونه یا خودتون مقدار برگشتی رو استفاده نکنید. واسه دریافت هم، یک بایت که تو سمت slave کاری نمی کنه، ارسال کنید. مثلا 0x00 یا هر چیز دیگه متناسب با کاربردتون.
    شما وقتی از spi استفاده می کنید به هر حال هم می فرستید و هم اطلاعات می گیرید.
    من خودم از این تابع استفاده می کنم. ببینید شاید به کارتون اومد.
    کد:
    uint8_t spi(uint8_t Data) {
    	LPC_SPI->SPDR = Data ;
    	while (!(LPC_SPI->SPSR & (1UL<<7))) ;
    	return LPC_SPI->SPDR ;
    }
    ---------
    .
    .
    ...........

    دیدگاه


      #17
      پاسخ : SPi با LPC1768

      اینم داشتم و جواب داد روی برد من. از طریق SPI یه عکس رو میاره روی ال سی دی
      http://www.iranmicro.ir/forum/attachment.php?attachmentid=7695&d=1400301257

      دیدگاه


        #18
        پاسخ : SPi با LPC1768

        نوشته اصلی توسط ajapyy
        جریان استفاده شدن از یک تابع داخل دیتاشیت تمام میکروهایی که spi دارن اومده.
        اما خلاصه اش (اونطوری که من فهمیدم) اینه که تو این ارتباط spi، تو دو طرف یک شیفت رجیستر (8 بیتی یا هر چند بیتی که استفاده میشه) در نظر بگیرید. حالا شما میخواین مثلا 0x11 رو انتقال بدین به سمت دیگه. اون طرف هم میخواد 0x87 رو بفرسته این طرف. (اعداد همینجوری مثال زدم). شما بیت به بیت (اول بیت پرارزش یا کم ارزش) می فرستید. یعنی 0x11 میره تو این شیفت رجیستر و اول بیت پرارزش یعنی 0 انتقال پیدا می کنه. بعد سمت دیگه (slave) هم همزمان با این طرف بیت پرارزش یعنی 1 رو می فرسته. حالا تو شیفت رجیستر سمت شما (master) یه بیت انتقال داده شده، واسه همین یه شیفت به سمت چپ خواهید داشت. بیت دریافتی هم میاد میره تو سمت راست، یعنی قسمت کم ارزش شیفت رجیستر.
        این روند تو 8 کلاک انجام میشه. یعنی هر 8 بیت شما میره سمت slave و 8 بیت سمت slave میاد تو شیفت رجیستر یا رجیستر SPDR سمت شما. واسه همینه که هم واسه ارسال و هم واسه دریافت از یک تابع استفاده میشه. اگر فقط مهم ارسال هستش که می تونید تابع رو دستکاری کنید تا چیزی برنگردونه یا خودتون مقدار برگشتی رو استفاده نکنید. واسه دریافت هم، یک بایت که تو سمت slave کاری نمی کنه، ارسال کنید. مثلا 0x00 یا هر چیز دیگه متناسب با کاربردتون.
        شما وقتی از spi استفاده می کنید به هر حال هم می فرستید و هم اطلاعات می گیرید.
        من خودم از این تابع استفاده می کنم. ببینید شاید به کارتون اومد.
        کد:
        uint8_t spi(uint8_t Data) {
        	LPC_SPI->SPDR = Data ;
        	while (!(LPC_SPI->SPSR & (1UL<<7))) ;
        	return LPC_SPI->SPDR ;
        }
        آخه من بازای هر بایت ارسالی که یک بایت نمی خوام دریافت کنم !!!
        من مثلا 5 بایت می فرستم و بعدش می خوام 3 بایت دریافت کنم
        تگه توی هر ارسال 5 بایت بخوام بخونم هم که اصلا دیتایی نیست که بخونم . اگه موقع دریافت هم بخوام بنویسم که اصلا ممکنه فرستنده را به اشتباه بندازه حتی اگه این دیتا 00 باشه .
        من می خوام با یک تابع هر چند بار که خواستم بخونم ( بدون نوشتن ) و برعکس !
        البته خودم اومدم دستکاری کردم ولی متاسفانه کار نمی کنه و نمی دونم اشکال از کجاست !

        دیدگاه


          #19
          پاسخ : SPi با LPC1768

          اینم داشتم و جواب داد روی برد من. از طریق SPI یه عکس رو میاره روی ال سی دی
          http://www.****.ir/forum/attachment.php?attachmentid=7695&d=1400301257
          آدرسی که گذاشتید از من ایمیل و پسورد می خواد !!!؟؟

          دیدگاه


            #20
            پاسخ : SPi با LPC1768

            نوشته اصلی توسط داریوش عباسی
            آخه من بازای هر بایت ارسالی که یک بایت نمی خوام دریافت کنم !!!
            من مثلا 5 بایت می فرستم و بعدش می خوام 3 بایت دریافت کنم
            تگه توی هر ارسال 5 بایت بخوام بخونم هم که اصلا دیتایی نیست که بخونم . اگه موقع دریافت هم بخوام بنویسم که اصلا ممکنه فرستنده را به اشتباه بندازه حتی اگه این دیتا 00 باشه .
            من می خوام با یک تابع هر چند بار که خواستم بخونم ( بدون نوشتن ) و برعکس !
            البته خودم اومدم دستکاری کردم ولی متاسفانه کار نمی کنه و نمی دونم اشکال از کجاست !
            فکر کنم درست متوجه نشدید.
            ببینید مثلا میخواهید از یک حافظه اطلاعات رو بخونی. اول باید آدرس رو براش بفرستی. خوب آدرس مثلا 24 بیتیه که میشه 3 سه بایت. این 3 بایت رو پشت سر هم می فرستی. بعد پشت سر هم 5 بار یا هر چند بار (بسته به تعداد بایت دریافتی) یک دیتای به درد نخور !! می فرستی. تو هر دستگاهی غیر ممکنه همه 256 حالت به عنوان دستور استفاده بشه.
            اگر هیچ دیتایی اماده نباشه تو سمت slave، تو بافر شما مقداری که برمی گرده 0xff هستش معمولا.
            ---------
            .
            .
            ...........

            دیدگاه


              #21
              پاسخ : SPi با LPC1768

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

              دیدگاه


                #22
                پاسخ : SPi با LPC1768

                درست شد
                همون کار رو کردم و موقع خوندن قبلش یک دیتای بیخودی نوشتم و همینطور موقع نوشتن آخرش یک چیزی الکی خوندم

                ممنون از همه

                دیدگاه


                  #23
                  پاسخ : SPi با LPC1768

                  سلام
                  دوستان کسی با حالت اینتراپت SPI میکروهای 1788 کار کرده و مثالی ازش داره؟؟؟؟
                  من دوتا میکروی 1788 رو بهم وصل کردم و هرکدوم دارن کار خودشون رو انجام میدن. هر وقت یکیشون یه فرمان بفرسته به میکروی دیگه اون باید دریافت کنه و... .
                  باید از وقفه استفاده کرد دیگه.درسته؟؟ یا راه های دیگه ای هم هست؟؟

                  دیدگاه


                    #24
                    پاسخ : SPi با LPC1768

                    اونطور که من میدونم (البته روی lpc1768) زمان استفاده از SPI ، وقفه زمانی هست که انتقال دیتا تموم بشه. یعنی مثل USART نیست که وقت اومدن دیتا وقفه بده.
                    ---------
                    .
                    .
                    ...........

                    دیدگاه


                      #25
                      پاسخ : SPi با LPC1768

                      نوشته اصلی توسط ajapyy
                      وقفه زمانی هست که انتقال دیتا تموم بشه.
                      منظورتون چیه؟؟!!
                      انتقال دیتا تموم بشه یعنی یه بایت دریافت شده دیگه.درسته؟؟
                      یعنی مثل وقفه ارسال UART ، وقتی ارسال تموم میشه یه پرچم رو یک میکنه؟؟

                      کلا راه حل نرم افزاریه دیگه ای واسه این کاری که میخام انجام بدم نیست جز وقفه؟؟

                      دیدگاه


                        #26
                        پاسخ : SPi با LPC1768

                        انتقال دیتا تموم بشه یعنی یه بایت دریافت شده دیگه.درسته؟؟
                        بله.
                        یعنی مثل وقفه ارسال UART ، وقتی ارسال تموم میشه یه پرچم رو یک میکنه؟؟
                        باز هم بله.
                        کلا راه حل نرم افزاریه دیگه ای واسه این کاری که میخام انجام بدم نیست جز وقفه؟؟
                        ارتباط SPI براساس یک کلاک هستش که یا توسط مستر به وجود میاد یا اسلیو. حالا اگز زمانی که مستر دیتا رو میفرسته، میکروی اسلیو نگیره یا دیر بگیره، دیتا از دست میره.
                        تو ارتباط USART همیشه خط گیرنده، 1 هستش و همین که ارتباط بخواد شروع بشه، این خط صفر میشه. این کار باعث بوجود اومدن وقفه میشه. اما توی SPI این طور نیست، یعنی ممکنه بیت اول یک باشه یا صفر. برای همین شما نمیتونی از طریق وقفه اون رو sense کنیش.
                        ---------
                        .
                        .
                        ...........

                        دیدگاه

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