STM32F407 Cortex M4 şamataları

Başlatan bunalmis, 16 Ekim 2011, 17:14:50

z

Evet bu ama ne olur ne olmaz diye bunun 1 numara buyugu lazim. Fakat CM4 ile CM3 de NVIC'in ayni olma ihtimali cok yuksek. Asil aradigimiz dokumani buluncaya kadar http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/PROGRAMMING_MANUAL/CD00228163.pdf bunu kullanalim. Sagolasin.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ErsinErce


z

Alıntı yapılan: ErsinErce - 24 Ekim 2011, 01:09:35
O dosyadaki bilgiler m4 için burada mevcut bunu mu arıyorduk hocam?
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0553a/CIHIGCIF.html

Evet bu, bunu daha önce gorduysem de register anlatımlarındaki register kutucuklarını begenmediğimden önemsememişimdir.

Tamam bu durumda NVIC doküman sıkıntımız kalmadı.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ErsinErce

bende bit bit anlatıma sahip olsun dediğinizden es geçmiştim.

mcan

#include "STM32F10x.h"

void delay(unsigned int);
static int ih;
int zg;

void TIM7_IRQHandler(void)
{
		
	   if (ih == 0)
	   	ih=1;
	   else
	   	ih=0;

		TIM7->SR  = 0x0;
		zg =   TIM7->SR;
}

void SystemInit (void)
{

 	RCC->APB2ENR |= 0x00000016;    // GPIOD donanımının clock sinyalini uygulayalım
    GPIOC->CRL = 0x33333333;     // GPIOD nin 15, 14, 13, 12 pinleri cikis tanimlandi (Ledler bu pinlerde)
	GPIOC->CRH = 0x33333333;

	RCC->CR |= 0x0010000;	   			// HSE ON
	RCC->CFGR = 0x001D0000;	   			// PLL ayarla
	RCC->CR  |= 0x001000000;	   		// PLL aç
	FLASH->ACR =  0x32;					// Flash gecikme ayarı
	RCC->CFGR = 0x001D0702;	   			// SİNYAL KAYNAĞI PLL	 APB1 HCLK/16

	RCC->APB1ENR |= 0x00000020;		    //Timer7 ye clock verelim
	TIM7->DIER = 0x1;
	TIM7->PSC = 0x157;			  		//182=B6  182*5= H393
	TIM7->ARR = 0xFFFF;
	TIM7->CR1  = 0x85;
	NVIC->ISER[1] = 0X00800000;        // NVIC de Timer 7 interrupta izin verelim

} 
																										   
void delay(unsigned int i)
{   unsigned int z;
    for(z=0;z<i;z++);
	 
}
 
 
int main()
{
    while(1)
   {
     if(ih ==0)
	 	GPIOC->ODR= 0x20;     // Ledler yansin
	 else
	 	GPIOC->ODR= 0x200;     // Ledler yansin
	 delay(0x80000);
     GPIOC->ODR= 0x00000000;     // Ledler sonsun
	 delay(0x80000);
   } 
}


CM3 için timer7 yi kullanan interrupt örneği ,sizin kodlar aynen çalışıyor ,anlamadığım nokta neden zg =   TIM7->SR; gibi bir kodla bu biti okuyoruz? Okumadan önce sıfırlamıştık ,kodu kendim yazarken program istediğim gibi çalışmıyordu sizin koddan bu kısmı aynen kopyaladım ve şimdi çalışıyor olay ne anlamadım gece gece :)

z

Şu ana kadar neler yaptık;

CPU clock kaynağını kullanmayı,
GPIO portunu I/O olarak kullanmayı,
GPIO yu alternatif fonksiyon amaçlı kullanmayı,
Timer kullanmayı,
Interrupt kullanmayı

Çok basit anlamda da olsa gördük.

Kartlarınız geldiğinde bunları bizzat deneme şansınız olacak.

Şu anda deneme yapmamız gereken DMA, UART, I2C konuları var. Aslında çok konu var.

Fakat C dersleri geride kaldı. Ayrıca kursa katılanlar konuları takip ediyorlarmı etmiyorlarmı, anlıyorlarmı anlamıyorlarmı hiç fikrim yok.

Öte yandan ARM programlamayı, registerlere kuru sayılar yükleyerek yazmak gördüğünüz gibi mümkün hatta çok kısa kodlarla işler yütülebiliyor fakat okunurluğu yok.

Bundan sonrası için nasıl yola devam edelim?

Biraz dinlenelim mi?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

gambit1244

#231
arkadaşlar AHB hız ayarlamasını çalışıyordumda kafama takıldı




burda 8 9. bitler rezerve
0xx: AHB clock not divided         
100: AHB clock divided by 2

şimdi biz
AHB yi   RCC->CFGR |= 0x00009400;  olarak ayarladıgımızda
AHB ye 4 yazmış oluyoruz
           
0xx olanımı yoksa
100 olan yani 2 ye bölenimi seçmiş oluyoruz


[email]tufan_ozbek@hotmail.com[/email] Yesterday is history. Tomorrow is a mystery. Today is a gift aslında bütün mesele bu.

stlg

Mesela

Bits 2y:2y+1 MODERy[1:0]: Port x configuration bits (y = 0..15)

Register ayarlamalarında sıkca gecen bu ifadelerin ne anlama geldigini biraz anlatabilirmisiniz
ALLAHA EMANET OLUNUZ Hoştur bana senden gelen,  Ya gonca gül yahut diken,  Ya kaftandır yahut kefen,  Kereminde hoş lütfunda hoş.

mcan

Alıntı yapılan: stlg - 24 Ekim 2011, 01:48:54
Mesela

Bits 2y:2y+1 MODERy[1:0]: Port x configuration bits (y = 0..15)

Register ayarlamalarında sıkca gecen bu ifadelerin ne anlama geldigini biraz anlatabilirmisiniz

Burada diyorki mesela y=6 olsun Port x için 6.pin ile alakalı Moder MODER6 dır. Moder 6 ise 2*6= 12. ile 2*6+1 = 13. bitler tarafından kontrol edilir.

z

Alıntı yapılan: stlg - 24 Ekim 2011, 01:48:54
Mesela

Bits 2y:2y+1 MODERy[1:0]: Port x configuration bits (y = 0..15)

Register ayarlamalarında sıkca gecen bu ifadelerin ne anlama geldigini biraz anlatabilirmisiniz

Gereksiz yere kafa karıştırmış.

y gördüğün yere 0....15 arasında sayılar koyabilirsin.

2y ve 2y+1 ile, seçtiğin y'ye ait pinin registerdeki bit numaralarını bulabiliyorsun.

Mesela y=1 için yani  GPIOnun 1'ci pinin ayarlamasını MODER registerinde 2*1=2 ve 2*1+1=3 nolu bitler yapıyor.

0.pin 0,1
1.pin 2,3
3.pin 4.5 gibi

Adam bunu formülize etmiş  Bits 2y:2y+1 MODERy[1:0]: Port x configuration bits (y = 0..15) demiş.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mcan

Bu vektör tablo olayıda neyin nesi? Kesme olduğu zaman dallanacağı adresi mi değiştirmeye yarıyor?

z

#236
Alıntı yapılan: mcan - 24 Ekim 2011, 01:30:45
....CM3 için timer7 yi kullanan interrupt örneği ,sizin kodlar aynen çalışıyor ,anlamadığım nokta neden zg =   TIM7->SR; gibi bir kodla bu biti okuyoruz? Okumadan önce sıfırlamıştık ,kodu kendim yazarken program istediğim gibi çalışmıyordu sizin koddan bu kısmı aynen kopyaladım ve şimdi çalışıyor olay ne anlamadım gece gece :)


Software can read as well as clear this bit by writing 0.

Bu cümlenin tam olarak Türkçe karşılığı nedir?

Software bu biti okuyabilir, sifir yazarak bu biti silebilir.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ErsinErce

#237
reserve bitlere ne yazarsanız farketmez sonuçta hep aynı değeri okursunuz
atama yaparken o bitleri es geçme gibi bir durum söz konusu değil
0x00009400 ile 8 e bölünüyor
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1    0   0   1   1   0  0 0 0 0 0 0 0 0 0 0
bunalmis hocanın dersinde verdiği program ile daha net görebilirsin

ayrıca
TIMx_SR rc_w0 tipinde bir yazmaçmış ilk cümle tam türkçeye nasıl çevrilir tıkandım
(rc_w0: Software can read as well as clear this bit by writing 0. Writing '1' has no effect on the bit value.)

z

Alıntı yapılan: mcan - 24 Ekim 2011, 02:04:19
Bu vektör tablo olayıda neyin nesi? Kesme olduğu zaman dallanacağı adresi mi değiştirmeye yarıyor?

Interrupt oluştuğunda ve kabul edildiğinde İşlemci hangi interrupt programını koşturacağını bu vektörden öğreniyor.

Bu tablo hazır. Size düşen tek şey, interruptın numarasından yada adından yola çıkıp Startup dosyasında vektor bölümündeki label adını öğrenmek ve C programınızda yazacağınız fonksiyona bu adı vermek.



Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mcan

#239
Alıntı yapılan: bunalmis - 24 Ekim 2011, 02:05:23


Software can read as well as clear this bit by writing 0.

Bu cümlenin tam olarak Türkçe karşılığı nedir?
İşin açığı ben o cümleyi tam anlamadım, anladığım yazılım bu biti okumanın yanısıra 0 yazarak silebilir de.Yani hem okuyabiliriz yada istersek 0 yazıp silebiliriz.

Eğer anlamı "yazılım o biti 0 yazarak silmenin yanı sıra okuyarak da silebilir." ise neden iki kere sildik?