MSP430G2553 SPI Init

Başlatan baran123, 16 Şubat 2016, 18:36:08

baran123

SPI ını denerken elimdeki OLED kullanayım dedim.Önce ayarları yapıp sorunsuz bir şekilde çalıştırdım sonra gereksiz kısımları temizlerken init kısmında bir şeyi yanlışlıkla sildim geri alma falan yaptım ama bir türlü tekrar çalıştırmadım.Her kısmı kontrol ettim ben nerede hata yapıyorum acaba ?

void SPI_Init(void)
{
	//
	P1DIR |= BIT1 + BIT2 + BIT4;

	//
	P1SEL  = BIT1 + BIT2 + BIT4;

	//
	P1SEL2 = BIT1 + BIT2 + BIT4;

	//
	UCA0CTL1 = UCSWRST;

	// Master Mode, MSB, SYNC, CKP
	UCA0CTL0 |= UCMST + UCMSB + UCSYNC + UCCKPH;

	// Freq = SMCLK / 2 (16MHz / 2 = 8MHz)
	UCA0CTL1 |= UCSSEL_2;

	// Start
	UCA0CTL1 &= ~UCSWRST;
}

bybik

Şuan kullandığım sorunsuz spi init kodlarını yolluyorum.Gözüme çarpan farklardan biri.Spi iolarnı yükelrken ben 0 a çekmişim sen 1 e.Bir dene bakalım sonuç ne olacak.

void SpiInit (void)
{

	P3SEL2&=~(BIT1 | BIT2 | BIT3);
	P3SEL|=(BIT1 | BIT2 | BIT3);


	UCB0CTL1 |= UCSWRST;
	
	UCB0CTL0 = UCCKPH | UCMSB | UCMST | UCMODE_0 | UCSYNC;  r
	UCB0BR0 = 0x01; 
	UCB0BR1 = 0x00;
	UCB0CTL1 = UCSSEL_2; 

#ifdef _DEBUG
	SoftUartSendString("Spi yuklendi\r\n");
#endif
}

Çizgi Tagem

P1DIR |= BIT1 + BIT2 + BIT4; Kısmı gereksiz olmakla birlikte Clock frekansını ayarlamak için prescaler yazmaçlarına değer atanmamış. Yani SPI saat frekansı direk olarak SMC frekansına eşit olabilir. Azami değer 16MHz olabilir osc ayarlarını bilmiyorum. Frekans yüksek ise kullandığın LCD desteklemiyor olabilir. Yada kodun başka bir tarafında da sorun olabilir.

baran123

Sorun tahmin ettiğim gibi Init bölümündeymiş.Şu şekilde düzenledim.

void SPI_Init(void)
{
	//
	P1DIR |= BIT1 + BIT2 + BIT4;

	//
	P1SEL  = BIT1 + BIT2 + BIT4;

	//
	P1SEL2 = BIT1 + BIT2 + BIT4;

	//
	UCA0CTL1 = UCSWRST;

	// Master Mode, MSB, SYNC, CKP
	UCA0CTL0 = UCCKPH | UCMSB | UCMST | UCMODE_0 | UCSYNC;

	// Freq = SMCLK / 2 (16MHz / 2 = 8MHz)
	UCA0CTL1 |= UCSSEL_2;

	//
	UCA0BR0 = 0x01;

	//
	UCA0BR1 = 0x00;

	// Start
	UCA0CTL1 &= ~UCSWRST;
}


Yanıtlar için teşekkür ederim.