با سلام مجدد.

 

 

اولین پست مطلب :( قسمت اول :معرفی کتابخانه )

پست قبلی : کتابخانه spi برایavr ( قسمت اول : معرفی)

پست بعدی : ( قسمت سوم : شروع کار با کتابخانه )

 

همانطور که در پست معرفی کتابخانه spi    گفته بودم قصد دارم روش استفاده از کتابخانه رو توضیح بدم .

برای شروع اول در مورد  فایلهای کتابخانه توضیح میدم .این کتابخانه شامل فایلهای زیر است .

spi.h  spi.c ,  spi_conf.h  ,spi_define_name.h , spi_typedef.h , bit.h

فایل bit.h  شامل ماکروهایی برای دستکاری رجیسترها به صورت بیتی هست که در اغلب کدهایی که من مینویسم این فایل دیده میشه .

فایل  spi .h که در اون فابلهای لازم پیوست و الگوی توابع تعریف شده است.

فایل spi.c تعریف بدنه توابع هست .

فایل spi_typedef.h مربوط به تعریف انواع داده هایی هست که کتابخانه در حالت نسخه کامل (در ادامه ماجرای نسخه کامل رو توضیح میدم )از اونها استفاده میکنه .

فایل  spi_define_name.h   که از فایلهای مهم کتابخانه هست و شامل اسامی هست که شما  برای پیکر بندی واحد spi به اونها نیاز دارید.

و اما مهمترین فایل برای کاربران کتابخانه  که برای تنظیم spi  باید اون رو تغیر بدید فایل spi_conf.h 

 هست ، که پیکربندی spi  در اون فایل تعیین میشه . با نگاهی به محتویات این فایل مطالب زیر رو در اون میبینید :

#define     SPI_VERSION_VOLUME                SPI_full_volume_version

#define     SPI_MASTER_SLAVE_SELECT           SPI_Master_Mode  

#define     SPI_INTERRUPT                     SPI_Enable  

#define     SPI_DATA_ORDER                    SPI_Msb_First

#define     SPI_MODE                          SPI_Mode_0 //SPI_Sample_Rising_Setup_Falling  

#define     SPI_CLOCK                         SPI_fosc_128//  fosc/128   

/* this just for master mode */
#define     SPI_SS_DIRECTION                  SPI_Ss_Output


//**************************

#define     SPI_SS_PORT          PORTB
#define     SPI_SS_DDR           DDRB
#define     SPI_SS_PIN           2U

#define     SPI_MOSI_DDR         DDRB
#define     SPI_MOSI_PIN         3U

#define     SPI_MISO_DDR         DDRB
#define     SPI_MISO_PIN         4U

#define     SPI_SCK_DDR          DDRB
#define     SPI_SCK_PIN          5U

 

اولین ماکرو SPI_VERSION_VOLUME    ماکروی مهمی هست . مقادیری که میتونید برای این ماکرو تعیین کنید در فایل  spi_define_name.h  تعیین شده و به صورت زیر هست .

//********  version volume  names   *****
#define     SPI_full_volume_version        1U     
#define     SPI_low_volume_version        0U

 مقدارSPI_full_volume_version  :

این مقدار کتابخانه در حالت نسخه کامل قرار خواهد داد .

مزیت کتابخانه دراین حالت اینه که میتوان تنظیمات spi( فرکانس پالس کلاک ، مد کاری ، حالت مستر و اسلیو و غیره ...) را در حین اجرای برنامه و بعد از تنظیمات اولیه ، بوسیله توابع کتابخانه ای تغییر داد. در این حالت کتابخانه  ، تقریبا کاری نیست که شما بخواهید انجام بدید و نتونید .

فقط عیبی که داره اینه که حجم کتابخانه زیادتر خواهد بود .

 

مقدار SPI_low_volume_version :

در این حالت کتابخانه قابلیت تغییر در تنظیمات رو به طور موردی نداره و برای تغییر تنظیمات باید بوسیله توابع خاصی ،  واحد spi  از اول به طور کامل راه اندازی بشه که شاید چندان مطلوب نباشه اما مزیتش اینه که حجم کتابخانه تقریبا نصف نسخع کامل هست . اگر در حین اجرای برنامه نیاز به تغییرات تنظیمات spi  نیست جهت صرفه جویی در حجم برنامه پیشنهاد میکنم از این حالت استفاده کنید .

ماکروی SPI_MASTER_SLAVE_SELECT  که مربوط به انتخاب حالت مستر و اسلیو هست .و شامل انتخابهای زیر است  :

//********   SPI_MODE   name   *****

#define     SPI_Master_Mode    1U     
#define     SPI_Slave_Mode     0U

ماکروی SPI_INTERRUPT مربوط به استفاده از وقفه است  .

ماکروی SPI_MODE :

مربوط به  مد کار spi  هست که تعیین میکنه  نمونه گیری در کدام لبه پالس ساعت و تغیر داده در کدام لبه انجام بشه . و 4 حالت داره که من برای برای تشخیص آسون آونها رو به صورت کامنت در قسمت مربوطه در فایل spi_define_name.h قرار دادم که در تشخیص کمک میکنه .

ماکروی SPI_CLOCK :

که مربوط به فرکانس پالس کلاک spi هست , در حالت مستر تاثیر گذار هست .

ماکروی SPI_SS_DIRECTION  :

که مربوط به تعیین جهت پایه ss  در حالت مستر هست که هر کدام از حالتهای ورودی و خروجی  یک قابلیتی داره اما در حالت  اسلیو تاثیر گذار نیست ولی برای امنیت سخت افزار اون رو ورودی کنید .( اگر این پایه خروجی باشه و شما spi اسلیو رو خاموش کنید پایه به حالت خروجی در میاد که در صورتی که پایه ss مربوط به spi مستر خروجی باشه و ارزش های متفاوتی داشه باشن به دلیل امپدانس کم پورت در حالت خروجی ممکنه جریان زیادی از پورتها عبور کنه .)

ماکروهای

//**************************

#define     SPI_SS_PORT          PORTB
#define     SPI_SS_DDR           DDRB
#define     SPI_SS_PIN           2U

#define     SPI_MOSI_DDR         DDRB
#define     SPI_MOSI_PIN         3U

#define     SPI_MISO_DDR         DDRB
#define     SPI_MISO_PIN         4U

#define     SPI_SCK_DDR          DDRB
#define     SPI_SCK_PIN          5U

مربوط به تعیین تعیین پایه های spi هستن ( و تا اونجا که من بررسی کردم برای میکروهای atmega8-16-32 یکسان هست ) فقط توجه داشته باشید که اون ماکروهایی که در اونها عبارت pin هست مربوط به شماره پایه های مربوطه ست .

تا اینجا توضیح در مورد فایلها به پایان رسید .( ادامه دارد )

پست قبلی : کتابخانه spi برایavr ( قسمت اول : معرفی)

پست بعدی : ( قسمت سوم : شروع کار با کتابخانه )

حق مالکیت : محفوظ است . انتشار با ذکر منبع بلا مانع است .