تكملة دورة المعالجات والمتحكمات المصغرة الجزء الثاني (21-43)
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
44 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
في واجهة الطرفيات التسلسلية، تستخدم كل من Tx و Rx منبعا مشتركا
لنبضات الساعة.
تسمح واجهة الطرفيات التسلسلية بتبادل سريع وفعال للبيانات بين شرائح
المايكرو أو بين الطرفيات.
توجد العديد من الأنظمة الخارجية التي تدعم ال SPI )واجهة الطرفيات
التسلسلية( مثل ] LCD – DAC .]… –
تدعم تردد بيانات مرتفع، يصل حتى 3 ميغاهرتز.
وا ة الطرفيات التسلسلية ) SPI )
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
45 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
.MISO1 : إشارة خرج بيانات تسلسلية.
.MOSI2 : إشارة دخل بيانات تسلسلية.
.SCK3 : نبضات ساعة تسلسلية.
./SS4 : تحديد الإشارة.
إشارات ال SPI
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
46 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
نظرة عامة عل SPI
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
47 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
كتابة البيانات عل ممر حزمة SPI
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
48 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
قراءة البيانات من عل ممر حزمة SPI
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
49 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
مسجل 16 بت متزامن ب 8 بتات في المرسل و 8 بتات في المستقبل.
المرسل )السيد( يقوم بإعطاء نبضات ساعة المزامنة.
المستقبل هو العبد ويتم تحديده عن طريق إعطاء إشارة منخفضة على خط التحديد ) SS .)
◦ عندها يتم تفعيل خاصية الإزاحة في العبد.
تبدأ عن طريق تحميل بايت المعطيات في مسجل بيانات SPI المستخدم ) SPDR ( في
شريحة السيد.
يقوم بتزويد كل من شريحة السيد والعبد بنبضات الساعة عن طريق ال SCK .
عملية SPI
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
50 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
يتم إزاحة بت واحد إلى خارج شريحة السيد عن طريق منفذ MOSI عند كل نبضة SCK .
تقوم شريحة العبد باستقبال البيانات عند منفذ ال MOSI .
في الوقت ذاته، يتم إزاحة بت واحد إلى خارج شريحة العبد من خلال منفذ ال MISO إلى
منفذ ال MISO في شريحة العبد.
بعد ثمان نبضات SCK من شريحة السيد، يكون قد تم تحويل بايت كامل بين السيد والعبد.
يتم التنويه عن نهاية الإرسال في شريحة السيد والاستقبال في شريحة العبد عن طريق
إعطاء إشارة على علم المقاطعة SPIF .
يتوضع علم SPIF في مسجل الحالة SPSR .
عملية SPI
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
51 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
صورة لمسجلات SPI
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
52 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
. 1 تفعيل SPI ( SPE (: يأخذ القيمة 1 لحالة التفعيل، و 0 لحالة عدم التفعيل.
. 2 ترتيب البيانات: ) DORD 🙂 1، ليقوم بإرسال الخانة الأقل أهمية LSB في مسجل
البيانات SPDR أولا. 0 لإرسال الخانة الأكثر أهمية MSB أولا.
.3 بت تحديد شريحة السيد / العبد ) MSTR 🙂 1 ، تحدد أن النظام هو السيد. 0، تحدد أن
النظام هو العبد.
.4 قطبية نبضات الساعة ) CPOL 🙂 1 ، يتم تحديد منفذ SCK ليثبت عند المنطق المرتفع.
0، ليثبت ال CPOL عند المنطق المنخفض.
.5 طور نبضات الساعة ) CPHA 🙂 0 ، إذا كانت عملية قراءة بت البيانات تتم عند الجبهة
الصاعدة. 1 ، لتتم عند الجبهة الهابطة.
مسجل التحكم ل SPI ( SPCR )
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
53 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
بت تحديد تردد نبضات ساعة ال SPI ( SPR[0:1] ( وبت السرعة المضاعفة ) SPI2X 🙂
◦000 : SCK = ساعة النظام / 4 .
◦100 : SCK = ساعة النظام / 2 .
◦001 : SCK = ساعة النظام / 16 .
◦101 : SCK = ساعة النظام / 8 .
◦010 : SCK = ساعة النظام / 64 .
◦110 : SCK = ساعة النظام / 32 .
◦011 : SCK = ساعة النظام / 128 .
◦111 : SCK = ساعة النظام / 64 .
مسجل التحكم ل SPI ( SPCR )
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
54 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
تحتوي SPSR )مسجل الحالة( على علم SPIF ، يأخذ قيمته عندما:
◦ ينتهي إرسال البيانات في شريحة السيد، واستقبالها في شريحة العبد.
يتم محي محتوى SPIF عن طريق قراءة SPSR
◦ بعد أن يتم تحديد قيمة SPIF وقراءة SPDR .
كتابة البيانات إلى SPDR يؤدي إلى بدء الإرسال في SPI .
مسجلات الحالة والبيانات في SPI ( SPSR & SPDR )
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
55 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
المتطلبات:
◦ بدء تحميل النظام بالبيانات المطلوبة.
◦ عندها يبدأ إرسال البيانات.
◦ نقدم التوابع المستخدمة من أجل البدء، والإرسال، والاستقبال.
◦ نقسم تردد ساعة الهزاز على 128 لتحديد تردد ساعة ال SCK .
مثال برمجي
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
56 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
//spi_init: السيد[ [ » اس بي آي « يقوم ببدء تشغيل نظام
void spi_init(unsigned char control)
{
DDRB = 0xA0;
// تحديد ال SCK ( PB7 (، و ال MOSI ( PB5 ( للخرج، وباقي المنافذ للدخل.
// إعداد مسجل التحكم الخاص بال SPI ( SPCR 🙂
SPCR = 0x53;//SPIE:0, SPE:1, DORD:0, MSTR:1, CPOL:0, CPHA:0, SPR:1, SPR0:1
}
بدء نظام ال SPI
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
57 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
//spi_write: يستخدم من قبل سيد الخط لإرسال
بايت من البيانات .
void spi_write(unsigned char byte)
{
SPDR = byte;
while (!(SPSR & 0x80));
}
//spi_read: يستخدم من قبل العبد لاستقبال بايت
من البيانات .
unsigned char spi_read(void)
{
while (!(SPSR & 0x80));
return SPDR;
}
الكتابة عل SPI
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
58 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
شريحة Atmega128 هي شريحة سيد ال SPI ، وشريحة ATMega16 هي شريحة العبد
لل SPI .
شريحة Atmega128 :
◦ تقرأ البيانات التي ستقوم بإرسالها من مفاتيح ال DIP على المنفذ F و
◦ يرسلها إلى ATMega16 )الشريحة العبد(، حيث يتم عرضها على المنفذ C .
في الوقت ذاته، يتم إعادة البيانات من الشريحة ATMega16 )المنفذ A ( إلى الشريحة
ATMega128 و
◦ يتم عرضها على المنفذ A الخاص بها.
نظام يقرأ مفتاح ال DIP في نظام ما ويقوم بعرض
معلومات المفتاح عل نظام آخر.
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
59 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
يحدث النظام نفسه باستمرار، مما يؤدي إلى عرض النتائج بشكل آني.
المنفذ B )الوظائف البديلة للمنفذ B تتضمن أقطاب ال SPI (، يتم تفعيله في كل معالج كما
هو مبين أدناه:
نظام يقرأ مفتاح ال DIP في نظام ما ويقوم بعرض
معلومات المفتاح عل نظام آخر.
القطب
المنفذ B العبد
المنفذ B السيد
MOSI
دخل
خرج
MISO
خرج
دخل
SCK
دخل
خرج
SS
دخل
خرج
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
60 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
61 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
62 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
توضيح البرمجيات
تسمح للوصل المباشر ) MOSI-MOSI ، MISO-MISO ، SCK-SCK ، SS-SS .)
1 . يتم تشغيل المنافذ )السيد / العبد(، ويتم تفعيل نظام SPI ، في حلقة ال main() .
2 . يتم إدخال شيفرة ال Assembly باستخدام برنامج CodeVisionAVR
◦ تأكد من تفريغ المقاطعة الخاصة ب SPI .
◦ وذلك للتأكد من أن خدمة المقاطعة ل SPI لن يتم تنفيذها إلا في الحالات التي تريدها أنت.
3 . أخيرا، تتم كتابة 0x00 إلى SPDR من أجل بدء تشغيل عملية الاتصال SPI .
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
63 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
/* برنامج العبد */
#include <mega16.h>
#define SPI_output_dataPORTC
#define SPI_input_dataPINA
/* تسلسل عملية المقاطعة */
interrupt [SPI_STC] void spi_isr(void)
SPI_output_data= SPDR; /* قم بقراءة البيانات الجديدة المستقبلة */
SPDR = SPI_input_data; /* قم بتحميل البيانات الجديدة من أجل عملية النقل التالية */
مثال عن برمجية SPI في العبد
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
64 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
void main(void)
DDRB = 0x40; /*sclk. MOSI. SS=دخل . MISO=خرج */
DDRC = 0xFF; /* كلها مخارج */
PORTA = 0xFF; /* موصولة مع مقاومات رفع من أجل
» ديب « مفاتيح */
SPCR = 0xC1; /* .» اس بي آي « يقوم بتفعيل ال
ومقاطعاتها. حالة العبد */
/* يتم تنفيذه ببرنامج CodeVisionAVR من أجل مسح
علم المقاطعة الخاص ب SPI /*
#asm
inr30.spsr
Inr30spdr
#endasm
#asm(“sel”) // تفعيل المقاطعات العامة
while (1)
; /* اس بي « يتم هنا وضع برنامج يقوم بتفسير نتائج ال
في حال الحاجة لها » آي */
مثال عن برمجية SPI في العبد
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
65 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
#include <mega128.h>
#define SPI_output_dataPORTA
#define SPI_input_dataPINF
/* » اس بي آي « تسلسل خدمة المقاطعة ل */
interrupt [SPI_STC] void spi_isr(void)
PORT.0 = 1; /* SS مرتفع */
SPI_output_data=SPDR; /* اقرأ المعلومات الواصلة من آخر تبادل */
PORTB.0 = 0; /* SS أخفض */
SPDR = SPI_input_data; /* أرسل البيانات الجديد باتجاه الخارج */
مثال عن برمجية SPI في السيد
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
66 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
void main(void)
PORTA = 0xFF; /* ابدأ والليدات لا تعمل */
DDRA = 0xFF; /* جميعها مخارج */
PORTB = 0x07; /* SS, SCK, & MOSI, جميعها مخارج
*/
PORTF = 0xFF; /* مقاومات رفع من أجل مفاتيح ال
» ديب « */
SPCR = 0xD1; /* ساعة بسرعة 375 كيلوهرتز، تفعيل
» اس بي آي « مقاطعة ال ،» اس بي آي « */
SPSR = 0x00;
// » اس بي آي « مسح علم المقاطعة ل
#asm
inr30.spsr
inr30.spdr
#endasm
// تفعيل المقاطعات العامة
#asm(“set”)
SPDR = 0x00; /* الكتابة مرة واحدة لبدء العملية */
while (1)
; /* اكتب باقي البرنامج هنا */
مثال عن برمجية SPI في السيد
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
67 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
.1 بعد البدء، يتم التعامل مع جميع التوابع في SPI ISR .
.2 يقوم سيد ال ISR بقراءة البيانات المستقبلة وكتابتها إلى أقطاب
الخرج )الليدات(.
.3 ثم يقوم بقراءة منفذ الدخل )مفاتيح ال DIP ( ويبدأ بدورة اتصال
جديدة عن طريق كتابة البيانات من منفذ الدخل إلى SPDR .
شرح البرنامج
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
68 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
.4 ثم يقوم عبد ال ISR فقط باستقبال البيانات الجديدة، ويقوم بتأمين
معلومات المفاتيح الخاصة به من أجل دورة الاتصال التالية، وتبقى
هذه الحلقة تعاد إلى ما لا نهاية.
. 5 يجب الانتباه إلى أن المعلومات التي تذهب من العبد إلى السيد
تتأخر بمقدار دورة واحدة عن البيانات التي تصل إلى العبد.
. 6 يحدث هذا الشيء بسبب قيام العبد بتحميل بيانات جديدة بعد تلقيه
البيانات من السيد.
شرح البرنامج
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
69 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
. 7 عادة ما يتم استخدام ممر الحزمة الخاص ب SPI من أجل تشكيل شبكة
عالية السرعة ضمن جهاز ما.
. 8 قد تكون التوصيلات تفرعية
◦ يتم ربط جميع أقطاب ال MISO ببعضها البعض، وكل أقطاب ال MOSI ببعضها
البعض.
. 9 أو في حلقة تسلسلية كبيرة، تسافر فيها جميع بتات البيانات عبر جميع
الأجهزة بالترتيب، بطريقة تؤدي إلى تجميع دائرة كبيرة من مسجلات
الإزاحة.
شرح البرنامج
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
70 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
تتطلب الطريقة التفرعية طريقة خاصة تقوم بتحديد الجهاز العبد، بحيث يشارك
جهازان فقط البيانات المارة. أما في طريقة الحلقة التسلسلية، ستعبر البيانات
من خلال جميع الأجهزة.
في كلا الطريقتين، قد تتواجد عدة وحدات معالجة مركزية و عدة أجهزة تابعة
)أجهزة عبد( في شبكة تعتمد على SPI لتشارك البيانات.
شرح البرنامج