ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

نمایش نتایج: از 1 به 8 از 8

موضوع: تنظيمات SPI

  1. #1
    2011/04/25
    40
    1

    تنظيمات SPI

    دوستان و اساتيد محترم سلام

    من تو بخش ARM هر چقدر دنبال يه تاپيک درست و حسابي براي تنظيمات SPI در سري LPC گشتم پيدا نکردم . گفتم تو اين تاپيک دوستان لطف کنن نظرات و تجربياتشونو در راه اندازي واحد SPI بيان کنن که کمکي به من و بقيه دوستاني که قصد استفاده از اين رابط رو دارن شده باشه

  2. #2
    2011/04/25
    40
    1

    پاسخ : تنظيمات SPI

    يه سري سوال داشتم که ترجيح ميدم اونا رو به ترتيب اولويت تو برنامه نويسي در بين مطالب مطرح کنم...
    البته لطفا اگه جايي هم اشتباه گفتم تصحيح کنين. :icon_razz: :icon_razz:

    طبق USER MANUAL مربوط به سري LPC23XX در تنظيمات اوليه اين واحد ابتدا بايد در رجيستر PCONP مقدار بيت PCSPI رو برابر يک قرار بديم
    :agree:

    کد:
    PCONP |= (1 << 8);
    دو مورد ديگه رو هم در قسمت Basic configuration شماره 2 و3 گفته که من متوجه نشدم دقيقا چي ميگه

    سوال ؟؟؟.......شماره 2 گفته : در رجيستر PCLK_SEL0 بيت هاي 16 و 17 که مربوط به PCLK_SPI هست را انتخاب کنيد . حالا من نميدونم بايد از بين چهار حالت موجود چه مقداري رو براي اين دو تا بيت در نظر بگيرم ؟؟

    شماره 3 گفته : از طريق رجيستر هاي PINSEL0 تا PINSEL4 و همچنين PINMODE0 تا PINMODE4 پين هاي SPI و حالت هاشون (Mode) رو انتخاب کنين
    که من از قسمت مربوط به PINSEL متوجه شدم که بايد جهار پين مربوط به ارتباط SPI که MOSI و MISO و SSEL و SCK هست رو انتخاب کرد که چون من با LPC2368 کار ميکنم اين پين ها به ترتيب روي پايه هاي P0.18 و P0.17 و P0.16 و P0.15 قرار دارن. :smile: :smile:
    با بيت هاي 30 و 31 موجود در رجيستر PINSEL0 نوع کارکرد پايه P0.15 مشخص ميشود که با مقدار 00 در حالت GPIO و با مقدار 11 در حالت SCK قرار ميگيرد و بيتهاي 0 تا 5 رجيستر PINSEL1 مربوط به نوع کارکرد پايه هاي P0.16 و P0.17 و P0.18 ميباشد و با مقدار 11 براي هر دو بيت آن پايه در حالت پين هاي SPI و با مقدار 00 در حالت GPIO قرار ميگيرد

    يه سوال ديگه ؟؟؟... حالا اگه پايه P0.16 در حالت SSEL تنظيم کنيم بازم ميشه مقدار خروجي اون رو تغيير داد؟

    يعني بهتر بگم چه موقع در حالت GPIO تنظيم بشه و چه موقع در حالت SSEL ؟؟

    اينم تنظيماتش تو برنامه نويسي بگيد درسته يا نه ؟
    کد:
      PINSEL0 |= 0xC0000000;  
    	PINSEL1 |= 0x0000003C;
    يه سوال ديگه ؟؟؟...رجيستر هاي PINMODE هم مربوط ميشه به انتخاب مقاوت Pull-Up يا Pull-Down که نميدونم وقتي داريم در حال SPI کار ميکنيم بايد اين مقاومت ها فعال باشه يا نه ؟

    فعلا :job: :job:
  3. #3
    2011/04/25
    40
    1

    پاسخ : تنظيمات SPI

    ايها الاساتيد کجاييد ؟
    چرا جواب نميديد ؟ :sad: :sad: :sad:
  4. #4
    2011/04/25
    40
    1

    پاسخ : تنظيمات SPI

    بريم ادامه مطلبو دنبال کنيم دوستان هم هر موقع اومدند يه نگاه به پست هاي قبلي بندازن جواب ما رو بدن ... ثواب داره
    :agree: :agree:

    چهارمين موردي هم که تو قسمت Basic configuration ذکر شده مربوط به رجيستر S0SPINT و VICIntEnable هست که رجيستر VICIntEnable جهت فعال کردن وقفه در واحدهاي مختلف هست که بيت شماره 10 اون بزاي وقفه واحد SPI هست و بيت اول رجيستر S0SPINT شامل پرچم وقفه ميباشد که با رخ دادن وقفه SPIF يا WCOL يک ميشود و با نوشتن يک در آن ريست ميشه

    سوال ؟؟.. اگه وقفه توسط رجيستر VICIntEnable فعال باشه آيا پرچم وقفه در رجيستر S0SPINT به صورت خودکار ريست ميشه ؟؟ :question: :question:
  5. #5
    2011/04/25
    40
    1

    پاسخ : تنظيمات SPI

    مراحل تنظيم آيسي جهت کار در مد MASTER مطابق User Manual سري LPC23xx:

    1- تنظيمات مربوط به کلاک توسط رجيستر S0SPCCR

    2- تنظيمات مربوط به کنترل واحد SPI توسط رجيستر S0SPCR

    3- نوشتن داده هايي که ميخاين ارسال بشه روي رجيستر S0SPDR ، پس از نوشتن داده روي اين رجيستر ارسال شروع ميشود

    4-انتظار جهت يک شدن بيت SPIF که در رجيستر S0SPSR قرار داره . اين بيت پس از آخرين سيکل ارسال داده يک ميشه (که نشون ميده انتقال انجام شده)

    5- خواندن رجيستر وضعيت S0SPSR ( خوندن اي رجيستر باعث ميشه که پرچم SPIF ريست بشه و بتونيد براي بار بعد هم ارسال شدن اطلاعات رو باهاش چک کنين ، ولي اگه نخونيدش ريست نميشه و مقدارش يک ميمونه و مرحله چهار رو نميتونين انجام بدين)

    6-خوندن داده هاي دريافت شده توسط رجيستر S0SPDR (انجام دادن اين مرحله اختياريه و اگه اطلاعات دريافت شده مهمه واستون بايد انجامش بدين)

    7- در صورتي که ميخاين بعدش اطلاعات ديگه اي رو ارسال کنين دوباره از مرحله 3 شروع کنين

    :job: :job: :bye :bye

  6. #6
    2009/03/11
    180
    1

    پاسخ : تنظيمات SPI

    اين برنامه ديتا رو از SPI ميخونه و روي LCD نمايش ميده. ولي متاسفانه صفر برميگردونه و چيزي نميخونه. کسي ميتونه راهنمايي کنه؟

    کد:
    #include <lpc17xx.h>
    #include <stdio.h>
    
    #define LCD_LPC1768    
    #define LCD_PORT_1
    #define LCD_RS   14
    #define LCD_RW   10
    #define LCD_E   9
    #define LCD_DB4  8
    #define LCD_DB5  4
    #define LCD_DB6  1
    #define LCD_DB7  0
    
    #include "lcd.h"
    
    int a;
    char buf[16];
    /*
    void SPI_IRQHandler()
    {
    	LPC_SPI->SPINT |= 0x1;
    	a=LPC_SPI->SPDR=0xff;
    	sprintf(buf,"SPI = %d",a);
    	lcd_gotoxy(2,1);
    	lcd_putsf(buf);
    }
    */
    void delay(){
    	int i;
    	for(i=0;i<8000000;i++);
    }
    
    int main (void) {
    	unsigned char i;
    	
    
    	SystemInit();
    
    	LPC_SC->PCONP |= (1 << 8);
    	LPC_PINCON->PINSEL0 |= (2UL << 4);
    	LPC_PINCON->PINSEL0 |= (3UL << 30); //P0.15 as SCK
    	LPC_PINCON->PINSEL1 |= (3UL << 0);  //P0.16 as SSEL
    	LPC_PINCON->PINSEL1 |= (3 << 2);   //P0.17 as MISO
    	LPC_PINCON->PINSEL1 |= (3 << 4);   //P0.18 as MOSI
    	LPC_SPI->SPCCR=25; 				 	 //select frequency freq = 1MHz 
    	LPC_SPI->SPCR=0x800; 				 //device select as (master) slave
    	LPC_SC->PCONP |= (1 << 12);
    	LPC_ADC->ADCR |= ((1 << 7) | 
    					 (4 << 8) |
    					 (1 << 21));
    	//NVIC_EnableIRQ(SPI_IRQn);
    	
    	lcd_init();
    	lcd_clear();
    	lcd_gotoxy(1,2);
    	lcd_putsf("SPI Example");
    	
    	while(1) {
    	/*
    		LPC_ADC->ADCR &= ~(7 << 24);
    		LPC_ADC->ADCR |= (1 << 24);
    		while(!(LPC_ADC->ADGDR & (1UL << 31)));
    		a = (LPC_ADC->ADGDR >> 8 & 0x0FF);
    		LPC_SPI->SPDR=(unsigned char)a;
    		while(!(LPC_SPI->SPSR & 0x80)); // wait for transfer to be completed
    		delay();
    		
    		LPC_SPI->SPDR=i;
    		while(!(LPC_SPI->SPSR & 0x80)); // wait for transfer to be completed
    		i++;
    		if (i>255) i=0;
    		delay();
    	*/
    	LPC_SPI->SPDR=0xFF;
    	a=LPC_SPI->SPDR;
    	sprintf(buf,"SPI = %d",a);
    	lcd_gotoxy(2,1);
    	lcd_putsf("        ");
    	lcd_gotoxy(2,1);
    	lcd_putsf(buf);
    	delay();
    	
    	}
    	
    	}
  7. #7
    2010/04/09
    اسلامشهر
    1,499
    34

    پاسخ : تنظيمات SPI

    با سلام
    منظورتون از اينکه از spi ميخونه چيه؟ مثلا از يه حافظه flash يا sd card ؟
  8. #8
    2009/03/11
    180
    1

    پاسخ : تنظيمات SPI

    نه. يه برنامه ساده که ديتا رو از طرف يه ميکروي ديگه مثلا يه avr ميفرسته و 1768 از طريق spi ميگيره و رو lcd نمايش ميده. نميدونم چرا صفر برميگردونه؟
نمایش نتایج: از 1 به 8 از 8

موضوعات مشابه

  1. تنظيمات هيستوري(بک پ ها)
    توسط masoud_m_bf در انجمن نرم افزار Protel
    پاسخ: 2
    آخرين نوشته: 2014/06/28, 23:53
  2. تنظيمات Snap!
    توسط masoud_m_bf در انجمن نرم افزار Protel
    پاسخ: 1
    آخرين نوشته: 2014/04/30, 11:50
  3. تنظيمات پروگرمر
    توسط mahboob2 در انجمن میکروکنترلرهای AVR
    پاسخ: 10
    آخرين نوشته: 2013/12/04, 17:02
  4. تنظيمات pll
    توسط IRT در انجمن NXP
    پاسخ: 14
    آخرين نوشته: 2013/11/10, 22:59
  5. تنظيمات خاص براي Keil
    توسط رضا حاجي زاده در انجمن 8051
    پاسخ: 8
    آخرين نوشته: 2006/12/19, 11:10

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •