STM32F407 Cortex M4 şamataları

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

z

#210
Ornegin Rehber 148 sayfada GPIOx_MODER register açıklamalarında Moder 15,14,13,12 ile ilgili bitlere bakın. (Bit no:31-30, 29-28, 27-26 ve 25-24)

Bunların her biri iki bit tanımlıdır ve 2 bit 4 ayrı durumu belirler. Bunlar;

MODERy[1:0]: Port x configuration bits (y = 0..15)
These bits are written by software to configure the I/O direction mode.

00: Input (reset state)
01: General purpose output mode
10: Alternate function mode
11: Analog mode 

Eğer biz GPIO'nun 15,14,13,12 pinlerini output tanımlayacaksak yukarıdaki bilgiler ışığında bu bitleri  01 yaparız.

--------------------------------------

Fakat, yazım ve okunurluk kolaylığı açısından bazen bazi header dosyalarinda registerlerin her bir biti tanimlanmistir.
Hatta Rehber dokumanin register aciklamalari, header dosyada C formatinda işlenmiştir.


Örneğin

Moder15_Output aslında 0x40000000
Moder14_Output aslında 0x10000000
Moder13_Output aslında 0x04000000
Moder12_Output aslında 0x01000000 olarak hazır tanımlıdır.

Tanımlı değilse de zamanınız varsa kendiniz tek tek tanımlarsınız

Bu durumda Rehber dokumanına aşırı bağımlı GPIOD->MODER = 0x55000000; yazımı yerine

GPIOD->MODER = Moder15_Output | Moder14_Output | Moder13_Output | Moder12_Output; yazabilirsiniz. Bu aslında

GPIOD->MODER = 0x40000000 | 0x10000000 | 0x04000000 | 0x01000000; yazımı demektir ve GPIOD->MODER = 0x55000000; ile tamamen eşanlamlı olur.

GPIOD->MODER = Moder15_Output | Moder14_Output | Moder13_Output | Moder12_Output; yazımını okuduğunuzda Rehbere bakmadan 15, 14,13 ve 12 nin output tanımlı olduğu anlaşılır.

Fakat GPIOD->MODER = 0x55000000; yazımını okuduğunuzda amacı anlayamaz ve Rehber dokumanında GPIOD_MODER in anlatıldığı 148. sayfaya bakmanız gerekir.

--------------------------------------

Header dosyada her bir GPIO biti için ayrı ayrı MODER tanımı yapmak yerine

MODER_INP=0;
MODER_OUT=1;
MODER_ALT=2;
MODER_ANG=3;

benzeri bir tanım yapılıp (Define ile)


Ardından GPIOD->MODER = 0x55000000; yazmak yerine

GPIOD->MODER= MODER_OUT<<30 | MODER_OUT<<28 | MODER_OUT<<26 | MODER_OUT<<24; yazım şekli, anlaşılırlığı biraz olsun artırır.

--------------------------------------

Bir süre sonra biz de bu şekilde kod yazmaya başlayacağız. Fakat şu anda ARM işlemcilerde registerlerin felsefesini öğrenmekteyiz ve bir süre daha hex rakamlarla yolumuza devam etmemiz gerekiyor.

Eğer bu tip tanımların olduğu header dosya bulursanız (bende yok) elimizin altında bekletelim ve bir süre sonra programlarımızda bu header dosyayı kullanalım.

(TI'ın ilgili header dosyaları bu tip tanımlamalardan dolayı o kadar uzundu ki yüzlerce Kb tutuyordu. Fakat programlar hazır bu tanımlardan dolayı çok anlaşılır ve kolay yazılabiliyordu)
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

STM32F407 çipimize yakında interrupt kodu yazacağız.  Cortex M4 NVIC dokumanını bulan varmı?

Interrupt dersini de bitirdiğimizde PIC işlemciyi, register programlama yoluyla kullanan tüm arkadaşlar ARM çipimizi sanki PIC işlemci kullanıyormuşcasına
kullanmaya başlayabilecekler.

Bu durumda PIC'i asm ve/veya Hitech ile kullananlar ARM işlemciye çok çabuk adapte olacaklar. Fakat hazır fonksiyonları (Basic, CCS) kullanan  arkadaşları da unutmayacağız.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

M_B

İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

z

Daha detayli bir dokuman yokmu acaba. Bu dokuman bana biraz soguk geldi.

CM4 NVIC ile CM3 NIVIC farklimidir acaba? Bunu arastiran oldumu? Bana sanki nerdeyse tipa tip aynidir gibi geliyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ilhan_mkp

hocam bu hard dökümanının olduğu linki buraya atabilirmisiniz masa üstünü temizlerken sildim şimdi ilk verdiğiniz linki açamadım

z

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

ilhan_mkp

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0439b/Cihfihfe.html

bu sayfada aradığımız konuda(nvic) birden fazla döküman onun için çok zayıf görünmüş olabilirmi konumuzla alakalı 5 döküman var

ErsinErce

Alıntı yapılan: bunalmis - 23 Ekim 2011, 19:33:20
Daha detayli bir dokuman yokmu acaba. Bu dokuman bana biraz soguk geldi.

CM4 NVIC ile CM3 NIVIC farklimidir acaba? Bunu arastiran oldumu? Bana sanki nerdeyse tipa tip aynidir gibi geliyor.
benzer yapıya sahip diye biliyorum,
hatta çipimiz STM32F2 serisinden geliştirilmiş galiba CPUID gibi konularda bu serinin bilgilerinin unutulduğu erratadan anlaşılıyor.

araştırmak istediğiniz konu ne hocam belki Peripheral driverlarına bakarakta çıkartabiliriz

z

NVIC registerlerinde, interruptlara izin verme, yasaklama, öncelik tanımlama gibi bilgilerin bit bazında anlatıldığı dokümanı arıyorum.

Örnek programlar başlığında Timer7 ile yanıp sönen led programını vermiştim. Bu programı interrupt ile çalışan şekle dönüştüreceğim.

core_cm4.h da yapılan NVIC structure tanımları hiç hoşuma gitmedi. Değiştirmeyi önereceğim fakat bu kezde ST nin kendi örnekleri sorun çıkartacak.
Mecburen mevcut header tanımlamalarına sadık kalacağız.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ErsinErce

ST nin driverlarında misc.h ve misc.c içinde nvic için tanımlamalar barındırıyor bir bakabilir misiniz hocam, yola çıkacak bilgiler verebilir

z

Nerede bunlar? Daha önce ST ile hiç çalışmadım ne nerde bilmiyorum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ErsinErce

#221
http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32f4_dsp_stdperiph_lib.zip

Libraries\STM32F4xx_StdPeriph_Driver içinde .c ler src, .h lar inc klasörü içerisinde
=================================================================
Aslında temel programların anlaşılmasından sonra bu driverlar üzerinden gidebiliriz
sonuçta aynı ayarları yapıyoruz ama bu driverlar sayesinde daha düzenli/anlaşılır duruyor
=================================================================

ayrıca
http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32f4discovery_fw.zip
adresinde discovery'nin üzerinde gelen yazılımın kodları harici USB HOST-Device-OTG kütüphaneleri de mevcut

ve örnekleri de içine belki işinizi kolaylaştırır bunalmis hocam

z

Interrupt kodlarını yazdım fakat bunun için TI dokumanlarından yararlandım. Bu böyle olmayacak muhakkak NVIC ın registerlerini bit bit anlatan dokümanı bulmalıyız.

https://www.picproje.org/index.php/topic,35896.msg256761/topicseen.html#msg256761

Görüldüğü gibi NVIC da ilgili interrupta izin vermek yeterli. Örneğimizde sadece tek interrupt olduğundan  öncelik tanımlamasına gerek yok.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ErsinErce

Reference Manualde verilen Interrupt and exception vectors tablosunda (sf:195) ilk sütun position diyor anladığım kadarıyla burası yazmaçtaki yeri
Piority sütunuda Piority adreslerindeki yerini gösteriyor

ST tabloları alıştığımız yatay pozisyon yerine dikey yapıyor galiba  :o

mcan

Alıntı yapılan: bunalmis - 23 Ekim 2011, 23:33:31
Interrupt kodlarını yazdım fakat bunun için TI dokumanlarından yararlandım. Bu böyle olmayacak muhakkak NVIC ın registerlerini bit bit anlatan dokümanı bulmalıyız.

https://www.picproje.org/index.php/topic,35896.msg256761/topicseen.html#msg256761

Görüldüğü gibi NVIC da ilgili interrupta izin vermek yeterli. Örneğimizde sadece tek interrupt olduğundan  öncelik tanımlamasına gerek yok.
Bunalmiş hocam bende cm3 için yazmaya çalışıyorum ve bu dökümana bakıyorum acaba aradığınız bilgi sayfa 119 dan başlayan bilgilermi ?
Döküman bu ;
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/PROGRAMMING_MANUAL/CD00228163.pdf