اطلاعیه

Collapse
No announcement yet.

یک مشکل خیلی عجیب با spi شاید هم gpio

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    یک مشکل خیلی عجیب با spi شاید هم gpio

    سلام
    بنده یه برنامه واسه spi نوشتم خیلی خوب جواب میده از 1768 اطلاعات میره به مگا 16 رو ال ای دی نمایش میده
    وقتی ss مگا مستقیم به زمین مدار هست کار میکنه اما وقتی میخوام ss مگا رو بدم به 1768 (پایه های p0.0-7 و p1.0 -1 رو امتحان کردم) به طرز عجیبی بازی در میاره و مگا هیچی نمیگیره . اصولا IO نباید دخالتی تو کار perphial ها داشته باشه
    بردی که روش کار میکنم rev.c اموزشی eca هست . البته بنده مشکلی که تداخل ایجاد کنه بین این تو شماتیک ندیدم
    این کد رو ببینید:
    کد:
    #include <lpc17xx.h>
    #include "_USART.h"
    void _SPI_INIT (void);
    char _SPI_SEND (char data);
    void delay(void)
    {
    	int p;
    	for(p=0;p<=99999000;p++);
    }
    int main (void)
    {
     int e;
    LPC_GPIO2->FIODIR|=0xFF;
    LPC_GPIO2->FIOSET|=0xFF;
    LPC_PINCON->PINMODE4|=(1<<1);	
    //LPC_PINCON->PINMODE_OD2|=(1<<0);
    _SPI_INIT();
    	LPC_GPIO2->FIOCLR|=0xFF;
    	_SPI_SEND(0x11);
    	delay();
    	[COLOR=#ff0000]LPC_GPIO2->FIOSET|=0xFF;[/COLOR]
    while(1)
    	{
    		for(e=0;e<=254;e++)
    		{
    		delay();
    			LPC_GPIO2->FIOCLR|=0xFF;
    			delay();
    			_SPI_SEND(e);
    			delay();
    			delay();
    			delay();
    			delay();
    		[COLOR=#ff0000]LPC_GPIO2->FIOSET|=0xFF;[/COLOR]
    		delay();
    		}
    	}
    }
    void _SPI_INIT (void)
    {
    	LPC_SC->PCONP|=(1<<8);
    LPC_SC->PCLKSEL0|=((1<<16)|(1<<17));
    LPC_PINCON->PINSEL0|=((1<<31)|(1<<30));
    LPC_PINCON->PINSEL1|=((1<<2)|(1<<3)|(1<<4)|(1<<5));
    LPC_SPI->SPCR=0x000020;
    LPC_SPI->SPCCR=18;	
    }
    char _SPI_SEND (char data)
    {
    	LPC_SPI->SPDR=data;	
    	while(!(LPC_SPI->SPSR & 0x80));
    	return LPC_SPI->SPDR;
    }
    توی این کد وقتی میخوام 0x11 رو مگا 16 ببینیم میام اول پایه رو 0 میکنم که اس اس مگا 0 بشه اطلاعات رو میفرستم بعد یه delay و پایه 1 میشه اما مگا هیچی نمیگیره و نمایش نمیده جالب اینکه وقتی FIOSET رو پاک میکنم (خطی که به رنگ قرمز هست) مگا 16 اطلاعات رو میگیریه این در حالیه که وقتی set میشه پایه 1 دیگه کار ارسال اطلاعات به طور کامل تموم شده و اصلا 1 شدنش فقط جلو نویز رو میگیره . اصلا بی معنی به نطر میاد
    اصلا یه چیزه عجیبیه هر چی دیلی پشتش میزارم فاصله میدم هر کاری میکنم اگر FIOSET داشته باشم جواب نمیده حتی اگر fioset پنچ دقیقه دیلی بین تابع سند داشته باشه همین مشکل عینن تو حلقه for هم هست
    تو حلقه for هم اگه fioset أداشته باشم کار نمیکنه مگا هیچی نمیگیره اما fioset که پاک میکنم درست میشه همه 254تا کاراکتر رو نمایش میده روال ای دی
    اصولا نباید این طوری میشد با همین روش nrf w5100 و .... تو avr راه انداختم اما الان به طرز عجیبی این داره اذیت میکنه
    کسی میدونه مشکل ممکنه از کجا باشه؟
    اشکهايي که پس از هر شکست ميريزيم همان عرقيست که براي پيروزي نريخته ايم.
    هيتلر

    #2
    پاسخ : یک مشکل خیلی عجیب با spi شاید هم gpio

    نوشته اصلی توسط s699fx_bpr نمایش پست ها
    سلام بنده یه برنامه واسه spi نوشتم خیلی خوب جواب میده از 1768 اطلاعات میره به مگا 16 رو ال ای دی نمایش میده وقتی ss مگا مستقیم به زمین مدار هست کار میکنه اما وقتی میخوام ss مگا رو بدم به 1768 (پایه های p0.0-7 و p1.0 -1 رو امتحان کردم) به طرز عجیبی بازی در میاره و مگا هیچی نمیگیره . اصولا IO نباید دخالتی تو کار perphial ها داشته باشه بردی که روش کار میکنم rev.c اموزشی eca هست . البته بنده مشکلی که تداخل ایجاد کنه بین این تو شماتیک ندیدم اصولا نباید این طوری میشد. کسی میدونه مشکل ممکنه از کجا باشه؟
    . آیا زمین های هر دو میکرو مشترک هستند؟
    If the wind will not serve, take to the oars

    دیدگاه

    لطفا صبر کنید...
    X