پاسخ : SPi با LPC1768
جریان استفاده شدن از یک تابع داخل دیتاشیت تمام میکروهایی که spi دارن اومده.
اما خلاصه اش (اونطوری که من فهمیدم) اینه که تو این ارتباط spi، تو دو طرف یک شیفت رجیستر (8 بیتی یا هر چند بیتی که استفاده میشه) در نظر بگیرید. حالا شما میخواین مثلا 0x11 رو انتقال بدین به سمت دیگه. اون طرف هم میخواد 0x87 رو بفرسته این طرف. (اعداد همینجوری مثال زدم). شما بیت به بیت (اول بیت پرارزش یا کم ارزش) می فرستید. یعنی 0x11 میره تو این شیفت رجیستر و اول بیت پرارزش یعنی 0 انتقال پیدا می کنه. بعد سمت دیگه (slave) هم همزمان با این طرف بیت پرارزش یعنی 1 رو می فرسته. حالا تو شیفت رجیستر سمت شما (master) یه بیت انتقال داده شده، واسه همین یه شیفت به سمت چپ خواهید داشت. بیت دریافتی هم میاد میره تو سمت راست، یعنی قسمت کم ارزش شیفت رجیستر.
این روند تو 8 کلاک انجام میشه. یعنی هر 8 بیت شما میره سمت slave و 8 بیت سمت slave میاد تو شیفت رجیستر یا رجیستر SPDR سمت شما. واسه همینه که هم واسه ارسال و هم واسه دریافت از یک تابع استفاده میشه. اگر فقط مهم ارسال هستش که می تونید تابع رو دستکاری کنید تا چیزی برنگردونه یا خودتون مقدار برگشتی رو استفاده نکنید. واسه دریافت هم، یک بایت که تو سمت slave کاری نمی کنه، ارسال کنید. مثلا 0x00 یا هر چیز دیگه متناسب با کاربردتون.
شما وقتی از spi استفاده می کنید به هر حال هم می فرستید و هم اطلاعات می گیرید.
من خودم از این تابع استفاده می کنم. ببینید شاید به کارتون اومد.
جریان استفاده شدن از یک تابع داخل دیتاشیت تمام میکروهایی که 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 ; }
دیدگاه