ارتباط میکروکنترلرهای ARM از طریق پروتکل SPI
در این بخش دانلود پروژه دانلود پروژه ارتباط میکروکنترلرهای ARM از طریق پروتکل SPI, توسط تیم الکترونیک و برنامه نویسی الکترونیک ۹۸ برای شما علاقه مندان به پروژه های میکروکنترلر ARM با هدف آموزش برنامه نویسی و راه اندازی میکروکنترلرهای ARM آماده شده است. در این پروژه با استفاده از واحد SPI میکروکنترلر AT91SAM7S از خانواده میکروکنترلر های ARM, دو میکروکنترلر را به یک دیگر به صورت سخت افزار شکل زیر متصل می نماییم, صفحه کلید و ال سی دی LCD به هر دو میکروکنترلر متصل می شود. یک میکروکنترلر به صورت Master و دیگری به صورت Slave تنظیم می شود. اگر کلیدی از صفحه کلید میکروکنترلر Master را فشار دهید شماره کلید مربوطه در ال سی دی LCD کاراکتری میکروکنترلر Slave نمایش داده می شود و بلعکس اگر کلیدی از صفحه کلید میکروکنترلر Slave را فشار دهید, شماره کلید مربوطه بر روی ال سی دی LCD متصل به میکروکنترلر Master نمایش داده می شود.
نقشه شماتیک پروژه
نحوه برقراری ارتباط دو میکروکنترلر ARM از طریق پروتکل SPI
برنامه میکروکنترلر Master به زبان C در نرم افزار IAR Embedded Workbench IDE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
#include <Atmel/ioat91sam7s64.h> #include “keypad.h” #include “lcd.h” void main () { //——————–start up————————– AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS; // AT91C_WDTC_WDDIS=(1<<15) AT91C_BASE_RSTC->RSTC_RMR=0xA5000001; //——————–speed up————————– AT91C_BASE_CKGR->CKGR_MOR = 0xF01; AT91C_BASE_CKGR->CKGR_PLLR = 0x2903FFC; AT91C_BASE_PMC->PMC_MCKR = 0x3; AT91C_BASE_PMC->PMC_SCER = 0x1; //—————————————————– AT91C_BASE_PMC->PMC_PCER = (1<<AT91C_ID_SPI); // AT91C_ID_SPI=5 //—————————————————– unsigned char i,j; lcd_pininit (16,15,5,6,7,8,26,27,28,29); lcd_init (); keypad_pininit (5,6,7,8,17,18,19,20); keypad_init (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); AT91C_BASE_PIOA->PIO_PDR = (1<<31|1<<12|1<<13|1<<14); AT91C_BASE_PIOA->PIO_MDER = (1<<31|1<<12|1<<13|1<<14); AT91C_BASE_PIOA->PIO_ASR = (1<<31|1<<12|1<<13|1<<14); AT91C_BASE_PIOA->PIO_PPUER = (1<<31|1<<12|1<<13|1<<14); AT91C_BASE_SPI->SPI_MR = 0x0F0D0011; AT91C_BASE_SPI->SPI_CSR[1] = 0x0F0FFF02; AT91C_BASE_SPI->SPI_CR = 0x1; while(1) { i=keypad_scan (); while (!(AT91C_BASE_SPI->SPI_SR&0x2)); AT91C_BASE_SPI->SPI_TDR = i; while (!(AT91C_BASE_SPI->SPI_SR&0x1)); j = AT91C_BASE_SPI->SPI_RDR&0xFF; if (j!=16) { lcd_clear (); lcd_gotoxy(0,0); lcd_puts(j); } } } |
برنامه میکروکنترلر Slave به زبان C در نرم افزار IAR Embedded Workbench IDE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
#include <Atmel/ioat91sam7s64.h> #include “keypad.h” #include “lcd.h” void main () { //——————–start up————————– AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS; // AT91C_WDTC_WDDIS=(1<<15) AT91C_BASE_RSTC->RSTC_RMR=0xA5000001; //——————–speed up————————– AT91C_BASE_CKGR->CKGR_MOR = 0xF01; AT91C_BASE_CKGR->CKGR_PLLR = 0x2903FFC; AT91C_BASE_PMC->PMC_MCKR = 0x3; AT91C_BASE_PMC->PMC_SCER = 0x1; //—————————————————– AT91C_BASE_PMC->PMC_PCER = (1<<AT91C_ID_SPI); // AT91C_ID_SPI=5 //—————————————————– unsigned char i,j; lcd_pininit (16,15,5,6,7,8,26,27,28,29); lcd_init (); keypad_pininit (5,6,7,8,17,18,19,20); keypad_init (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); AT91C_BASE_PIOA->PIO_PDR = (1<<11|1<<12|1<<13|1<<14); AT91C_BASE_PIOA->PIO_MDER = (1<<11|1<<12|1<<13|1<<14); AT91C_BASE_PIOA->PIO_ASR = (1<<11|1<<12|1<<13|1<<14); AT91C_BASE_PIOA->PIO_PPUER = (1<<11|1<<12|1<<13|1<<14); AT91C_BASE_SPI->SPI_MR = 0x0; AT91C_BASE_SPI->SPI_CSR[0] = 0x02; AT91C_BASE_SPI->SPI_CR = 0x1; while(1) { i=keypad_scan (); while (!(AT91C_BASE_SPI->SPI_SR&0x2)); AT91C_BASE_SPI->SPI_TDR = i; while (!(AT91C_BASE_SPI->SPI_SR&0x1)); j = AT91C_BASE_SPI->SPI_RDR&0xFF; if (j!=16) { lcd_clear (); lcd_gotoxy(0,0); lcd_puts(j); } } } |