MSP430 Programlama Notları
MSP430 Programlama Notları
2.BASKI
2.BASKI
Fe
Feridun GÖKÇEGÖZ ridun GÖKÇEGÖZ
Emre EMANET Emre EMANET M.Fatih İNANÇ M.Fatih İNANÇ Fırat DEVECİ Fırat DEVECİ Erhan YILMAZ Erhan YILMAZ
2. BASKIYA
2. BASKIYA ÖN SÖZÖN SÖZ
MSP430 ile ilgili
MSP430 ile ilgili
oluşturmuş olduğumuz bu kaynak Türkiye’deki en
oluşturmuş olduğumuz bu kaynak Türkiye’deki en
tecrübeli insanların yazılarından derlenerek ve seçilerek bu faydalı kaynak
tecrübeli insanların yazılarından derlenerek ve seçilerek bu faydalı kaynak
ortaya çıkmıştır.
ortaya çıkmıştır.
Başta editörlüğünü ve derlemesini yapmış olduğum bu kitap gerek
Başta editörlüğünü ve derlemesini yapmış olduğum bu kitap gerek
mikrodenetleyicilere giriş, gerekse MSP430 mikrodenetleyicisi hakkında
mikrodenetleyicilere giriş, gerekse MSP430 mikrodenetleyicisi hakkında
önemli bir Türkçe doküman durumundadır. Bu baskısında MSP430’un SPI
önemli bir Türkçe doküman durumundadır. Bu baskısında MSP430’un SPI
donanımı ve ADC10 vb. donanımlar
donanımı ve ADC10 vb. donanımlar üzerinde daha fazla durularak
üzerinde daha fazla durularak
MSP430 ile yapılabilecek uygulamalar attırılmıştır.
MSP430 ile yapılabilecek uygulamalar attırılmıştır.
Başta yazar arkadaşlar olmak üzere hepsine t
Başta yazar arkadaşlar olmak üzere hepsine t
e
e
şekkü
şekkü
r eder, sevgili
r eder, sevgili
Ferhat Umut DİZDAR
Ferhat Umut DİZDAR
hoca
hoca
ma çalışmalarıma ve mikrodenet
ma çalışmalarıma ve mikrodenet
leyici
leyici
konusunda vermiş olduğu
konusunda vermiş olduğu destekten dolayı saygılarımı ve sevgilerimi
destekten dolayı saygılarımı ve sevgilerimi
sunuyorum.
sunuyorum.
Bu kitabın ülkemizdeki teknik insanlara yararlı olmasını diliyor,
Bu kitabın ülkemizdeki teknik insanlara yararlı olmasını diliyor,
herkesin başarılı olmasını canı
herkesin başarılı olmasını canı gönülden istiyorum.
gönülden istiyorum.
Zihniniz hep açık olsun
Zihniniz hep açık olsun
..MSP430
MSP430 Programlama
Programlama
Sayfa
Sayfa
Emre EMANET
Emre EMANET
YAZARLARIMIZ
YAZARLARIMIZ
Feridun GÖKÇEGÖZ
Feridun GÖKÇEGÖZ
www.fgokcegoz.com www.fgokcegoz.com fgokcegoz@yahoo.com fgokcegoz@yahoo.com1987 İstanbul doğumlu. 2001 yılında ilköğretim eğitimini tamamlayıp 1987 İstanbul doğumlu. 2001 yılında ilköğretim eğitimini tamamlayıp Mecidiyeköy Lisesinde (YDA) lise eğitimine devam etti. 2005 yılında Mecidiyeköy Lisesinde (YDA) lise eğitimine devam etti. 2005 yılında lise eğitimini tamamladı ve 2006 yılında Sakarya Üniversitesi Elektrik lise eğitimini tamamladı ve 2006 yılında Sakarya Üniversitesi Elektrik Elektronik Müh. bölümünü kazandı. 2010 yılında başarı ile lisans Elektronik Müh. bölümünü kazandı. 2010 yılında başarı ile lisans eğitimini tamamladı ve 2011 yılından itibaren ise Yıldız Teknik eğitimini tamamladı ve 2011 yılından itibaren ise Yıldız Teknik Üniversitesi Fen Bilimleri Enstitüsü, Elektrik Makineleri ve Güç Üniversitesi Fen Bilimleri Enstitüsü, Elektrik Makineleri ve Güç Elektroniği anabilim dalında yüksek lisans eğitimine devam Elektroniği anabilim dalında yüksek lisans eğitimine devam
etmektedir. etmektedir.
Emre EMANET
Emre EMANET
emanetemre28@gmail.com emanetemre28@gmail.com 1991 Giresun doğ1991 Giresun doğdudu. Liseyi memleketim olan Tirebolu’da Tirebolu. Liseyi memleketim olan Tirebolu’da Tirebolu
Endüstri Meslek Lisesinde Elektrik –
Endüstri Meslek Lisesinde Elektrik – Elektronik TeknolojiElektronik Teknoloji
bölümünde tamamladı. Mikrodenetliyiciler ile lisede tanışma bölümünde tamamladı. Mikrodenetliyiciler ile lisede tanışma veve
uğraşma fırsatı buldu
uğraşma fırsatı buldu..MEB proje tabanlı beceri yarışmasında il MEB proje tabanlı beceri yarışmasında il 2.liği2.liği
bulunmaktadır
bulunmaktadır.. Şu an Ordu Üniversite’si MYO Kontrol VeŞu an Ordu Üniversite’si MYO Kontrol Ve
Otomasyon Teknolojisi programı 2. sınıf öğrencisi olarak okumakta Otomasyon Teknolojisi programı 2. sınıf öğrencisi olarak okumakta
olan yazar mikrodenetleyiciler ve
olan yazar mikrodenetleyiciler ve otomasyon alanlarındaotomasyon alanlarında uğraşmakta. uğraşmakta.
M.Fatih İNANÇ
M.Fatih İNANÇ
www.fatihinanc.com www.fatihinanc.com fatihinanc@hotmail.com fatihinanc@hotmail.com1989 Ankara doğumlu. 2003 yılında ilkokul eğitimini tamamlayıp 1989 Ankara doğumlu. 2003 yılında ilkokul eğitimini tamamlayıp Anadolu Meslek Lisesi Bilgisayar Bölümünde eğitimine devam etti. Anadolu Meslek Lisesi Bilgisayar Bölümünde eğitimine devam etti. 2008 yılında ise Selçuk Üniversitesi Teknik Eğitim Fakültesi Bi
2008 yılında ise Selçuk Üniversitesi Teknik Eğitim Fakültesi Bilgisayarlgisayar
Sistemleri Öğretmenliğini kazandı. Halen aynı üniversitede 4.Sınıf Sistemleri Öğretmenliğini kazandı. Halen aynı üniversitede 4.Sınıf öğrencisi olarak eğitimine
öğrencisi olarak eğitimine devam etmektedir.devam etmektedir.
MSP430
Fırat DEVECİ
Fırat DEVECİ
www.fxdev.org www.fxdev.org firat_deveci@hotmail.com firat_deveci@hotmail.com1988 yılında İzmir'de doğdu. 2011 yılında Ege Üniversitesi Elektrik ve Elektronik 1988 yılında İzmir'de doğdu. 2011 yılında Ege Üniversitesi Elektrik ve Elektronik Mühendisliği'ni Tez Birincisi olarak bitirdi.
Mühendisliği'ni Tez Birincisi olarak bitirdi. Yazarın ilgi alanı Yazarın ilgi alanı yenilenebilir enerji, güç elektroniği,yenilenebilir enerji, güç elektroniği, mikrodenetleyiciler ve kontrol uygulamaları olarak sıralanmaktadır.
mikrodenetleyiciler ve kontrol uygulamaları olarak sıralanmaktadır. Bir tanesi IEEE'de olmakBir tanesi IEEE'de olmak
üzere çeşitli sempozyumlarda 3 makalesi bulunan 2011 yılı itibari ile yine aynı üniversitede üzere çeşitli sempozyumlarda 3 makalesi bulunan 2011 yılı itibari ile yine aynı üniversitede yüksek lisansını
yüksek lisansını sürdürmektesürdürmektedir.dir.
Erhan YILMAZ
Erhan YILMAZ
erhanyilmaz.ytu@gmail.com
erhanyilmaz.ytu@gmail.com
20-02-1990
20-02-1990 doğdu. Elektroniğe 2004 yılında İstanbul Kartaldoğdu. Elektroniğe 2004 yılında İstanbul Kartal endüstri meslek lisesine girerek başladım. Sonrasında Marmara endüstri meslek lisesine girerek başladım. Sonrasında Marmara üniversitesi endüstriyel elektronik bölümüne geçip oradan de üniversitesi endüstriyel elektronik bölümüne geçip oradan devamvam
ettim. 2009 itibari ile Marmara üniversitesindeki eğitimimi ettim. 2009 itibari ile Marmara üniversitesindeki eğitimimi tamamladım. Sonrasında 1 sene hazırlanıp dgs sınavı ile Yıldız tamamladım. Sonrasında 1 sene hazırlanıp dgs sınavı ile Yıldız Teknik üniversitesi elektronik haberleşme mühendisliğine
Teknik üniversitesi elektronik haberleşme mühendisliğine girdim.girdim. Elektronik anlamda çeşitli analog uygulamalarım olmakla
Elektronik anlamda çeşitli analog uygulamalarım olmakla beraberberaber genel olarak sayısal
genel olarak sayısal elektronik ve mikro denetleyiciler ileelektronik ve mikro denetleyiciler ile
uğraşıyorum. Şu an halen Yıldız teknikte (3.
uğraşıyorum. Şu an halen Yıldız teknikte (3. sınıf) okumaktayım.sınıf) okumaktayım.
MSP430
İÇİNDEKİLER
İÇİNDEKİLER
SAYFA NO
SAYFA NO
BÖLÜM 1 –
BÖLÜM 1 – MSP430 GENEL ÖZELLİKLERİ VE OSC AYARLARI
MSP430 GENEL ÖZELLİKLERİ VE OSC AYARLARI
8
8
1.1-1.1-
)MSP430’a Genel Bakış
)MSP430’a Genel Bakış
8
8
1.2-1.2-
)MSP430’un Donanımsal Mimarisi Ve Temel Blok Diyagramı
)MSP430’un Donanımsal Mimarisi Ve Temel Blok Diyagramı
8
8
1.3-1.3-
)LaunchPad Paket İçeriği Ve Üzerindeki Bağlantılar
)LaunchPad Paket İçeriği Ve Üzerindeki Bağlantılar
9
9
1.4-1.4-
) İlk Uygulama Yazma
) İlk Uygulama Yazma
10
10
1.5-1.5-
) MSP430 Osilatör Ayarları
) MSP430 Osilatör Ayarları
12
12
BÖLÜM 2 –
BÖLÜM 2 –
MSP430 RISC CPU
MSP430 RISC CPU
2.1-2.1-
) MSP430 16 BİT RISC CPU
) MSP430 16 BİT RISC
CPU
BÖLÜM
BÖLÜM
3
3
–
– MSP430 GİRİŞ ÇIKIŞ AYARLARI
MSP430 GİRİŞ ÇIKIŞ AYARLARI
13
13
3.1-3.1-
) Pin Yönlendirme Ve Kullanımı
) Pin Yönlendirme Ve Kullanımı
13
13
3.2-3.2-
) Port Okuma Ve Yazma Uygulaması
) Port Okuma
Ve Yazma Uygulaması
18
18
BÖLÜM
BÖLÜM
4
4
–
– MSP430 TİMER AYARLARI
MSP430 TİMER AYARLARI
20
20
4.1-4.1-
) TimerA Bölümü
) TimerA Bölümü
20
20
4
4
.1.1) TimerA Sayıcı Modu
.1.1) TimerA Sayıcı Modu
21
21
4.1.1.1-)TimerA
4.1.1.1-)TimerA Stop
Stop Modu
Modu
22
22
4.1.1.2-)TimerA
4.1.1.2-)TimerA Up
Up Modu
Modu
22
22
4.1.1.3-)
4.1.1.3-) TimerA
TimerA Continuous
Continuous Modu
Modu
26
26
4.1.1.4-)
4.1.1.4-) TimerA
TimerA Down
Down Modu
Modu
26
26
4.1.2) TimerA Up/Down Modunu Kullanarak Basit PWM
4.1.2) TimerA Up/Down Modunu Kullanarak Basit PWM
Sinyali Üretmek
Sinyali Üretmek
28
28
BÖLÜM
BÖLÜM
5
5
–
– ADC10 MODÜLÜ
ADC10 MODÜLÜ
28
28
5.1-5.1-
)ADC İşlemleri
)ADC İşlemleri
29
29
5.1.1-)Referans
5.1.1-)Referans Belirleme
Belirleme
29
29
5.1.2-5.1.2-
)Çevrim Frekansı Belirleme
)Çevrim Frekansı Belirleme
29
29
5.1.3-5.1.3-
)ADC10 Giriş Seçimi
)ADC10 Giriş Seçimi
30
30
5.2-)ADC
5.2-)ADC
Kullanım Registerleri
Kullanım Registerleri
30
30
5.3-5.3-
) Sıcaklık
) Sıcaklık Sensörü
Sensörü
33
33
5.4-5.4-
) ADC10 Modülü İle Gerilim Ölçümü
) ADC10 Modülü İle Gerilim Ölçümü
38
38
BÖLÜM
BÖLÜM
6
6
–
– MSP430 İLE DİSPLAY KONTROL UYGULAMASI
MSP430 İLE DİSPLAY KONTROL UYGULAMASI
43
43
6.1-6.1-
) Displayler Hakkında Genel Bilgiler
) Displayler Hakkında Genel Bilgiler
43
43
6.2-) 74HC164
6.2-) 74HC164
İle Display Sürme
İle Display Sürme
44
44
6.3-6.3-
) MSP430 7448 İle Yukarı Aşağı Sayıcı
) MSP430 7448 İle
Yukarı Aşağı Sayıcı
48
48
MSP430
BÖLÜM
BÖLÜM
7
7
–
– MSP430 İLE LCD KONTROL UYGULAMASI
MSP430 İLE LCD KONTROL UYGULAMASI
53
53
7.1-7.1-
) LCD Hakkında Genel Bilgiler
) LCD Hakkında Genel Bilgiler
53
53
7.2-7.2-
) MSP430 2X16 LCD Uygulaması
) MSP430 2X16 LCD Uygulaması
56
56
7.3-)
7.3-) MSP430,
MSP430, 74HC595
74HC595 ve
ve LCD
LCD
60
60
BÖLÜM
BÖLÜM
8
8
–
– MSP430 İLE KEYPAD(TUŞ TAKIMI) KONTROL UYGULAMASI
MSP430 İLE KEYPAD(TUŞ TAKIMI) KONTROL UYGULAMASI
67
67
8.1-8.1-
) Tuş Takımı Hakkında Genel Bilgiler
) Tuş Takımı Hakkında Genel Bilgiler
67
67
8.2-8.2-
) MSP430 İle Tuş Takımı
) MSP430 İle Tuş Takımı Uygulam
Uygulaması
ası
69
69
8.3-8.3-
) MM74C922 İle Tuş Takımı Uygulaması
) MM74C922 İle
Tuş Takımı Uygulaması
72
72
BÖLÜM 8 –
BÖLÜM 8 – MSP430 I2C MODÜLÜ
MSP430 I2C MODÜLÜ
76
76
8.1-)
8.1-) I2C
I2C Master
Master Modu
Modu
76
76
8.2-)
8.2-) I2C
I2C Slave
Slave Modu
Modu
77
77
8.3-)
8.3-) I2C
I2C Transmitter
Transmitter
77
77
8.4-)
8.4-) I2C
I2C Reveiver
Reveiver
77
77
8.5-)
8.5-) Start
Start Durumu
Durumu
78
78
8.6-)
8.6-) Stop
Stop Durumu
Durumu
78
78
8.7-)
8.7-) Kesmeler
Kesmeler
78
78
BÖLÜM 9 –
BÖLÜM 9 – MSP430 İLE DC
MSP430 İLE DC
MOTOR
MOTOR
KONTROLÜ
KONTROLÜ
87
87
BÖLÜM 10 –
BÖLÜM 10 – MSP430 İLE SD VE MMC KART UYGULAMASI
MSP430 İLE SD VE MMC KART UYGULAMASI
92
92
10.1-10.1-
) MSP430 SD/MMC Uygulaması
) MSP430 SD/MMC Uygulaması
93
93
BÖLÜM 11 –
BÖLÜM 11 –
MSP430
MSP430 EK
EK DONANIMLARI
DONANIMLARI
97
97
11.1-)
11.1-) ez430
ez430 Chronos
Chronos
97
97
11.1.1-11.1.1-
)Kutu İçeriği
)Kutu İçeriği
98
98
11.1.2-11.1.2-
)Teknik Özellikler
)Teknik Özellikler
98
98
11.1.3-11.1.3-
)ez430 Bilgisayar Arayüzü
)ez430 Bilgisayar Arayüzü
99
99
11.2-)eZ430-11.2-)eZ430-
RF2500 İncelemesi
RF2500 İncelemesi
101
101
BÖLÜM 12 –
BÖLÜM 12 – EK KISIM / DERLEYİCİLER VE KULLANILAN DONANIMLAR
EK KISIM / DERLEYİCİLER VE KULLANILAN DONANIMLAR
106
106
12.1-12.1-
) IAR Kullanımı
) IAR Kullanımı
106
106
12.2)
12.2) Code
Code Composer
Composer Studio
Studio
109
109
12.3-12.3-
) Kullanılan Donanımlar
) Kullanılan Donanımlar
112
112
KAYNAKÇA
KAYNAKÇA
113
113
MSP430
BÖLÜM 1 –
BÖLÜM 1 – MSP430 GENEL ÖZELLİKLERİ VE OSC AYARLARI
MSP430 GENEL ÖZELLİKLERİ VE OSC AYARLARI
1.1-) MSP430
1.1-) MSP430’a’a Genel BakışGenel Bakış
Şekil 1
Şekil 1 - MSP430G2231 Genel Yap- MSP430G2231 Genel Yapısıısı
MSP430 Texas Instrument firmasının ürettiği çok düşük güç tüketimiyle ön plana çıkan MSP430 Texas Instrument firmasının ürettiği çok düşük güç tüketimiyle ön plana çıkan
bir mikrodenetleyicidir.
bir mikrodenetleyicidir. Von NeumannVon Neumann mimarisinde 16 Bit RISC mimarisine sahip birmimarisinde 16 Bit RISC mimarisine sahip bir mikrodenetleyicidir.
mikrodenetleyicidir. İçerisinde I2C, SPI, USART, ADC gibi klasik haline gelmiş birçokİçerisinde I2C, SPI, USART, ADC gibi klasik haline gelmiş birçok modmodülüülü
barındırmaktadı barındırmaktadır.r. MSP430G2201 MSP430G22011 MSP430G2221 MSP430G2231 MSP430G2201 MSP430G22011 MSP430G2221 MSP430G2231 Program Memory(kB) Program Memory(kB) 2 2 2 2 2 2 22 SRAM(Bytes) SRAM(Bytes) 128 128 128 128 128 128 128 128 I/O Pins I/O Pins 10 10 10 10 10 10 10 10 16-bit Timers 16-bit Timers 1 1 1 1 1 1 11 Capture/Compare Registers Capture/Compare Registers 2 2 2 2 2 2 22 USI:I2C/SPI USI:I2C/SPI 11 ADC Channels ADC Channels 8 8 ADC Resolutions(Bits) ADC Resolutions(Bits) 10 10 Şekil 2
Şekil 2 --MSP430G2x21, MSP430G2x31 Ailesinin Genel Özellikleri MSP430G2x21, MSP430G2x31 Ailesinin Genel Özellikleri 1.2-)
1.2-)MSP430’un Donanımsal Mimarisi Ve Temel Blok DiyagramıMSP430’un Donanımsal Mimarisi Ve Temel Blok Diyagramı
Şekil 3 –
Şekil 3 – MSP430’ MSP430’ ununTemel Blok DiyagramıTemel Blok Diyagramı
MSP430
1.3-)
1.3-)LaunchPad Paket İçeriği Ve Üzerindeki BağlantılarLaunchPad Paket İçeriği Ve Üzerindeki Bağlantılar
Şekil
Şekil 4 - LaunchPad 4 - LaunchPad Ve Üzerindeki Bağlantılar Ve Üzerindeki Bağlantılar
LaunchPad’i satın aldığınızda kutusundan 2 adet sticker, programlamak için USB LaunchPad’i satın aldığınızda kutusundan 2 adet sticker, programlamak için USB
kablosu,MSP430G2231 mikrodenetleyici ve MSP430G2211 mikrodenetleyicisi
kablosu,MSP430G2231 mikrodenetleyici ve MSP430G2211 mikrodenetleyicisini barıdıyor.ni barıdıyor. MSP430G2231
MSP430G2231 LaunchPad’in üstünde montaLaunchPad’in üstünde monta j jlı haldelı halde geliyor.geliyor. Ayrıca 32.768Mhz mikro kristalAyrıca 32.768Mhz mikro kristal
ve hızlı başlangıç rehberiyle
ve hızlı başlangıç rehberiyle birliktebirlikte mikrodenetleyiciden çıkış veya giriş almak için dişi pinmikrodenetleyiciden çıkış veya giriş almak için dişi pin yuvası ve erkek pin bulunuyor.
yuvası ve erkek pin bulunuyor. Hızlı başlangıç rehberi bize MSP430’u Hızlı başlangıç rehberi bize MSP430’u tanıtıyor ve programlarınıtanıtıyor ve programlarını
nereden
nereden indirebileceğimizi bize gösteriyor.indirebileceğimizi bize gösteriyor. LaunchPad ayrıca 20 Pin mikrodenetleyicilerideLaunchPad ayrıca 20 Pin mikrodenetleyicileride desteklemektedir.
desteklemektedir.
Şekil 5
Şekil 5 – – MSP430G2231 Ve 20 Pin MSP430’lar MSP430G2231 Ve 20 Pin MSP430’lar
MSP430
1.4-1.4-) İlk Uygulama Yazma) İlk Uygulama Yazma
İlk uygulamamızda LaunchPad’in üzerindeki LED’i yakıp söndürmeyi
İlk uygulamamızda LaunchPad’in üzerindeki LED’i yakıp söndürmeyi öğreneceğiz.öğreneceğiz. ŞemadaŞemadakiki
entegre Proteus programında MSP430G2231 olmadığı için bu entegrenin aynı
entegre Proteus programında MSP430G2231 olmadığı için bu entegrenin aynı donanımsaldonanımsal yapısında olan başka bir
yapısında olan başka bir entegre kullanılmıştır.entegre kullanılmıştır.
Şekil
Şekil 6 -6 -İlk Uygulamanın Devre Şemasıİlk Uygulamanın Devre Şeması
Bu uygulamamız için LaunchPad’in P1.0 uçuna bağlı LED’i yakacağız.
Bu uygulamamız için LaunchPad’in P1.0 uçuna bağlı LED’i yakacağız. Hiçbir bağlantıHiçbir bağlantı yapmadan donanım üstünde bu deneyeceğiz.
yapmadan donanım üstünde bu deneyeceğiz. İlk uygulamayı yazmadan önce uygulamaİlk uygulamayı yazmadan önce uygulama kodunun açıklamalarını sindirerek okumanızı tavsiye ediyorum.
kodunun açıklamalarını sindirerek okumanızı tavsiye ediyorum.
#include "io430.h" #include "io430.h" #include "in430.h" #include "in430.h" #define
#define LED LED P1OUT_bit.P0P1OUT_bit.P0 void delay (void)
void delay (void) { { unsigned int j; unsigned int j; for(j=50000;j;j--); for(j=50000;j;j--); } }
void main( void ) void main( void ) { { WDTCTL = WDTPW + WDTHOLD; WDTCTL = WDTPW + WDTHOLD; DCOCTL=CALDCO_1MHZ; DCOCTL=CALDCO_1MHZ; BCSCTL1=CALBC1_1MHZ; BCSCTL1=CALBC1_1MHZ; P1OUT = 0x00; P1OUT = 0x00; P1DIR = 0x01; P1DIR = 0x01; for(;;) for(;;) { { delay(); delay(); LED ^=1; LED ^=1; } } } } XIN/P2.6/TA1 XIN/P2.6/TA1 13 13 XOUT/P2.7XOUT/P2.7 12 12 TEST/SBWTCKTEST/SBWTCK 11 11 RST/NMI/SBWTDIORST/NMI/SBWTDIO 10 10 P1.2/TA1/CA2 P1.2/TA1/CA2 44 P1.1/TA0/CA1 P1.1/TA0/CA1 33 P1.0/TACLK/ACLK/CA0 P1.0/TACLK/ACLK/CA0 22 P1.3/CAOUT/CA3 P1.3/CAOUT/CA3 55 P1.4/SMCLK/CA4/TCK P1.4/SMCLK/CA4/TCK 66 P1.7/CAOUT/CA7/TDO/TDI P1.7/CAOUT/CA7/TDO/TDI 99 P1.6/TA1/CA6/TDI/TCLK P1.6/TA1/CA6/TDI/TCLK 88 P1.5/TA0/CA5/TMS P1.5/TA0/CA5/TMS 77 U1 U1 MSP430F2011 MSP430F2011 D1 D1 LED-RED LED-RED R1 R1 330 330
MSP430
Program kodumuzu inceleyelim. Program kodumuzu inceleyelim.
İlk 2 satırda MSP430’un
İlk 2 satırda MSP430’un tanımlanması ve kodların çalışması için kütüphane dosyalarını ekledik.tanımlanması ve kodların çalışması için kütüphane dosyalarını ekledik. Eğer örneğin 2 satırdaki
Eğer örneğin 2 satırdaki #include "in430.h"#include "in430.h" kkütüphanesini eklememiş olsaydık,ütüphanesini eklememiş olsaydık, p
programımız çalışmayacaktı veya rogramımız çalışmayacaktı veya IAR Studio biIAR Studio bize yazdığın kze yazdığın kodu ilk satıodu ilk satırdaki rdaki kütüphanekütüphane dede
bulamıyorum gibisinden bir hata
bulamıyorum gibisinden bir hata verecekti.verecekti. 3 satırdaki kod ise Led
3 satırdaki kod ise Led bağlı ucu programımıza bildirmemize yarıyor.bağlı ucu programımıza bildirmemize yarıyor.
WDTCTL = WDTPW + WDTHOLD;
WDTCTL = WDTPW + WDTHOLD; satırında isesatırında ise WatchDog Timer pasif hale getirilmesiyleWatchDog Timer pasif hale getirilmesiyle
başlamış. Eğer bu satır olmasaydı, mikrodenetleyicinin içind
başlamış. Eğer bu satır olmasaydı, mikrodenetleyicinin içinde bulunan WDT birimi belirlie bulunan WDT birimi belirli p
periyotlarla, temizlenmediği takdirde mikrodenetleyiciye reset eriyotlarla, temizlenmediği takdirde mikrodenetleyiciye reset attıracaktıattıracaktı.. DCOCTL=CALDCO_1MHZ;
DCOCTL=CALDCO_1MHZ; BCSCTL1=CALBC1_1MHZ; BCSCTL1=CALBC1_1MHZ;
Bu satırda ise mikrodenetleyicinin çalışması için gerekli saat darbelerinin ayarlarlamaları Bu satırda ise mikrodenetleyicinin çalışması için gerekli saat darbelerinin ayarlarlamaları yapılmakta. Bunun
yapılmakta. Bunun için dahili RC osilatör, 1MHz e ayarlanmış ve mikrodenetleyicinin clockiçin dahili RC osilatör, 1MHz e ayarlanmış ve mikrodenetleyicinin clock modülüne bu frekans için
modülüne bu frekans için kalibrasyon değerleri yüklenmiştir.kalibrasyon değerleri yüklenmiştir.
Bir sonraki satırda ise led’in bağlı olduğu pin ile ilgili ayarlamalar yapılmaktadır. MSP430 un Bir sonraki satırda ise led’in bağlı olduğu pin ile ilgili ayarlamalar yapılmaktadır. MSP430 un
pinleri bir adet register
pinleri bir adet register üzerinden okunup yazılamamaktadır. İlgili pin giriş konumundaysa,üzerinden okunup yazılamamaktadır. İlgili pin giriş konumundaysa, PXIN Register’ından, ilgili pin, çıkış
PXIN Register’ından, ilgili pin, çıkış konumundaysa, PXOUT register ından ilgili değerler okunupkonumundaysa, PXOUT register ından ilgili değerler okunup yazılmaktadır. Bu satırda ilk olarak,
yazılmaktadır. Bu satırda ilk olarak, P3OUT pini sıfırlanmakta ve alt satırda, ilgiliP3OUT pini sıfırlanmakta ve alt satırda, ilgili pin in DATApin in DATA
DIRECTION Register’ına, çıkış olarak kullanacağımızın bilgisi
DIRECTION Register’ına, çıkış olarak kullanacağımızın bilgisi verilmekteverilmektedir.dir. MSP430’larda herhangi bir pini çıkış yapmak istiyorsak
MSP430’larda herhangi bir pini çıkış yapmak istiyorsak o pinin DATA DIRECTION Ro pinin DATA DIRECTION Register’ınaegister’ına
Lojik1, giriş yapmak istiyorsak o pinin DATA DIRECTION Register’ına Lojik0 yükleme Lojik1, giriş yapmak istiyorsak o pinin DATA DIRECTION Register’ına Lojik0 yüklememizmiz gerekmektedir.
gerekmektedir.
Herhangi bir pini Digital I/O olarak kullanabilmemiz için, DIRECTION register ı Lojik 1, Herhangi bir pini Digital I/O olarak kullanabilmemiz için, DIRECTION register ı Lojik 1, SELECTION Register’ı Lojik 0 olması gerekir. İlgili pin ADC girişi olarakta kullanılabiliyorsa, o pin SELECTION Register’ı Lojik 0 olması gerekir. İlgili pin ADC girişi olarakta kullanılabiliyorsa, o pin için ADC10AE0 Register’ına Lojik 0 yazılmalıdır. Fakat
için ADC10AE0 Register’ına Lojik 0 yazılmalıdır. Fakat,, default durumda, zaten Lojik0 olduğudefault durumda, zaten Lojik0 olduğu için yeniden ayarlamaya gerek yoktur.
için yeniden ayarlamaya gerek yoktur.
MSP430
Programımıza devam edecek olursak, ardından sonsuz döngüye girmiş ve belirli bir süre Programımıza devam edecek olursak, ardından sonsuz döngüye girmiş ve belirli bir süre
gecikme fonksiyonunun(
gecikme fonksiyonunun(200ms) ardından LED terslenmektedir ve bu şekilde sürekli aynı işlem200ms) ardından LED terslenmektedir ve bu şekilde sürekli aynı işlem tekrarlanmıştır.
tekrarlanmıştır.
1.5-1.5-) MSP430 Osilatör Ayarları) MSP430 Osilatör Ayarları
İlk uygulamayı yazarken bahsettiğimiz osilatörler hakkında bilgi vereceğim.
İlk uygulamayı yazarken bahsettiğimiz osilatörler hakkında bilgi vereceğim. MSP430 kendiMSP430 kendi
içerisinde kullanacağı 3 adet saat
içerisinde kullanacağı 3 adet saat kaynağına sahiptir. Bunlar;kaynağına sahiptir. Bunlar;
Master Clock (MCLK)
Master Clock (MCLK) : CPU ve : CPU ve birkaç çevresel birim tarafından kullanılır.birkaç çevresel birim tarafından kullanılır.
Sun-system Master Clock (SMCLK)
Sun-system Master Clock (SMCLK) : Çevresel birimler için kullanılır.: Çevresel birimler için kullanılır. Auxiliary Clock (ACLK
Auxiliary Clock (ACLK) : Çevresel birimler için kullanılır.) : Çevresel birimler için kullanılır.
Bu birimlerin nasıl bağlandıkları ve çıkışa nasıl yansıdıkları şekilde görülmektedir. Bu birimlerin nasıl bağlandıkları ve çıkışa nasıl yansıdıkları şekilde görülmektedir.
Şekil
Şekil 7 7 – – Osilatör KaynaklarıOsilatör Kaynakları
Şekil 7’de görülen MCLK veya
Şekil 7’de görülen MCLK veya SMCLK genellikle MHz düzeylerinde iken, ACLK birimi iseSMCLK genellikle MHz düzeylerinde iken, ACLK birimi ise genellikle kHz mertebesinde
genellikle kHz mertebesindedir. MSP430’a saat sinyali üreten 3 dir. MSP430’a saat sinyali üreten 3 birim bulunur:birim bulunur:
Low-or-high-freq-crystal-osc (LFXT1) :
Low-or-high-freq-crystal-osc (LFXT1) : GenGenelde 32kHz civarındadır. Eğer dıştanelde 32kHz civarındadır. Eğer dıştan kristal kullanılacaksa MSP430 ile
kristal kullanılacaksa MSP430 ile senkronize yapılması gerekmektedir.senkronize yapılması gerekmektedir.
Internal Very-Low-Power-Low-Freq-Osc (VLO):
Internal Very-Low-Power-Low-Freq-Osc (VLO): Genellikle MSP430f2xx modellerindeGenellikle MSP430f2xx modellerinde
yaygındır. Kristal kullanılmayacaks
yaygındır. Kristal kullanılmayacaksa LFXT1’in alternatifidir. Msp430f2013 için a LFXT1’in alternatifidir. Msp430f2013 için hızı 12kHz’dir.hızı 12kHz’dir.
Digitally Controlled Osc (DCO) :
Digitally Controlled Osc (DCO) : Tüm MSP430 Tüm MSP430 entegrelerientegrelerinde mevcuttur.nde mevcuttur.
1us içinde çalışmaya başlayan, yazılımsal olara kontrol edilebilen, RC osilatördür. 1us içinde çalışmaya başlayan, yazılımsal olara kontrol edilebilen, RC osilatördür. Frekans ayarlama kısmı DCOCTL, BCSCTL1
Frekans ayarlama kısmı DCOCTL, BCSCTL1-3 registerleri ile IFG1 ve -3 registerleri ile IFG1 ve IE2 bitleri ile kontrol edilir.IE2 bitleri ile kontrol edilir.
Şekil
Şekil 8 - L or H Freq. Crystal Osc 8 - L or H Freq. Crystal Osc
MSP430
BÖLÜM 2 –
BÖLÜM 2 –
MSP430 RISC CPU
MSP430 RISC CPU
2.1-) MSP430
2.1-) MSP43016 BİT16 BİTRISC CPURISC CPU
MSP430’un diğer çevrebirimlerine geçmeden önce işlemcisini inceleyelim. Çünkü sahip olduğu MSP430’un diğer çevrebirimlerine geçmeden önce işlemcisini inceleyelim. Çünkü sahip olduğu işlemcide aşina olduğumuz PIC’te olmayan özellikler var.
işlemcide aşina olduğumuz PIC’te olmayan özellikler var. ASM olarak komut setiASM olarak komut setiIntelIntel’in komut setine’in komut setine benziyor biraz. Toplam
benziyor biraz. Toplam 2727 adetadetkomuta sahip olan MSP430′dakomuta sahip olan MSP430′daASMASM iile program yazmak çok da zorle program yazmak çok da zor değil aslında.
değil aslında.
Biz burada komutlardan fazla bahsetmeyeceğiz. Çünkü komutlar zaten az hem de Biz burada komutlardan fazla bahsetmeyeceğiz. Çünkü komutlar zaten az hem de datasheetinde en ince ayrıntısına kadar anlatılmış.
datasheetinde en ince ayrıntısına kadar anlatılmış. İşlemcinin öne çıkan özelliklerini sıralarsak;
İşlemcinin öne çıkan özelliklerini sıralarsak;
Stack Pointer, Program Counter veStack Pointer, Program Counter ve Status Register a erişebilme,Status Register a erişebilme,
16 Bit adreslemeyle belleğe daha az erişim gerekliliği (fetch),16 Bit adreslemeyle belleğe daha az erişim gerekliliği (fetch),
7 adet adresleme modu,7 adet adresleme modu,
RISC Mimarisine sahip işlemcide toplam 27 adet komut,RISC Mimarisine sahip işlemcide toplam 27 adet komut,
Bazı işlemleri tek komut çevriminde Bazı işlemleri tek komut çevriminde yapabilme,yapabilme,
16 Bit olmasına rağmen byte ya da word16 Bit olmasına rağmen byte ya da word türünde veri adresleyebilmetüründe veri adresleyebilme Herşeyden önce bu
Herşeyden önce bu fetchfetch olayından biraz bahsedelim. Bir işlemcide her ASM komutununolayından biraz bahsedelim. Bir işlemcide her ASM komutunun
makina kodu olarak hexadecimal bir karşılığı vardır. Normalde ASM olarak yazdığımız. makina kodu olarak hexadecimal bir karşılığı vardır. Normalde ASM olarak yazdığımız.
MOV AL,0x33 MOV AL,0x33
kodunun makina dili olarak karşılığı
kodunun makina dili olarak karşılığı B433B433tür.tür. Bu kodBu kod B4B4 veve3333 olmak üzere iki kısıma ayrılır.olmak üzere iki kısıma ayrılır.B4B4
kısmı
kısmı OpcodeOpcode olarak tabir edilen asıl işlenecek olak kısımdır. CPU daki kod çözücü tarafındanolarak tabir edilen asıl işlenecek olak kısımdır. CPU daki kod çözücü tarafından bu kod çözülür ve
bu kod çözülür ve işletilir.işletilir.
Komut kuyruğundaki maksimum büyüklüğü işlemcinin veri yolu dedidiğimiz kısım belir
Komut kuyruğundaki maksimum büyüklüğü işlemcinin veri yolu dedidiğimiz kısım belirler.Buler.Bu
birim eğer 8 bit
birim eğer 8 bit ise işlemci her defasında maksimumise işlemci her defasında maksimum 8 bit(255)8 bit(255)adresleme yapabilir, eğer 16 bitadresleme yapabilir, eğer 16 bit ise de maksimum
ise de maksimum 16 bit(65535)16 bit(65535) adresleme yapabilir. İşlemci, her seferinde veri yolununadresleme yapabilir. İşlemci, her seferinde veri yolunun genişliği kadar veri
genişliği kadar veri işleyebilir.işleyebilir.
Diyelim ki bir toplama işlemi yapacağız ve bu işlemde toplayacağımız sayılardan ilki
Diyelim ki bir toplama işlemi yapacağız ve bu işlemde toplayacağımız sayılardan ilki 14001400 ikincisi ise
ikincisi ise 5353. Bu toplama işlemini 8 bitlik bir mikrodenetleyicide yaptığımızı varsayarsak. Bu toplama işlemini 8 bitlik bir mikrodenetleyicide yaptığımızı varsayarsak işlemci 1400 için
işlemci 1400 için 1400=0×0578(2 byte) 21400=0×0578(2 byte) 2 kez veriyoluna gidip veriyi oradan çekip işleme tabikez veriyoluna gidip veriyi oradan çekip işleme tabi tutacaktır.
tutacaktır.5353 için iseiçin ise 11 kez gitmesi yeterli. Yani bir toplama işlemi için en azkez gitmesi yeterli. Yani bir toplama işlemi için en az 33 kez veriyolunakez veriyoluna
gidip, bilgiyi çekip işleme tabi tutmaktadır. Bu anlattıklarımız 8 bit sistemler için geçerli. gidip, bilgiyi çekip işleme tabi tutmaktadır. Bu anlattıklarımız 8 bit sistemler için geçerli.
Bir de 16 bit sistemlerden bahsedelim. 16 bit bir sistemde bir seferde maksimum Bir de 16 bit sistemlerden bahsedelim. 16 bit bir sistemde bir seferde maksimum 2byte(65535)
2byte(65535) adreslenebildiğinden işlemci 1400 içinadreslenebildiğinden işlemci 1400 için 11 kez, 53 için yinekez, 53 için yine 11 kez veriyolunakez veriyoluna gidecektir. Toplam(en az)
gidecektir. Toplam(en az) 22 seferde işi halledebiliyor. Bir de bunun hız gerektirenseferde işi halledebiliyor. Bir de bunun hız gerektiren
uyg
uygulamalarda ve sürekli olarak yapıldığını düşünün. İşte buulamalarda ve sürekli olarak yapıldığını düşünün. İşte bu veriyoluna gidip bilgiyi getirmeveriyoluna gidip bilgiyi getirme
işlemine
işlemine fetch fetch denilmektedir. Çok kapsamlı programlar yazmadıkça veri yolunun sağladığıdenilmektedir. Çok kapsamlı programlar yazmadıkça veri yolunun sağladığı
fayda pek farkedilmez aslında. O yüzden 8 bitlik bir PIC, Atmel veya 8051 çoğ
fayda pek farkedilmez aslında. O yüzden 8 bitlik bir PIC, Atmel veya 8051 çoğu uygulamalaru uygulamalar
için hala yeterlidir. Ama büyük işlerle uğraşıyorsak 8
için hala yeterlidir. Ama büyük işlerle uğraşıyorsak 8 bit hem vakit kaybettirir hem de zaman.bit hem vakit kaybettirir hem de zaman.
MSP430
MSP430’un CPU biriminde toplam
MSP430’un CPU biriminde toplam 1616adet saklayıcı görev yapmaktadır. Bunlardan ilk 4’üadet saklayıcı görev yapmaktadır. Bunlardan ilk 4’ü iişlemci için özel olarak ayrılmıştır(Dedicateşlemci için özel olarak ayrılmıştır(Dedicated Registers). Bunlar;d Registers). Bunlar; PC,SP,SR/CG1,CG2PC,SP,SR/CG1,CG2 olarakolarak
adlandırılır.Diğer 12 si
adlandırılır.Diğer 12 si ise genel amaçlı(General Purpose Registers)olarak kullanılaise genel amaçlı(General Purpose Registers)olarak kullanılan(n(R4-R15R4-R15
arası)saklayıc
arası)saklayıcılardır.Aşağıdaki resimde bunu biraz daha ılardır.Aşağıdaki resimde bunu biraz daha net anlayabilirsinet anlayabilirsiniz.niz.
MSP430’da yer alan CPU
MSP430’da yer alan CPU kaydedicileri kaydedicileri
PC (Program Counter
PC (Program Counter – –R0) :R0) : 16 bitlik 64-16 bitlik 64-KB adres uzayına sahip program sayıcıdır. HerKB adres uzayına sahip program sayıcıdır. Her
artışında(n+2) bir sonraki işletilecek olan komutu gösterir. Komutlar 2 byte den fazla bile olsa artışında(n+2) bir sonraki işletilecek olan komutu gösterir. Komutlar 2 byte den fazla bile olsa PC ona göre adresleme yapabilir ve
PC ona göre adresleme yapabilir ve atanan tüm komutları bir düzene sokabilir.atanan tüm komutları bir düzene sokabilir.
SP (Stack Pointer
SP (Stack Pointer – – R1) :R1) :Stack pointer Stack pointer dediğimiz alan, işlemcinin herhangi bir kesme veya altdediğimiz alan, işlemcinin herhangi bir kesme veya alt
program geldiği anda
program geldiği anda PC(Program Counter)nin o anki konumunun(adres) kaydedildiği alandır.PC(Program Counter)nin o anki konumunun(adres) kaydedildiği alandır.
Kesme veya alt pro
Kesme veya alt program sonlandığı an PC nereye dallanması gerektiğini buraya kaydettiği engram sonlandığı an PC nereye dallanması gerektiğini buraya kaydettiği en
son adresten bilir. Bu alan MSP430
son adresten bilir. Bu alan MSP430 da RAM’in en yüksek değerlikli bloğunda 0×0280da RAM’in en yüksek değerlikli bloğunda 0×0280 adresinden itibaren yer alır ve
adresinden itibaren yer alır ve dikey olarak(yukarıdan aşağı) adreslenir. Stack Pointer’a herdikey olarak(yukarıdan aşağı) adreslenir. Stack Pointer’a her erişim PUSH(itme) veya POP(çekme) olarak adlandırılır. Her
erişim PUSH(itme) veya POP(çekme) olarak adlandırılır. Her POP işlemiPOP işlemi LIFO((Last In First Out LIFO Last In First Out ))
kuralıyla iş görür ve
kuralıyla iş görür ve reset anında bu saklayıcıreset anında bu saklayıcı sıfırlanırsıfırlanır. Aşağıda, PUSH ve POP anlarında. Aşağıda, PUSH ve POP anlarında SPSP veve PC
PC değerlerine dikkat ediniz.değerlerine dikkat ediniz.
Stack Pointer’da PUSH ve POP işlemleri Stack Pointer’da PUSH ve POP işlemleri
MSP430
Yukarıdaki resimde 0×280 adresinden itibaren adreslenen Stack bölgesinde PUSH ve Yukarıdaki resimde 0×280 adresinden itibaren adreslenen Stack bölgesinde PUSH ve POPPOP olayları anlatılmıştır. Resimde de görüldüğü gibi Stack Pointer’a itilen her adresi, dikey olayları anlatılmıştır. Resimde de görüldüğü gibi Stack Pointer’a itilen her adresi, dikey adreslemeden dolayı RAM’de daha düşük
adreslemeden dolayı RAM’de daha düşük adresli bölgelere yazılmaktadır. Ve çekilen her adresli bölgelere yazılmaktadır. Ve çekilen her değerdeğer için de
için de LIFOLIFOkuralı geçerlidir.kuralı geçerlidir.
SR (Status Register
SR (Status Register – – R2)R2) ::
Status Saklayıcısı Status Saklayıcısı
C(Carry) :
C(Carry) : Eğer bir aritmetik işlem sonucunda elde oluşmuşsa bu bitEğer bir aritmetik işlem sonucunda elde oluşmuşsa bu bit setset edilir.edilir. Z(Zero) :
Z(Zero) : Eğer bir aritmetik işlem sonucu 0 sa Eğer bir aritmetik işlem sonucu 0 sa bu bitbu bit setsetedilir, değilseedilir, değilse 00dır.dır. N(Negative) :
N(Negative) : Eğer bir aritmetik işlem sonucu 0 dan Eğer bir aritmetik işlem sonucu 0 dan küçükse bu bitküçükse bu bit setset edilir.edilir. GIE(General Interrupts Enable) :
GIE(General Interrupts Enable) : Eğer genel kesmelere izin verilmek isteniyorsa bu bitEğer genel kesmelere izin verilmek isteniyorsa bu bit setset edilmelidir.
edilmelidir.
CPU OFF: Düşük
CPU OFF: Düşük güç modu için CPU’yu devre dışı bırakma güç modu için CPU’yu devre dışı bırakma biti, Eğer bu bitbiti, Eğer bu bit setset edilirse CPUedilirse CPU
devre dışıdır. Ve sistem düşük güç modunda çalışmaktadır. devre dışıdır. Ve sistem düşük güç modunda çalışmaktadır.
OSC OFF: Bu
OSC OFF: Bu bit set edilirsebit set edilirse LFXT1LFXT1kristal osilatörü devre dışı kalır.kristal osilatörü devre dışı kalır. SCG0(System Clock Generator 0 ) :
SCG0(System Clock Generator 0 ) : Eğer bu bitEğer bu bitsetset edilirseedilirse DCOCLKDCOCLKdevre dışı kalır.devre dışı kalır. SCG1(System Clock Generator 1 ) :
SCG1(System Clock Generator 1 ) : Eğer bu bitEğer bu bitsetset edilirseedilirseSMCLKSMCLKdevre dışı kalır.devre dışı kalır.
V(Overflow) :
V(Overflow) : Taşma biti. Eğer bir aritmetik işlemin sonunda işaretli tarafa taşma olmuşsa buTaşma biti. Eğer bir aritmetik işlemin sonunda işaretli tarafa taşma olmuşsa bu
bit
bit setset edilir.edilir.
Durum kontrol bitlerinin çoğunu
Durum kontrol bitlerinin çoğunu CCderleyicisi bizim yerimize yapıyor… Donanım için kullanıderleyicisi bizim yerimize yapıyor… Donanım için kullanılanlan
diğer bitler ise
diğer bitler ise MSP430 CMSP430 Cderleyicisinde işlemler bitlerin isimleriyle yapıldığındanderleyicisinde işlemler bitlerin isimleriyle yapıldığından
dolayı(Özellikle
dolayı(ÖzellikleClockClockkısmında) işlerimiz bayağı bir kolaylaşıyor.kısmında) işlerimiz bayağı bir kolaylaşıyor.
CPUOFF, OSCOFF, SCG0 ve SCG1
CPUOFF, OSCOFF, SCG0 ve SCG1 saklayıcıları ise CPU nunsaklayıcıları ise CPU nun düşük güçdüşük güç modunda çalışmasınımodunda çalışmasını sağlamak için
sağlamak için gereken kontrol bitleridir vegereken kontrol bitleridir ve reset anreset anında tüm bitler 0’dır.ında tüm bitler 0’dır.
CG1
CG1 – –CG2 (Constant Generators) :CG2 (Constant Generators) : MSP430’un işlemcisinde ortak kullanılan altı MSP430’un işlemcisinde ortak kullanılan altı adet sabit,adet sabit, CG1
CG1 veve CG2CG2kaydedicileri tarafından üretilir. Bu birimin amacı kaydedicileri tarafından üretilir. Bu birimin amacı aritmetik işlemlerde çok sıkaritmetik işlemlerde çok sık kullanılan sayıları üreterek belleğe erişim gereksinimini azaltıp, işlemleri daha hızlı
kullanılan sayıları üreterek belleğe erişim gereksinimini azaltıp, işlemleri daha hızlı
yapabilmektir. Bu işlemler için ekstradan herhangi bir komut olmaması çok büyük avantajdır. yapabilmektir. Bu işlemler için ekstradan herhangi bir komut olmaması çok büyük avantajdır. Assembler bu işlemleri otomatik olarak
Assembler bu işlemleri otomatik olarak yapmaktadır. Aşağıdaki resimdeyapmaktadır. Aşağıdaki resimde CG1 veCG1ve CG2CG2
kaydedicilerine yüklenen değerler sonucu yapılacak işlem
kaydedicilerine yüklenen değerler sonucu yapılacak işlem görülmektedirgörülmektedir..
MSP430
R2(CG1)
R2(CG1)veveR3(CG2)R3(CG2)Saklayıcıları yüklenen değerler sonucu yapılan aritmetik Saklayıcıları yüklenen değerler sonucu yapılan aritmetik işlemler işlemler
R4
R4 – – R12 (General Purpose Registers) :R12 (General Purpose Registers) : Bu 12 saklayıcı genel kullanım amaçlı saklayıcılardırBu 12 saklayıcı genel kullanım amaçlı saklayıcılardır.. BuBu
saklayıcıların hepsi akümülatör olarak veya adres
saklayıcıların hepsi akümülatör olarak veya adres göstericisi olarak veyahut da göstericisi olarak veyahut da değerlerideğerleri indekslemek(C
indekslemek(C’deki diziler gibi) ’deki diziler gibi) için kullanılabiliriçin kullanılabilir. Byte. Byte ya daya daWordWord adreslenebilir sistemdedir.adreslenebilir sistemdedir.
MSP430
BÖLÜM 2 –
BÖLÜM 2 – MSP430 GİRİŞ ÇIKIŞ AYARLARI
MSP430 GİRİŞ ÇIKIŞ AYARLARI
MSP430G2231 denetleyicisini pin yapısıMSP430G2231 denetleyicisini pin yapısı aşağıda görülmektedir.aşağıda görülmektedir.
Şekil 9
Şekil 9--MSP430G2231 Pin YapısıMSP430G2231 Pin Yapısı
Yukardaki şekilden de anlaşılacağı üzere pin sayısı düşük olduğu için MSP430’un
Yukardaki şekilden de anlaşılacağı üzere pin sayısı düşük olduğu için MSP430’un pinlerinepinlerine
birden çok görev yüklenmiştir.MSP430G2231 P1 ve P2 olmak üzere iki adet
birden çok görev yüklenmiştir.MSP430G2231 P1 ve P2 olmak üzere iki adet Giriş/Çıkış portuGiriş/Çıkış portu vardır.
vardır.
P1 = 8 Giriş/ÇıkışP1 = 8 Giriş/Çıkış
P2 = 2 Giriş/Çıkış bulunmaktadırP2 = 2 Giriş/Çıkışbulunmaktadır.. Portların tamamında Pull
Portların tamamında Pull-up veya Pull--up veya Pull-down dirençleri bulunmaktadır.down dirençleri bulunmaktadır. 2.1-)
2.1-)Pin Yönlendirme Ve KullanımıPin Yönlendirme Ve Kullanımı
Diğer mikroişlemcilerden farklı olarak MSP430’da pin görevlerini özel olarak, diğer Diğer mikroişlemcilerden farklı olarak MSP430’da pin görevlerini özel olarak, diğer registerlerde
registerlerden bağımsız n bağımsız seçmek mümkündür.seçmek mümkündür. Genel anlamda ise pin
Genel anlamda ise pin yönlendirmelerini sağlayan registerleyönlendirmelerini sağlayan registerlerr(kaydediciler)(kaydediciler)ve görevleri kısacave görevleri kısaca şöyledir.
şöyledir.
PxIN :PxIN : Port okuma Port okuma kaydedicisidir.kaydedicisidir.Sadece okuma yapılabilir.Sadece okuma yapılabilir.
PxIN :PxIN : Port okuma Port okuma kaydedicisidirkaydedicisidir. Sadece okuma yapılabilir.. Sadece okuma yapılabilir.
PxDIR :PxDIR : Port yönlendirmesidir.Port yönlendirmesidir.
Bit 1 olduğunda çıkış, 0 olduğunda giriştir. Bit 1 olduğunda çıkış, 0 olduğunda giriştir. Bu özellik itibari
Bu özellik itibari ile AVR’lere benzemektedir.ile AVR’lere benzemektedir.
PxREN :PxREN : Pull-Pull-up direnç ekleme ya da çıup direnç ekleme ya da çıkarma kaydedicisidir.karma kaydedicisidir. 1 olduğunda ilgili pine pull
1 olduğunda ilgili pine pull--up direnci bup direnci bağlamaktadır.ağlamaktadır.
PxSEL VE PxSEL2 :PxSEL VE PxSEL2 : Bu kaydediciBu kaydediciportun ilgili bitinin ne portun ilgili bitinin ne amaçla kullanılacağınıamaçla kullanılacağını
belirler. belirler.
Özellikleri ise aşağıda görülebilir. Özellikleri ise aşağıda görülebilir.
Şekil
Şekil 10 - Pin10 - PinGörevlerinin TanımıGörevlerinin Tanımı
MSP430
Şekil 11
Şekil 11- P1- P1′ ′ e Ait Olan Saklayıcılar ve Özellikleri e Ait Olan Saklayıcılar ve Özellikleri
Tabloda da görüldüğü gibi MSP430
Tabloda da görüldüğü gibi MSP430
′ ′
da g/ç işlemleri PIC’deki gibi değil. Portuda g/ç işlemleri PIC’deki gibi değil. Portu okumak için ayrı,okumak için ayrı, porta yazmak için ayrı kaydediciler kullanmamız gerekiyor. Bir ayrıntıyı daha belirteporta yazmak için ayrı kaydediciler kullanmamız gerekiyor. Bir ayrıntıyı daha belirteyimyim MSP430
MSP430
′ ′
da PIC’teki gibida PIC’teki gibi bit bit işlem yapmak bit bit işlem yapmak da mümkün kılınmış. Bununla ilgili detaya ilerideda mümkün kılınmış. Bununla ilgili detaya ileride değineceğiz. Şimdi tek tek budeğineceğiz. Şimdi tek tek bu kaydedicileri inceleyekaydedicileri inceleyelim…lim…
P1DIR: Bu
P1DIR: Bu saklayıcı PIC tekisaklayıcı PIC teki TRISTRIS yazmacına benzer. Ama TRIS yazmacıylayazmacına benzer. Ama TRIS yazmacıyla P1DIRP1DIRyazmacıyazmacı
arasında ters bir ilişki vardır. Saklayıcıya yazılan değer;
arasında ters bir ilişki vardır. Saklayıcıya yazılan değer; Bit = 1 iseBit = 1 ise çıkışçıkış, Bit = 0 ise, Bit = 0 ise girişgirişolarakolarak
ayarlanır.
ayarlanır. Reset durumunda değeri 0×00Reset durumunda değeri 0×00’dır.’dır. Örnek kullanım:Örnek kullanım:
P1DIR = 0xF0;
P1DIR = 0xF0; // İlk dört bit giriş diğerleri çıkış// İlk dört bit giriş diğerleri çıkış P1REN: P1
P1REN: P1 deki dahilideki dahili pull-uppull-up veyaveya pull-downpull-downdirençlerini kontrol etmek için kullanılır. Eğer;dirençlerini kontrol etmek için kullanılır. Eğer;
Bit = 0 ise
pull-up/pull-Bit = 0 ise pull-up/pull-down dirençleridown dirençleripasif pasif Bit = 1 ise pull-up/pull-Bit = 1 ise pull-up/pull-down dirençleridown dirençleri aktiftir.aktiftir.
Örnek kullanım:
Örnek kullanım:
P1REN = 0xF0;
P1REN = 0xF0; // İlk dört pindeki pull// İlk dört pindeki pull--up dirençleri aktif up dirençleri aktif P1REN
P1RENsaklayıcısının ilgili bitlerinin 1 olması durumunda dirençlerin pullsaklayıcısının ilgili bitlerinin 1 olması durumunda dirençlerin pull-up veya pull-down-up veya pull-down olma durumu
olma durumu P1OUT P1OUT saklayıcısı tarafından kontrol edilir.saklayıcısı tarafından kontrol edilir. P1OUT: Bu
P1OUT: Bu kaydedici isekaydedici iseP1P1portunda çıkış olarak ayarlanan pinlerin portunda çıkış olarak ayarlanan pinlerin durumunu değiştirmekdurumunu değiştirmek
için kullanılır. Yine
için kullanılır. Yine kaydedicinin bitlerine 0 yazarsak çıkışımızkaydedicinin bitlerine 0 yazarsak çıkışımız lojik 0lojik 01 yazarsak çıkışımız1 yazarsak çıkışımız lojik 1lojik 1 dir.
dir.Örnek kullanım:Örnek kullanım:
P1OUT = 0x01;
P1OUT = 0x01; //P1.0 = 1//P1.0 = 1 Ayrıca
Ayrıca P1P1 dekideki P1RENP1REN saklayıcısının pullsaklayıcısının pull-up veya pull--up veya pull-down olma durumunu da bu down olma durumunu da bu saklayıcısaklayıcı belirler. Eğer
belirler. Eğer P1OUTP1OUTsaklayıcısındasaklayıcısındaP1RENP1RENsaklayıcısına denk gelen; Bit = 0 isesaklayıcısına denk gelen; Bit = 0 ise P1RENP1REN in ilgiliin ilgili biti
biti pull-downpull-down Bit = 1 iseBit = 1 ise P1RENP1REN in ilgili bitiin ilgili biti pull-uppull-upgörevini yapmak üzere görevini yapmak üzere değişmektedirdeğişmektedir..
P1IN: Bu
P1IN: Bu kaydedicikaydedici P1P1portunun giriş olarak ayarlanmış pinlerinin portunun giriş olarak ayarlanmış pinlerinin durumunu kontrol etmekdurumunu kontrol etmek için kullanılır. Saklayıcı okunduktan sonra geri dönen değer Bit =
için kullanılır. Saklayıcı okunduktan sonra geri dönen değer Bit = 0 ise pin0 ise pin lojik 0lojik 0,, Bit = 1 ise pinBit = 1 ise pin lojik 1
lojik 1 dir.dir.Örnek kullanım:Örnek kullanım:
MSP430
if(P1IN = 0x01) if(P1IN = 0x01) P1OUT=0x02;
P1OUT=0x02; //P1.0 = 1 ise P1.1 i lojik 1 yap//P1.0 = 1 ise P1.1 i lojik 1 yap
P1SEL: P1
P1SEL: P1 Portunun herhangi bir pinini Portunun herhangi bir pinini birkaç amaç için kullanabileceğininden baştabirkaç amaç için kullanabileceğininden başta
bahsetmiştik.
bahsetmiştik.P1SELP1SEL saklayıcısı seçtiğimiz pinin hangi amaç için saklayıcısı seçtiğimiz pinin hangi amaç için kullanılacağını seçmemizikullanılacağını seçmemizi
sağlar. sağlar.
Burada
Burada PxSEL2PxSEL2 saklayıcısı şimdilik bizim işimize saklayıcısı şimdilik bizim işimize yaramayacakyaramayacak çünkü kullanacak çok fazla modülçünkü kullanacak çok fazla modül
yok. Şimdilik giriş/çıkış
yok. Şimdilik giriş/çıkış veya diğer modüllere ait pinleri seçmek içinveya diğer modüllere ait pinleri seçmek için P1SELP1SEL veve P1DIRP1DIR
saklayıcılarını yeterli. saklayıcılarını yeterli.
Şekil 12
Şekil 12- Herhangi bir p- Herhangi bir pine ait fonksiyonları belirlemek içinine ait fonksiyonları belirlemek için P1SELP1SELveveP1DIRP1DIRsaklayıcısınasaklayıcısına yazılması gereken değerler
yazılması gereken değerler Şimdi de
Şimdi de P1P1içiniçinkesmelerikesmeleri inceleyelim…inceleyelim…
MSP430F2001
MSP430F2001′′ininP1P1 veveP2P2‘sindeki‘sindekiher pinher pin harici kesme kabiliyetine sahiptirharici kesme kabiliyetine sahiptir. Yani başlangıç. Yani başlangıç
için seçtiğimiz bu modelde 10 adet g/ç bulunmakla beraber bu 10 un 10 u da harici k
için seçtiğimiz bu modelde 10 adet g/ç bulunmakla beraber bu 10 un 10 u da harici k esme içinesme için kullanılabiliyor. Bu şimdilik hiç de
kullanılabiliyor. Bu şimdilik hiç de küçümseneceküçümsenecek bir k bir özellik değil. özellik değil. KesmelerKesmeler programın başındaprogramın başında bir vektör ile tanımlanabiliyor. Bu ise
bir vektör ile tanımlanabiliyor. Bu ise hızhızdemek. Evet,demek. Evet,baştabaşta bit bit işlem yapabilmebit bit işlem yapabilme imkânıimkânıvarvar
demiştik. IAR’da bit bit işlem yapmak her ne
demiştik. IAR’da bit bit işlem yapmak her ne kadar dkadar daaHi-Tech PIC CHi-Tech PIC C gibi olmasa da yine degibi olmasa da yine de
idare eder gibi. Bu kısımdaki örneklerde de bit bit
idare eder gibi. Bu kısımdaki örneklerde de bit bit işlem yapmayı göstermeye çalışacağım.işlem yapmayı göstermeye çalışacağım.
P1IFG (P1 Interrupt Flag) : P1
P1IFG (P1 Interrupt Flag) : P1‘deki her pinde harici kesme ‘deki her pinde harici kesme özelliği olduğundanözelliği olduğundan bahsetmiştik.
bahsetmiştik. P1P1pinlerinin hangisinde kesme oluştuğunupinlerinin hangisinde kesme oluştuğunu P1IFGP1IFGsaklayıcısının durumundansaklayıcısının durumundan öğreniyoruz. Eğer seçtğimiz; Bit = 0
öğreniyoruz. Eğer seçtğimiz; Bit = 0 ise, o pinde kesmeise, o pinde kesme oluşmamışoluşmamış, Bit = , Bit = 1 ise, o 1 ise, o pinde pinde kesmekesme
MSP430
oluşmuş
oluşmuş anlamına gelmektedir. Eğer kesme olmuşsaanlamına gelmektedir. Eğer kesme olmuşsa P1IFGP1IFGsaklayıcısı yazılımdasaklayıcısı yazılımda
temizlenmeli
temizlenmelidir. Aksi halde program hep kesme varmış dir. Aksi halde program hep kesme varmış gibi algılayacaktır.gibi algılayacaktır. Örnek Kullanım :Örnek Kullanım :
if(P1IFG_bit.P1IFG_7==1)
if(P1IFG_bit.P1IFG_7==1) //Eğer P1.7 de bir kesme oluşmuş ise;//Eğer P1.7 de bir kesme oluşmuş ise;
P1OUT_bit.P1O
P1OUT_bit.P1OUT_0=1; UT_0=1; //P1.0 //P1.0 = = 11
P1IE (P1 Interrupt Enable) : P1
P1IE (P1 Interrupt Enable) : P1‘de herhangi bir pindeki kesmeleri aktif veya pasif yapmak için‘de herhangi bir pindeki kesmeleri aktif veya pasif yapmak için gerekli olan saklayıcıdır. Eğer; Bit
gerekli olan saklayıcıdır. Eğer; Bit = 0 ise = 0 ise seçtiğimiz pinde harici kesmeseçtiğimiz pinde harici kesme kapalı,kapalı, Bit = 1 iseBit = 1 ise
seçtiğimiz pinde harici kesme
seçtiğimiz pinde harici kesme açıktır.açıktır. Örnek Kullanım:Örnek Kullanım:
P1IE.bit_P1IE_7=1;
P1IE.bit_P1IE_7=1; //P1.7 için harici//P1.7 için harici kesme aktifkesme aktif.. P1IES (P1 Interrupt Edge Select) :
P1IES (P1 Interrupt Edge Select) : Bu saklayıcı iseBu saklayıcı ise P1P1‘de seçtiğimiz herhangi bir pinde oluşan‘de seçtiğimiz herhangi bir pinde oluşan harici kesme için düşen kenar veya yükselen kenarda kesme oluşmasını seçmeye yarıyor. Eğer; harici kesme için düşen kenar veya yükselen kenarda kesme oluşmasını seçmeye yarıyor. Eğer;
Bit = 0 ise
Bit = 0 ise yükselen kenaryükselen kenar, Bit = 1 ise, Bit = 1 ise düşen kenardüşen kenarda kesmeye gidiliyor.da kesmeye gidiliyor.Örnek Kullanım:Örnek Kullanım:
P1IES.bit_P1IES_7=1;
P1IES.bit_P1IES_7=1; //P1.7 için düşen kenarda kesme oluşması//P1.7 için düşen kenarda kesme oluşması
isteniyor. isteniyor.
Aşağıda
AşağıdaP1IESP1IESsaklayıcısının düşen kenar veya yükselen kenar seçilmesi durumundasaklayıcısının düşen kenar veya yükselen kenar seçilmesi durumunda P1IFGP1IFG
saklayıcısındaki kesme bayraklarının nasıl etkileneceği görülüyor. saklayıcısındaki kesme bayraklarının nasıl etkileneceği görülüyor.
Şekil 13
Şekil 13--P1IESP1IES veve P1INP1INbitlerinin durumuna göre kesme bayraklarının durumubitlerinin durumuna göre kesme bayraklarının durumu
Şekil
Şekil 1414– – Kesme UygulamasıKesme Uygulaması
XIN/P2.6/TA1 XIN/P2.6/TA1 13 13 XOUT/P2.7XOUT/P2.7 12 12 TEST/SBWTCKTEST/SBWTCK 11 11 RST/NMI/SBWTDIORST/NMI/SBWTDIO 10 10 P1.2/TA1/CA2 P1.2/TA1/CA2 44 P1.1/TA0/CA1 P1.1/TA0/CA1 33 P1.0/TACLK/ACLK/CA0 P1.0/TACLK/ACLK/CA0 22 P1.3/CAOUT/CA3 P1.3/CAOUT/CA3 55 P1.4/SMCLK/CA4/TCK P1.4/SMCLK/CA4/TCK 66 P1.7/CAOUT/CA7/TDO/TDI P1.7/CAOUT/CA7/TDO/TDI 99 P1.6/TA1/CA6/TDI/TCLK P1.6/TA1/CA6/TDI/TCLK 88 P1.5/TA0/CA5/TMS P1.5/TA0/CA5/TMS 77 U1 U1 MSP430F2001 MSP430F2001 +3.3V +3.3V P1.0 P1.0 P1.1 P1.1
MSP430
#include
#include <io430x20x1.h<io430x20x1.h>>
#include "in430.h" /*Genel Kesmeleri aktif etmek için
#include "in430.h" /*Genel Kesmeleri aktif etmek için gerekengereken
başlık dosyası*/ başlık dosyası*/
#define LED0
#define LED0 P1OUT_bit.P1OP1OUT_bit.P1OUT_0UT_0 #define LED1
#define LED1 P1OUT_bit.P1OP1OUT_bit.P1OUT_1UT_1 #define P1REN7
#define P1REN7 P1REN_bit.P1RP1REN_bit.P1REN_7EN_7 #define P1OUT7
#define P1OUT7 P1OUT_bit.P1OP1OUT_bit.P1OUT_7UT_7 #define P1IE7
#define P1IE7 P1IE_bit.P1IP1IE_bit.P1IE_7E_7 #define P1IES7
#define P1IES7 P1IES_bit.P1IP1IES_bit.P1IES_7ES_7 #define P1IFG7
#define P1IFG7 P1IFG_bit.P1IP1IFG_bit.P1IFG_7FG_7 void main( void )
void main( void ) {
{
WDTCTL = WDTPW + WDTHOLD;
WDTCTL = WDTPW + WDTHOLD; //Watchdog timer //Watchdog timer durduruluyordurduruluyor... P1DIR = 0x7F;
P1DIR = 0x7F; //P1.7 Giriş, diğerleri çıkış...//P1.7 Giriş, diğerleri çıkış...
P1OUT7 = 1;
P1OUT7 = 1; //P1.7 de pull-//P1.7 de pull-up direnci seçiliyor.up direnci seçiliyor.
P1REN7 = 1;
P1REN7 = 1; //P1.7 deki pull-up direnci aktif.//P1.7 deki pull-up direnci aktif. P1IE7
P1IE7 = = 1;1; //P1.7 için kesme aktif ediliyor.//P1.7 için kesme aktif ediliyor.
P1IES7 = 0;
P1IES7 = 0; //P1.7 kesmesi için yükselen kenar //P1.7 kesmesi için yükselen kenar
P1IFG7 = 0;
P1IFG7 = 0; //P1.7 kesme bayrağı temizleniyor.//P1.7 kesme bayrağı temizleniyor.
BCSCTL1= CALBC1_8MHZ;
BCSCTL1= CALBC1_8MHZ; //DCOCLK 8MHZ //DCOCLK 8MHZ Seçiliyor...Seçiliyor...
DCOCTL =
DCOCTL = CALDCO_8MHZ;CALDCO_8MHZ; _BIS_SR(GIE);
_BIS_SR(GIE); //Genel Kesmeler aktif...//Genel Kesmeler aktif... LED0=1;
LED0=1; while(1);
while(1); //İşlemci sonsuz dögüde bırakılıp,//İşlemci sonsuz dögüde bırakılıp,
//harici kesmenin gelmesi
//harici kesmenin gelmesi bekleniyor.bekleniyor. }
}
#pragma
#pragma vector=PORTvector=PORT1_VECTOR1_VECTOR
//P1 Kesme Vektörü
//P1 Kesme Vektörü Tanımlanıyor..Tanımlanıyor....
__interrupt void
__interrupt void P1_Kesmesi(voP1_Kesmesi(void)id) { { LED0=~LED0; LED0=~LED0; LED1=~LED1; LED1=~LED1; P1IFG7=0;
P1IFG7=0; // P1// P1.7 kesme .7 kesme bayrağı temizleniyor bayrağı temizleniyor
} }
MSP430
2.2-)
2.2-)Port Okuma Ve Yazma UygulamasıPort Okuma Ve Yazma Uygulaması
Portların yönlendirilmesini daha iyi anlayabilmek için bir uygulama yazalım. Portların yönlendirilmesini daha iyi anlayabilmek için bir uygulama yazalım. BuBu
uygulamamızda, P1 portumuza bağlı 4 adet pin ile P3 portumuza bağlı 4 adet ledi kontrol uygulamamızda, P1 portumuza bağlı 4 adet pin ile P3 portumuza bağlı 4 adet ledi kontrol edeceğiz. P1 portuna bağlı olan butonlardan birine basıldığında, karşısına denk gelen P3 edeceğiz. P1 portuna bağlı olan butonlardan birine basıldığında, karşısına denk gelen P3 portundaki led yanacaktır.
portundaki led yanacaktır.
Şekil
Şekil 1515– – Port Okuma Yazma UygulamasıPort Okuma Yazma Uygulaması ŞemasıŞeması
Devremizde görüldüğü gibi 4 adet buton bulunmaktadır. Bu butonlar ile P1 portunun ilk dört Devremizde görüldüğü gibi 4 adet buton bulunmaktadır. Bu butonlar ile P1 portunun ilk dört
pini pull down
pini pull down a çekilmiştir. Ayrıca yeri gelmişken söyleyeyim,a çekilmiştir. Ayrıca yeri gelmişken söyleyeyim, bu uygulamamıza ait yazılımdabu uygulamamıza ait yazılımda
MSP430 da dahili
MSP430 da dahili olarak bulunan Pull Up ve Puolarak bulunan Pull Up ve Pull Down dirençlerinden de bahsedeceğiz.ll Down dirençlerinden de bahsedeceğiz.
#include "io430.h" #include "io430.h" #include "in430.h" #include "in430.h" void main( void ) void main( void ) { { WDTCTL = WDTPW + WDTHOLD; WDTCTL = WDTPW + WDTHOLD; DCOCTL=CALDCO_1MHZ; DCOCTL=CALDCO_1MHZ; BCSCTL1=CALBC1_1MHZ; BCSCTL1=CALBC1_1MHZ; P1DIR = 0x00; P1DIR = 0x00; P1REN = 0x0F; P1REN = 0x0F; P1OUT = 0xFF; P1OUT = 0xFF; P3OUT = 0x00; P3OUT = 0x00; P3DIR = 0xFF; P3DIR = 0xFF; while(1) while(1) { {
P3OUT = (P1IN & 0x0F); P3OUT = (P1IN & 0x0F); }
} } }
MSP430
Main fonksiyonunun ilk 4 satırını artık herkes anlamıştır herhalde. Gelelim port ayarlarına. İlk Main fonksiyonunun ilk 4 satırını artık herkes anlamıştır herhalde. Gelelim port ayarlarına. İlk olarak P1 portuna ilişkin ayarlamalar yapılmaktadır. İlk olarak P1 portunun tamamı giriş olarak olarak P1 portuna ilişkin ayarlamalar yapılmaktadır. İlk olarak P1 portunun tamamı giriş olarak yönlendirilmiştir.
yönlendirilmiştir. Ardından da P1REN register ına (Px Resistor ENable)Ardından da P1REN register ına (Px Resistor ENable) 0x0F hexadecimal0x0F hexadecimal
değeri yazılmıştır. Bu şu anlam
değeri yazılmıştır. Bu şu anlama gelmektedir. P1 portuna ait dahili pulla gelmektedir. P1 portuna ait dahili pull – –up veya pullup veya pull – – downdown
dirençlerini kullanacağım anlamına gelmektedir. Fakat burada bir soru akla gelmektedir. Pull dirençlerini kullanacağım anlamına gelmektedir. Fakat burada bir soru akla gelmektedir. Pull Up veya Pull Down dirençlerinden hangisini kullanacağımı nasıl belirleyeceğim. Onuda giriş Up veya Pull Down dirençlerinden hangisini kullanacağımı nasıl belirleyeceğim. Onuda giriş
konumund
konumunda bulunan portun PxOUT register ından ayarlayacağız.a bulunan portun PxOUT register ından ayarlayacağız. Anlaşılacağı üzere, herhangiAnlaşılacağı üzere, herhangi
bir pin için PxREN kaydedicisine Lojik1 yazılmışsa, o pin dahili olarak pull up/pull down’ bir pin için PxREN kaydedicisine Lojik1 yazılmışsa, o pin dahili olarak pull up/pull down’aa
çekil
çekilecektir. Pull up veya Pull down dan hangisineecektir. Pull up veya Pull down dan hangisine çekileceğini ise PxOUT Register’ı ileçekileceğini ise PxOUT Register’ı ile
ayarlanmaktadır. İlgili pin için PxOUT register ına Lojik1 yazılmışsa o pin Pull Up’a, Lojik0 ayarlanmaktadır. İlgili pin için PxOUT register ına Lojik1 yazılmışsa o pin Pull Up’a, Lojik0 yazılmışsa Pull Down’a çekilecek anlamına gelir.
yazılmışsa Pull Down’a çekilecek anlamına gelir.
Şekil
Şekil 1616– – Port1.0 ve 1.3Port1.0 ve 1.3Pin FonksiyonlarıPin Fonksiyonları
Yukarıdaki şemadan da bunu rahatlıkla anlayabiliriz. Eğer P1REN kaydedicisi Lojik1 ise sarı ile Yukarıdaki şemadan da bunu rahatlıkla anlayabiliriz. Eğer P1REN kaydedicisi Lojik1 ise sarı ile renklendirilmiş kısımdaki anahtar aktif olmaktadır. P1OUT a da Lojik 1 yazılmışsa, ilgili pin için renklendirilmiş kısımdaki anahtar aktif olmaktadır. P1OUT a da Lojik 1 yazılmışsa, ilgili pin için girişteki mux(multiplexer) sayesinde o pin DVCC ye, Lojik 0 yazılmışsa, DVSS ye direnç girişteki mux(multiplexer) sayesinde o pin DVCC ye, Lojik 0 yazılmışsa, DVSS ye direnç üzerinden çekildiğini anlayabili
üzerinden çekildiğini anlayabiliriz.riz.
Yazılıma devam edersek, P1 portu için yapılan
Yazılıma devam edersek, P1 portu için yapılan ayarlamalardan sonra, P3 portu için ayarlamalarayarlamalardan sonra, P3 portu için ayarlamalar yapılmıştır. İlk olarak port temizlenmiş, ardından da
yapılmıştır. İlk olarak port temizlenmiş, ardından da port çıkış olarak şartlanmıştır. Ardından daport çıkış olarak şartlanmıştır. Ardından da while(1) ile sonsuz döngüye girilmiş, P1 portu sürekli okunup, ilk dört biti maskelenip, P3 while(1) ile sonsuz döngüye girilmiş, P1 portu sürekli okunup, ilk dört biti maskelenip, P3 portuna aktarılmıştır.
portuna aktarılmıştır.
MSP430
Birde şunu söylemeliyim ki, sonsuz döngüye girmenin tek Birde şunu söylemeliyim ki, sonsuz döngüye girmenin tek yoluyolu
for(;;) for(;;) {
{
// Sonsuz döngüde
// Sonsuz döngüde yapılacak işlemler...yapılacak işlemler...
} }
Değildir. Sonsuz döngüye
Değildir. Sonsuz döngüye aşağıdaki gibide girilebilir.aşağıdaki gibide girilebilir.
while(1) while(1) {
{
// Sonsuz
// Sonsuz döngüde yapılacak işlemler...döngüde yapılacak işlemler... }
}
BÖLÜM 3 –
BÖLÜM 3 – MSP430 TİMER AYARLARI
MSP430 TİMER AYARLARI
3.1-)
3.1-)TimerA BölümüTimerA Bölümü
TimerA birimi
TimerA birimi 16bit16bit veve4 ayrı4 ayrı moda çalışabilen bir timer moda çalışabilen bir timer birimidir. Saat kaynakları istenildiğibirimidir. Saat kaynakları istenildiği gibi seçilebilir
gibi seçilebilir (( ACLK,SMCL vb. ACLK,SMCL vb.)) ve 2 ya ve 2 ya da 3 adet capture/compare registeri içerir. Ayrıca PWMda 3 adet capture/compare registeri içerir. Ayrıca PWM
ayarlaması da
ayarlaması da yine bu yine bu sayıcı ile yapılabilimektedir.sayıcı ile yapılabilimektedir. Bir diğer özellik ise MSP430Bir diğer özellik ise MSP430
′ ′
da bulunanda bulunankesme vektörleri sayesinde Timer_A birimi için oluşan
kesme vektörleri sayesinde Timer_A birimi için oluşan kesme anında programıkesme anında programı vektörlerevektörlere dallandırıp işlemlerimizi daha hızlı
dallandırıp işlemlerimizi daha hızlı halledebiliriz.halledebiliriz.
MSP430 un timerları çeşitli sayma modlarına sahiptir. TimerA control register içerisindeki MC MSP430 un timerları çeşitli sayma modlarına sahiptir. TimerA control register içerisindeki MC bitleri ile timer
bitleri ile timer ların çalışma modları ayarlanmaktadır.ların çalışma modları ayarlanmaktadır. MC_0 : Timer Kapalı
MC_0 : Timer Kapalı
MC_1 : Timer sürekli olarak sıfırdan CCR de
MC_1 : Timer sürekli olarak sıfırdan CCR değerine kadar sayar.ğerine kadar sayar. MC_2 : Timer sürekli olarak 0
MC_2 : Timer sürekli olarak 0 dan oxFFFF e kadar sayar.dan oxFFFF e kadar sayar.
MC_3 : Timer sürekli olarak sıfırdan CCR değerine, CCR değerine ulaşınca tekrar sıfıra geri MC_3 : Timer sürekli olarak sıfırdan CCR değerine, CCR değerine ulaşınca tekrar sıfıra geri doğru sayar.
doğru sayar.
Şekil 17 –
Şekil 17 – Timer ModlarıTimer Modları Biz uygulamamızda TimerA yı “Up Mode”
Biz uygulamamızda TimerA yı “Up Mode” da kullanacağız. Yani Timer sıfırdan bizimda kullanacağız. Yani Timer sıfırdan bizim belirlediğimiz CCR değerine kadar sayacak ve tekrar sıfıra dönecek. Sıfıra dönme yani belirlediğimiz CCR değerine kadar sayacak ve tekrar sıfıra dönecek. Sıfıra dönme yani resetlenme esnasında da, kesme üretecek.
resetlenme esnasında da, kesme üretecek.
MSP430
3
3.1.1) TimerA Sayıcı Modu.1.1) TimerA Sayıcı Modu
ŞŞekil 18 ekil 18 – – TimerA Sayıcı KısmıTimerA Sayıcı Kısmı TimerA sayıcı kısmı Şekil 18’de
TimerA sayıcı kısmı Şekil 18’de görüleceği üzere farklı saat görüleceği üzere farklı saat kaynaklarından beslenebilmekaynaklarından beslenebilmektedir.ktedir. Bu kaynağı seçen
Bu kaynağı seçen TASSELxTASSELxbitleridir. Daha sonra seçilen saat kaynağıbitleridir. Daha sonra seçilen saat kaynağı IDxIDxile bölüm oranınaile bölüm oranına girer ve yükselen kenarda tetiklenmek üzere 16 bitlik sayıcı saymaya başlar. İstenilen anda girer ve yükselen kenarda tetiklenmek üzere 16 bitlik sayıcı saymaya başlar. İstenilen anda
TACLR
TACLRbiti 1 yapılarakbiti 1 yapılarakTARTARregisterinin içeriği sıfırlanabilir.registerinin içeriği sıfırlanabilir. MCxMCxile sayıcı modları seçilir, sayıcıile sayıcı modları seçilir, sayıcı
mod’a göre, dolduğunda kesme bayrağı
mod’a göre, dolduğunda kesme bayrağı çeker. TimerA ayarlanırken zamanlayıcının kapalıçeker. TimerA ayarlanırken zamanlayıcının kapalı olması MSP datasheetinde önerilmiştir. Ayrıca TimerA’nın çalışması içi
olması MSP datasheetinde önerilmiştir. Ayrıca TimerA’nın çalışması içinn MCxMCx’in mutlaka’in mutlaka sıfırdan büyük
sıfırdan büyük olması gerekmektedir.olması gerekmektedir.
Şekil 19 –
Şekil 19 – TimerA Blok DiyagramıTimerA Blok Diyagramı
MSP430
TimerA’yı kontrol eden registerler ise aşağıdaki gibidir. TimerA’yı kontrol eden registerler ise aşağıdaki gibidir.
ŞŞekil 20 ekil 20 – – TimerA Kontrol RegisterıTimerA Kontrol Registerı
TASSELx
TASSELx Saat Kaynağı Seçim BitiSaat Kaynağı Seçim Biti
00 00 – –TACLKTACLK 01 01 – –ACLKACLK 10 10 – –SMCLKSMCLK 11 11 – –INCLKINCLK IDx
IDx Divider (Bölücü)Divider (Bölücü) 00 00 – –/1/1 01 01 – –/2/2 10 10 – –/4/4 11 11 – –/8/8 MCx
MCx Mode KontrolMode Kontrol 00
00 – –Stop ModeStop Mode 01
01 – – Up Mode (TACCR0’a kadar sayacak)Up Mode (TACCR0’a kadar sayacak) 10
10 – – Continious Mode (0xFFFF’e kadar sayacak)Continious Mode (0xFFFF’e kadar sayacak)
11
11 – –TACCR0-0- TACCR0-TACCR0-0- TACCR0-0.. şeklinde sayacak0.. şeklinde sayacak TACLR
TACLR TimerA’yı silen bitTimerA’yı silen bit
TAIE
TAIE TimerA interrupt enableTimerA interrupt enable TAIFG
TAIFG TimerA interrupt flagTimerA interrupt flag
Diğer registerler için datasheet’e bakınız. Diğer registerler için datasheet’e bakınız.
3.1.1.1-)TimerA Stop Modu 3.1.1.1-)TimerA Stop Modu
Bu modda sayıcı durdurulur. Bir nevi
Bu modda sayıcı durdurulur. Bir nevi sayıcının çalışmayacasayıcının çalışmayacağı anlamına gelir.ğı anlamına gelir.
3.1.1.2-)TimerA Up Modu 3.1.1.2-)TimerA Up Modu
Bu modda sayıcı
Bu modda sayıcıTACCRxTACCRx registerine yüklenen değer kadar arttıktan sonra sayıcı sıfırlanır registerine yüklenen değer kadar arttıktan sonra sayıcı sıfırlanır veve
tekrar sayıcı kendini
tekrar sayıcı kendini TACCRxTACCRx’e kadar arttırır. Şekil 21’de bu ’e kadar arttırır. Şekil 21’de bu modun çalışma şekli gösterilmiştir.modun çalışma şekli gösterilmiştir.
ŞŞekil 21ekil 21– – TimerA Up ModuTimerA Up Modu