Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: yamak - 26 Kasım 2014, 11:51:01

Başlık: Stm32f4 Bit-Banding problemi
Gönderen: yamak - 26 Kasım 2014, 11:51:01
Stm32f401'de bit-banding ile gpio'lara erişmeye çalışıyorum.Fakat istediğim gpio yu set edebilirken reset edemiyorum.Örneğin GPIOD-13 pinine aşağıdaki gibi eriştiğimde set edebiliyorum

*((unsigned int*)0x42418334)=1;

fakat aşağıdaki gibi yaptığımda reset edemiyorum

*((unsigned int*)0x42418334)=0;

Gözümden kaçırdığım bi kısım mı var acaba?
Başlık: Ynt: Stm32f4 Bit-Banding problemi
Gönderen: z - 26 Kasım 2014, 12:00:04
GPIO set ve reset registerleri ayri ayri. Bir de output registeri var.

Output registerinden 1 ve 0 yaparak pini 1/0 yapabilirsin. Fakat Set registerine 1 yapip pini 1 yaparken 0 yazarak pini 0 yapamazsin.

Başlık: Ynt: Stm32f4 Bit-Banding problemi
Gönderen: yamak - 26 Kasım 2014, 12:05:31
Hocam zaten yukardaki adres ODR'nin
Başlık: Ynt: Stm32f4 Bit-Banding problemi
Gönderen: z - 26 Kasım 2014, 12:15:54
Problemi gorunce dogrudan set  reset registere ulastigini dusundum. Adresi hesaplamadim ama adresi bir daha kontrol et derim.
Başlık: Ynt: Stm32f4 Bit-Banding problemi
Gönderen: yamak - 26 Kasım 2014, 13:26:16
Hocam adres hesabım aşağıdaki gibi:
#define BITBAND_BASE_ADDRESS 0x42000000
#define PERIPHERAL_BASE_ADDRESS 0x40000000
#define BITBAND_ADDRESS(gpio_base,bit) ((unsigned int*)(BITBAND_BASE_ADDRESS+((gpio_base+0x18-PERIPHERAL_BASE_ADDRESS)<<5)+ (bit<<2)))

Kullanım şeklimde aşağıdaki gibi:
*BITBAND_ADDRESS(GPIOD_BASE,13)=1;
*BITBAND_ADDRESS(GPIOD_BASE,13)=0;

şeklinde.
Başlık: Ynt: Stm32f4 Bit-Banding problemi
Gönderen: z - 26 Kasım 2014, 13:43:45
0x18 ile neden topluyorsun?
Başlık: Ynt: Stm32f4 Bit-Banding problemi
Gönderen: yamak - 26 Kasım 2014, 13:44:30
Hocam ODR'nin offseti.
Başlık: Ynt: Stm32f4 Bit-Banding problemi
Gönderen: z - 26 Kasım 2014, 13:44:53
0x0C değilmi?

Edit: Yalniz STM32F10x diye baktim, F45de hakli olabilirsin. F4 dokumanina bakmadim.
Başlık: Ynt: Stm32f4 Bit-Banding problemi
Gönderen: yamak - 26 Kasım 2014, 13:45:37
Hocam şu an farkettim ODR'nin offseti 0x14 müş.Yani durum sizin dediğiniz gibi oluyor.0x18 BSRR nin offseti'ymiş.:)
Başlık: Ynt: Stm32f4 Bit-Banding problemi
Gönderen: magnetron - 26 Kasım 2014, 14:16:49
@yamak hocam

neden standart peripheral library 'i kullanmıyorsunuz ?

orada register seviyesinde uğraşmazsınız kolayca yazarsınız
Başlık: Ynt: Stm32f4 Bit-Banding problemi
Gönderen: yamak - 26 Kasım 2014, 14:44:35
Hocam Std library i gerekli durumlarda kullanıyorum.Şimdi yazdığım programda yaklaşık 60 adet gpio'yu USB den gelen bilgiye göre kontrol etmem gerekiyodu.Ben de kontrol edilecek tüm pinlerin bit-band adreslerini bir dizide tutup gelen veriyi parse edip diziye index olarak veriyorum ve o pini yine gelen dataya göre 1 veya 0 yapıyorum.O sebepten bu şekilde yapmam daha cazip geldi bana.