اطلاعیه

Collapse
No announcement yet.

کسی میتونه در مورد این تابع که در کدویژن استفاده شده کمی توضیح بده؟!

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

    کسی میتونه در مورد این تابع که در کدویژن استفاده شده کمی توضیح بده؟!

    سلام به همه دوستان
    من دارم اخیرا spi راه میندازم
    یک سورس کد دارم که از تابع
    unsigned char spi(unsigned char data)
    استفاده کرده و در توضیحات تابع آمده که :
    this function sends the byte data, simultaneously receiving a byte.
    خب تا اینجا واضحه اما در قسمت main برنامه از spi(NOP(; استفاده کرده. یعنی NOP رو به ورودی تابع داده.
    سوالم اینه که وقتی به ورودی این تابع NOP میدیم یعنی چی؟! اونوقت تابع spi چیزی ازسال نمیکنه و وفقط دریافت میکنه؟! یا NOP رو میفرسته؟! کد باینری NOP آیا 0b00000000 هستش؟!

    مرسی از راهنماییتون

    #2
    پاسخ : کسی میتونه در مورد این تابع که در کدویژن استفاده شده کمی توضیح بده؟!

    نوشته اصلی توسط AliTabaie
    سلام به همه دوستان
    من دارم اخیرا spi راه میندازم
    یک سورس کد دارم که از تابع
    unsigned char spi(unsigned char data)
    استفاده کرده و در توضیحات تابع آمده که :
    this function sends the byte data, simultaneously receiving a byte.
    خب تا اینجا واضحه اما در قسمت main برنامه از spi(NOP(; استفاده کرده. یعنی NOP رو به ورودی تابع داده.
    سوالم اینه که وقتی به ورودی این تابع NOP میدیم یعنی چی؟! اونوقت تابع spi چیزی ازسال نمیکنه و وفقط دریافت میکنه؟! یا NOP رو میفرسته؟! کد باینری NOP آیا 0b00000000 هستش؟!

    مرسی از راهنماییتون
    سلام :

    بله ... یعنی هیچی ارسال نشه . اما دقیقاً برعکس حدس زدید !

    با ارسال NOP ، در واقع ، کد باینری 0b11111111 رو ارسال میکنه . یعنی هیچ کاری صورت نگیره تا زمانیکه داده ای دریافت بشه .
    بر زنده باد گفتن این مردم خوش گریز

    دل بر مَنه که یک تنه در سنگرت کنند ...

    دیدگاه


      #3
      پاسخ : کسی میتونه در مورد این تابع که در کدویژن استفاده شده کمی توضیح بده؟!

      نوشته اصلی توسط وحیـد
      سلام :

      بله ... یعنی هیچی ارسال نشه.
      با ارسال NOP ، در واقع ، کد باینری 0b11111111 رو ارسال میکنه . یعنی هیچ کاری صورت نگیره تا زمانیکه داده ای دریافت بشه .
      آقا گیج شدم! اول گفتین هیچی ارسال نشه و بعد گفتین در واقع 0b11111111 ارسال بشه! الان شما بگین کدوم یکی از دو حالت پیش میاد:
      1- هیچی ارسال نمیشه و منتظر میمونیم تا داده ای دریافت بشه
      2- 0b11111111 ارسال میشه و بعد منتظر میمونیم تا داده ای دریافت بشه

      کدوم یکی از این دو تا رخ میده؟!

      دیدگاه


        #4
        پاسخ : کسی میتونه در مورد این تابع که در کدویژن استفاده شده کمی توضیح بده؟!

        ببین دوست عزیز SPI یک ارتباط سنکرون هست
        یعنی دیتا بده و همزمان دیتا بگیر.
        پس نمیشه چیزی ارسال نکرد و منتظر دیتا شد. اصلاً نمیتونی اینکار را انجام بدی.
        مثلاً میکرو شما master هست و از یک چیپ دیگه میخواهید یک بایت را بگیرید:
        چون میکروی شما master تعریف شده پس کلاک را میکروی شما میزنه؛ تا اینجا درست ،
        هنگامی که شما 8 بار روی پایه SCK پالس میسازی ، چیپ مقابل به ازاء هر پالس، از ورودی دیتای خودش میخونه؛ و هم زمان روی پایه خروجی دیتای خودش دیتای خودش را قرار میده
        پس ناچاری به خروجی میکروی خودت دیتا بدی که عموماً برای خواندن صرف ، 0xFF را قرار میدهند
        اون NOP هم احتمالاً یک جایی دیفاین شده، ببین مقدارش چقدره؟ احتمالاً همون 0xff هست

        موفق باشید
        امام علي (عليه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

        دیدگاه


          #5
          پاسخ : کسی میتونه در مورد این تابع که در کدویژن استفاده شده کمی توضیح بده؟!

          در ارتباط spi وقتی یک داده از طرف مستر ارسال بشه یک داده هم دریافت میکنه (یکی میدی یکی میگیری)
          حالا اگه مستر فقط بخواد یه بایت بگیره باید یه بایت الکی بفرسته!

          دیدگاه


            #6
            پاسخ : کسی میتونه در مورد این تابع که در کدویژن استفاده شده کمی توضیح بده؟!

            نوشته اصلی توسط AliTabaie
            آقا گیج شدم! اول گفتین هیچی ارسال نشه و بعد گفتین در واقع 0b11111111 ارسال بشه! الان شما بگین کدوم یکی از دو حالت پیش میاد:
            1- هیچی ارسال نمیشه و منتظر میمونیم تا داده ای دریافت بشه
            2- 0b11111111 ارسال میشه و بعد منتظر میمونیم تا داده ای دریافت بشه

            کدوم یکی از این دو تا رخ میده؟!
            چرا گیج بشی دوست من ...!


            همنطور که دوستان هم توضیحات بیشتر دادند ، در ارتباط SPI ، شما فقط زمانی میتونی دریافت داشته باشه که چیزی ارسال کرده باشی ... تا اینجا که مشکلی نیست !؟


            حالا در این تابعی که شما گذاشتید ، همونطور که Abbas Sarami عزیز هم اشاره کردند و به اعتقاد من هم باید همینگونه باشه ،آ‌ احتمالاٌ یه جایی از برنامه ،آ‌ NOP دیفاین شده و مقدارش هم 0Xff باید بوده باشه (معمولاً همینکار انجام میشه )

            برای اینکه فقط داده ای دریافت بشه ،آ‌ به قول دوستمون ، یه دیتای الکی فرستاده تا یک بایت از SLAVEآ‌ دریافت کنه .
            بر زنده باد گفتن این مردم خوش گریز

            دل بر مَنه که یک تنه در سنگرت کنند ...

            دیدگاه


              #7
              پاسخ : کسی میتونه در مورد این تابع که در کدویژن استفاده شده کمی توضیح بده؟!

              نوشته اصلی توسط mojalan
              در ارتباط spi وقتی یک داده از طرف مستر ارسال بشه یک داده هم دریافت میکنه (یکی میدی یکی میگیری)
              حالا اگه مستر فقط بخواد یه بایت بگیره باید یه بایت الکی بفرسته!
              وقتی کلاک میزنی Slave از پایه ورودی خودش که میشه MOSI میکرو مستر میخونه، پس بخواهی یا نخواهی اون یک مقدار از شما میگیره که عموماً برای خواندن از slave، مستر 0xff را میفرسته
              پس نتیجه اخلاقی میگیریم: NOP به احتمال زیاد 0xFF هست :mrgreen:

              موفق باشید
              امام علي (عليه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

              دیدگاه

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