Timer. Suhap SAHIN {\} /\

Benzer belgeler
SysTick Kesmesi. Suhap SAHIN {\} /\

Mikrokontrolcu Portları {\} /\ Suhap SAHIN

Sistem Programlama Deney 1

ARM Ders Notları. SysCtlClockSet( SYSCTL_SYSDIV_4 SYSCTL_USE_PLL SYSCTL_OSC_MAIN SYSCTL_XTAL_8MHZ);

Giris {\} /\ Suhap SAHIN

LPC2104 Mikro Denetleyicisini KEIL İle Programlamak

Erzurum Teknik Üniversitesi RobETÜ Kulübü Robot Eğitimleri. ARDUİNO EĞİTİMLERİ I Arş. Gör. Nurullah Gülmüş

Mikroişlemciler. Microchip PIC

Arduino Uno ile Hc-Sr04 ve Lcd Ekran Kullanarak Mesafe Ölçmek

8086 nın Bacak Bağlantısı ve İşlevleri. 8086, 16-bit veri yoluna (data bus) 8088 ise 8- bit veri yoluna sahip16-bit mikroişlemcilerdir.

LCD (Liquid Crystal Display )

void setup() fonksiyonu: Bu fonksiyon program ilk açıldığında bir kere çalışır ve gerekli kalibrasyon, setup komutlarını buraya yazarız.

DENEY-2. SABANCI ATL ÖĞRETMENLERİNDEN YAVUZ AYDIN ve UMUT MAYETİN'E VERDİKLERİ DESTEK İÇİN TEŞEKKÜR EDİYORUZ

Adres Yolu (Address Bus) Bellek Birimi. Veri Yolu (Databus) Kontrol Yolu (Control bus) Şekil xxx. Mikrodenetleyici genel blok şeması

Arduino nedir? Arduino donanım ve yazılımın kolayca kullanılmasına dayalı bir açık kaynak elektronik platformdur.

DENEY-5. SABANCI ATL ÖĞRETMENLERİNDEN YAVUZ AYDIN ve UMUT MAYETİN'E VERDİKLERİ DESTEK İÇİN TEŞEKKÜR EDİYORUZ

DENEY 9-A : PIC 16F877 ve LM-35 ile SICAKLIK ÖLÇÜM UYGULAMASI

Alıcı Devresi; Sinyali şu şekilde modüle ediyoruz;

İSTANBUL TİCARET ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ MİKROİŞLEMCİLİ SİSTEM LABORATUVARI KESMELİ GİRİŞ/ÇIKIŞ

DERS 13 PIC 16F84 ile DONANIM SAYICI KULLANIMI İÇERİK KESME

İLERI MIKRODENETLEYICILER. Ege Üniversitesi Ege MYO Mekatronik Programı

DENEY-6. SABANCI ATL ÖĞRETMENLERİNDEN YAVUZ AYDIN ve UMUT MAYETİN'E VERDİKLERİ DESTEK İÇİN TEŞEKKÜR EDİYORUZ

İLERI MIKRODENETLEYICILER. Ege Üniversitesi Ege MYO Mekatronik Programı

C ile Gömülü Sistemler için Yazılım Geliştirme Eğitimi. Apr 10,

Deney 2. Kesme Uygulamaları

DENEY-1. SABANCI ATL ÖĞRETMENLERİNDEN YAVUZ AYDIN ve UMUT MAYETİN'E VERDİKLERİ DESTEK İÇİN TEŞEKKÜR EDİYORUZ

EEM 306 Mikroişlemciler ve Lab. Doç.Dr. Mehmet SAĞBAŞ

İÇİNDEKİLER. 3 STM32F4 MIKRO-DENETLEYICISI 23 STM32 Ailesi ve STM32F STM32 Ailesi 23 STM32 Mikrodenetleyicileri 30 Numaralandırılması 30

446 GÖMÜLÜ SİSTEM TASARIMI. Lab 9 UART

Elif İLİKSİZ. Keziban TURAN. Radio Frekanslarla Hareket Eden Araç

İçİndekİler. 1. Bölüm - Mİkro Denetleyİcİ Nedİr? 2. Bölüm - MİkroDenetleyİcİlerİ Anlamak

İLERI MIKRODENETLEYICILER. Ege Üniversitesi Ege MYO Mekatronik Programı

Örnek. int analogpin = 3; int val = 0; void setup() { Serial.begin(9600); } void loop() { val = analogread(analogpin); Serial.

BLGM423 Gömülü Sistem Tasarımı

BÖLÜM 7 XTAL2 XTAL1. Vss. Şekil Mikrodenetleyicisi osilatör bağlantı şekli. Bir Makine Çevrimi = 12 Osilatör Periyodu

LCD (Liquid Crystal Display)

KONTROL VE OTOMASYON KULÜBÜ

BM-311 Bilgisayar Mimarisi

PİC HAKKINDA KISA KISA BİLGİLER GİRİŞ/ÇIKIŞ PORTLARI

EEM 306 Mikroişlemciler ve Lab. Doç.Dr. Mehmet SAĞBAŞ

Genel Kavramlar. Bilecik Şeyh Edebali Üniversitesi Gömülü Sistemler Ders Notları-2

EEM 306 Mikroişlemciler ve Lab. Doç.Dr. Mehmet SAĞBAŞ

Sistem Programlama. Kesmeler(Interrupts): Kesme mikro işlemcinin üzerinde çalıştığı koda ara vererek başka bir kodu çalıştırması işlemidir.

Melih Hilmi ULUDAĞ. Yazılım Mühendisi Mekatronik Mühendisi. a aittir.

DENEY-7. SABANCI ATL ÖĞRETMENLERİNDEN YAVUZ AYDIN ve UMUT MAYETİN'E VERDİKLERİ DESTEK İÇİN TEŞEKKÜR EDİYORUZ

LED YAKMAK. Circuit 2. Kablo LED. Direnç. Arduino LED. Direnç (330ohm)

BİLGİSAYAR BİLİMİ DERSİ (KUR-2)

SAYISAL MANTIK LAB. PROJELERİ

Code Composer Studio İndirilmesi ve Kurulması

TUŞ TAKIMI (KEYPAD) UYGULAMALARI

BM-311 Bilgisayar Mimarisi. Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

4-Deney seti modüler yapıya sahiptir ve kabin içerisine tek bir board halinde monte edilmiştir.

KAÇAK AKIM RÖLESİ. Sayfa 1

PIC PROGRAMLAMA STEP MOTOR SÜRÜCÜ VE KONTROL AMAÇ NEDİR? Unipolar Step Motorlar. Uç TESPİTİ NASIL YAPILIR?

DERS 12 PIC 16F84 ile KESME (INTERRUPT) KULLANIMI İÇERİK

EasyPic 6 Deney Seti Tanıtımı

DSPIC30F2010 ASSEMBLER PROGRAMI İÇERİSİNDE KONFİGÜRASYON BİTLERİNİ TANIMLAMA

EEProm 24C08 UYGULAMA AMAÇ 24C08 MCU_VCC. e r : d e G. Sayfa - 1

DENEY 10-A : PIC 16F877 ile DARBE GENİŞLİK MODÜLASYONU (PWM) SİNYAL KONTROL UYGULAMASI

Program Kodları. void main() { trisb=0; portb=0; while(1) { portb.b5=1; delay_ms(1000); portb.b5=0; delay_ms(1000); } }

DENEY-4. SABANCI ATL ÖĞRETMENLERİNDEN YAVUZ AYDIN ve UMUT MAYETİN'E VERDİKLERİ DESTEK İÇİN TEŞEKKÜR EDİYORUZ

VTIY DERS-4 YARDIMCI NOTLARI -2018

İÇİNDEKİLER 1. KLAVYE KLAVYE RB KLAVYE RBHIGH DİSPLAY... 31

Configuration bitleri ve reset durumları hakkında kavramlar

PIC TABANLI, 4 BASAMAKLI VE SER

Birol Çapa Özen Özkaya Güz Dönemi Eğitimleri

PROJE RAPORU. Proje adı: Pedalmatik 1 Giriş 2 Yöntem 3 Bulgular 6 Sonuç ve tartışma 7 Öneriler 7 Kaynakça 7

ADUC841 MİKRODENETLEYİCİ TABANLI GELİŞTİRME KARTININ TANITIMI:

PIC Mikrodenetleyicileri

BİLGİSAYAR MİMARİSİ. << Bus Yapısı >> Özer Çelik Matematik-Bilgisayar Bölümü

TECO N3 SERİSİ HIZ KONTROL CİHAZLARI

BÖLÜM 7 Kesmeler.

Mikroişlemci Nedir? Mikrodenetleyici Nedir? Mikroişlemci iç yapısı Ders Giriş. Mikroişlemcili Sistem Uygulamaları

1. Ders Giriş. Mikroişlemcili Sistem Uygulamaları

Analog Sayısal Dönüşüm

Teknik Katalog [Avometre]

Değişkenler tanımlanırken onlara ne tür veriler atanabileceği de belirtilir. Temel veri türleri oldukça azdır:

Deney No Deney Adı Tarih. 3 Mikrodenetleyici Portlarının Giriş Olarak Kullanılması / /201...

FPGA İLE UYGULAMA ÖRNEKLERİ

ARDUINO PROGRAMLAMA. Yrd.Doç.Dr. Bülent ÇOBANOĞLU

BÖLÜM 6 Seri Port Đşlemleri

İLERI MIKRODENETLEYICILER. Ege Üniversitesi Ege MYO Mekatronik Programı

C-Serisi PLC İleri Seviye Eğitim

BQ Modbus Analog Giriş Kartı 6 Kanal PT100 - PT1000. Kullanım Kılavuzu. Doküman Versiyon: BQTEK

KOCAELİ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ

C ile Uygulamalar 4 - Cevaplar

3/7/2011. ENF-102 Jeoloji 1. Tekrar -- Değişken Tanımlamaları (Definition) ve Veri Türleri (Data Type) Veri Tanımları ve Mantıksal Đşlemler

BÖLÜM 2 INTERRUPT ve TIMER İŞLEMLERİ

Model BLW-222CFP

# PIC enerjilendiğinde PORTB nin 0. biti 1 olacak #PIC enerjilendiğinde PORTA içeriğinin tersini PORTB de karşılık gelen biti 0 olacak

Keyestudio SHT31 Temperature and Humidity Module / SHT31 Sıcaklık ve Nem Modülü

Ad Soyad: Öğrenci No:

MP211 DONANIM KILAVUZU

Radyo Frekans Ayarları Klavuzu - ( )

Mikroişlemciler ve Programlama Dersi- ARDUINO. Sensörler ve Analog-Digital Çeviriciler İle Çalışma

IOT UYGULAMALARINA GİRİŞ

2 Kablolu Villa Zil Paneli (Kart Okuyuculu)

KOMUT TABLOSU İLE İLGİLİ AÇIKLAMALAR:

web-sitesi : satış : teknik destek : tel : IM-SMO20 Ultrasonik Mesafe Sensörü Özellikler

FRENIC MEGA ÖZET KULLANIM KLAVUZU

Transkript:

Timer Suhap SAHIN 0 {\ /\

clock

clock

Phase-Lock-Loop (Faz-Kilit-Döngü) 400 MHz Faz-Kilit-Döngü ARM mikrodenetleyiciler Faz-Kilit-Döngüleri (PLL'ler) ile donatılmıstır. Tiva kartı, dahili bir 400 MHz PLL ile birlikte gelmektedir. Tiva nın PLL i, giris saati kaynagını çarpmak yerine, istenen saat hızlarını elde etmek için Sistem Bölümü tarafından bölünür. Dahili PLL ile 3.125 MHz'den 80 MHz'e kadar saat frekansları üretebiliriz, Tiva için en yüksek çalısma saat hızı 80 MHz'dir.

clock kaynakları Precision Internal Oscillator (PIOSC) Main Oscillator (MOSC) Low-Frequency Internal Oscillator (LFIOSC) Hibernation Module Clock Source

clock Ayarlanması Saklayıcıların etkin oldugu islemler: Uyku ve modunda saat kaynak seçimi PLL veya diger kaynaklardan türetilmis sistem saati seçimi Osilatörlerin ve PLL'nin etkinlestirilmesi / devre dısı bırakılması Saat bölme Kristal giris seçimi

SYSDIV ve SYSDIV2 alanları RCC de bulunan SYSDIV ve SYSDIV2 alanları Sistem saati ; PLL çıkısı??? osilatör kaynagı BYPASS biti = 0??? 1

Sistem Saati Frekansları SysCtlClockSet() S DI Div Fre c (B AS =0) Fre c (B AS =1) Ste r Wa 0x0 /1 re v Clo s ef en /1 S C _S DI _1 0x1 /2 re v Clo s ef en /2 S C _S DI _2......... 0x4 /5 40 M z......... 0x9 /10 20 M z......... 0xF /16......... 0x3F /64 3.125 M z 12.5 M z (de... Clo s ef... en /5... Clo s ef... en /10... t) Clo s ef ef S C _S DI _10... en /16... Clo s S C _S DI _5 S C _S DI _16... en /164 S C _S DI _64

Sistem Saati Frekansları SysCtlClockSet() S DI 2 0x00 S DI 2L re v Div Fre c (B AS =0) /2 re v re v Ste r Wa 0x01 0 /3............... 0x02 0 /5 80 M z S C _S DI _2_5......... /10 40 M z S C _S DI _5......... /128 3.125 M z S C _S DI _64... 0x4 1... 0x3F 1

islemci hızının ayarlanması

islemci hızının ayarlanması

islemci hızının ayarlanması

Port F Kesmesi Cortex M4 8 32k RAM GPIO Port B GPIO Port A 8 Eight UARTs Four I2Cs Four SSIs CAN 2.0 GPIO Port D GPIO Port C 4 Twelve Timers Six 64-bit wide USB 2.0 JTAG 6 GPIO Port F GPIO Port E Two Analog Comparators ADC 2 channels 12 inputs 12 bits Two PWM Modules System Bus 8 5

islemci hızının ayarlanması #include <stdint.h> #include <stdbool.h> #include "inc/tm4c123gh6pm.h" // stellaris icin: #include "inc/lm4f120h5qr.h" #include "inc/hw_types.h" // SysCtl ile baslayan fonksiyonlarda gerekli #include "driverlib/sysctl.h" void init_port_f() { volatile unsigned long delay; SYSCTL_RCGC2_R = SYSCTL_RCGC2_GPIOF; delay = SYSCTL_RCGC2_R; GPIO_PORTF_DIR_R = 0b01110; GPIO_PORTF_AFSEL_R &= ~0b01110; GPIO_PORTF_DEN_R = 0b01110;

islemci hızının ayarlanması #include <stdint.h> #include <stdbool.h> #include "inc/tm4c123gh6pm.h" // stellaris icin: #include "inc/lm4f120h5qr.h" #include "inc/hw_types.h" // SysCtl ile baslayan fonksiyonlarda gerekli #include "driverlib/sysctl.h" void init_port_f() { volatile unsigned long delay; SYSCTL_RCGC2_R = SYSCTL_RCGC2_GPIOF; delay = SYSCTL_RCGC2_R; GPIO_PORTF_DIR_R = 0b01110; GPIO_PORTF_AFSEL_R &= ~0b01110; GPIO_PORTF_DEN_R = 0b01110;

islemci hızının ayarlanması #include <stdint.h> #include <stdbool.h> #include "inc/tm4c123gh6pm.h" // stellaris icin: #include "inc/lm4f120h5qr.h" #include "inc/hw_types.h" // SysCtl ile baslayan fonksiyonlarda gerekli #include "driverlib/sysctl.h" void init_port_f() { volatile unsigned long delay; SYSCTL_RCGC2_R = SYSCTL_RCGC2_GPIOF; delay = SYSCTL_RCGC2_R; GPIO_PORTF_DIR_R = 0b01110; GPIO_PORTF_AFSEL_R &= ~0b01110; GPIO_PORTF_DEN_R = 0b01110;

islemci hızının ayarlanması int main() { volatile unsigned long delay; // USE_PLL -> 200 / SYSDIV_X // USE_OSC -> 16 / SYSDIV_X // 200 / 2.5 = 80 Mhz (clock source crystal oscilator) SysCtlClockSet(SYSCTL_SYSDIV_2_5 SYSCTL_USE_PLL SYSCTL_OSC_MAIN SYSCTL_XTAL_16MHZ); volatile unsigned long clock_period_1 = SysCtlClockGet(); init_port_f(); while (1) { GPIO_PORTF_DATA_R ^= 0b00100; for (delay = 0 ; delay < 1000000 ; delay++) /* */;

islemci hızının ayarlanması int main() { volatile unsigned long delay; // USE_PLL -> 200 / SYSDIV_X // USE_OSC -> 16 / SYSDIV_X // 200 / 2.5 = 80 Mhz (clock source crystal oscilator) SysCtlClockSet(SYSCTL_SYSDIV_2_5 SYSCTL_USE_PLL SYSCTL_OSC_MAIN SYSCTL_XTAL_16MHZ); volatile unsigned long clock_period_1 = SysCtlClockGet(); init_port_f(); while (1) { GPIO_PORTF_DATA_R ^= 0b00100; for (delay = 0 ; delay < 1000000 ; delay++) /* */;

islemci hızının ayarlanması int main() { volatile unsigned long delay; // USE_PLL -> 200 / SYSDIV_X // USE_OSC -> 16 / SYSDIV_X // 200 / 2.5 = 80 Mhz (clock source crystal oscilator) SysCtlClockSet(SYSCTL_SYSDIV_2_5 SYSCTL_USE_PLL SYSCTL_OSC_MAIN SYSCTL_XTAL_16MHZ); volatile unsigned long clock_period_1 = SysCtlClockGet(); init_port_f(); while (1) { GPIO_PORTF_DATA_R ^= 0b00100; for (delay = 0 ; delay < 1000000 ; delay++) /* */;

islemci hızının ayarlanması int main() { volatile unsigned long delay; // USE_PLL -> 200 / SYSDIV_X // USE_OSC -> 16 / SYSDIV_X // 200 / 2.5 = 80 Mhz (clock source crystal oscilator) SysCtlClockSet(SYSCTL_SYSDIV_2_5 SYSCTL_USE_PLL SYSCTL_OSC_MAIN SYSCTL_XTAL_16MHZ); volatile unsigned long clock_period_1 = SysCtlClockGet(); init_port_f(); while (1) { GPIO_PORTF_DATA_R ^= 0b00100; for (delay = 0 ; delay < 1000000 ; delay++) /* */;

islemci hızının ayarlanması int main() { volatile unsigned long delay; // USE_PLL -> 200 / SYSDIV_X // USE_OSC -> 16 / SYSDIV_X // 200 / 2.5 = 80 Mhz (clock source crystal oscilator) SysCtlClockSet(SYSCTL_SYSDIV_2_5 SYSCTL_USE_PLL SYSCTL_OSC_MAIN SYSCTL_XTAL_16MHZ); volatile unsigned long clock_period_1 = SysCtlClockGet(); init_port_f(); while (1) { GPIO_PORTF_DATA_R ^= 0b00100; for (delay = 0 ; delay < 1000000 ; delay++) /* */;

islemci hızının ayarlanması int main() { volatile unsigned long delay; // USE_PLL -> 200 / SYSDIV_X // USE_OSC -> 16 / SYSDIV_X // 200 / 2.5 = 80 Mhz (clock source crystal oscilator) SysCtlClockSet(SYSCTL_SYSDIV_2_5 SYSCTL_USE_PLL SYSCTL_OSC_MAIN SYSCTL_XTAL_16MHZ); volatile unsigned long clock_period_1 = SysCtlClockGet(); init_port_f(); while (1) { GPIO_PORTF_DATA_R ^= 0b00100; for (delay = 0 ; delay < 1000000 ; delay++) /* */;

islemci hızının ayarlanması int main() { volatile unsigned long delay; // USE_PLL -> 200 / SYSDIV_X // USE_OSC -> 16 / SYSDIV_X // 200 / 5 = 40 Mhz (clock source crystal oscilator) SysCtlClockSet(SYSCTL_SYSDIV_5 SYSCTL_USE_PLL SYSCTL_OSC_MAIN SYSCTL_XTAL_16MHZ); volatile unsigned long clock_period_2 = SysCtlClockGet(); init_port_f(); while (1) { GPIO_PORTF_DATA_R ^= 0b00100; for (delay = 0 ; delay < 1000000 ; delay++) /* */;

islemci hızının ayarlanması int main() { volatile unsigned long delay; // USE_PLL -> 200 / SYSDIV_X // USE_OSC -> 16 / SYSDIV_X // 200 / 10 = 20 Mhz (clock source crystal oscilator) SysCtlClockSet(SYSCTL_SYSDIV_10 SYSCTL_USE_PLL SYSCTL_OSC_MAIN SYSCTL_XTAL_16MHZ); volatile unsigned long clock_period_3 = SysCtlClockGet(); init_port_f(); while (1) { GPIO_PORTF_DATA_R ^= 0b00100; for (delay = 0 ; delay < 1000000 ; delay++) /* */;

islemci hızının ayarlanması int main() { volatile unsigned long delay; // USE_PLL -> 200 / SYSDIV_X // USE_OSC -> 16 / SYSDIV_X // 16 / 1 = 16 Mhz (clock source crystal oscilator) SysCtlClockSet(SYSCTL_SYSDIV_1 SYSCTL_USE_OSC SYSCTL_OSC_MAIN SYSCTL_XTAL_16MHZ); volatile unsigned long clock_period_4 = SysCtlClockGet(); init_port_f(); while (1) { GPIO_PORTF_DATA_R ^= 0b00100; for (delay = 0 ; delay < 1000000 ; delay++) /* */;

islemci hızının ayarlanması int main() { volatile unsigned long delay; // USE_PLL -> 200 / SYSDIV_X // USE_OSC -> 16 / SYSDIV_X // 16 / 2 = 8 Mhz (clock source crystal oscilator) SysCtlClockSet(SYSCTL_SYSDIV_2 SYSCTL_USE_OSC SYSCTL_OSC_MAIN SYSCTL_XTAL_16MHZ); volatile unsigned long clock_period_5 = SysCtlClockGet(); init_port_f(); while (1) { GPIO_PORTF_DATA_R ^= 0b00100; for (delay = 0 ; delay < 1000000 ; delay++) /* */;

Port F Kesmesi

Port F Kesmesi Cortex M4 8 32k RAM GPIO Port B GPIO Port A 8 Eight UARTs Four I2Cs Four SSIs CAN 2.0 GPIO Port D GPIO Port C 4 Twelve Timers Six 64-bit wide USB 2.0 JTAG 6 GPIO Port F GPIO Port E Two Analog Comparators ADC 2 channels 12 inputs 12 bits Two PWM Modules System Bus 8 5

Port F Kesmesi

Tiva & Stellaris Port Baglantıları

Nested Vector Interrup Controller (NVIC) extern void PortF_interrupt_handler();

Interrupt Service Rutine (ISR) // The vector table alanı içindeki IntDefaultHandler, // GPIO Port F satırı aşağıdaki gibi değiştirilmeli PortF_interrupt_handler, // GPIO Port F

Kütüphane tanımlamaları #include <stdint.h> #include <stdbool.h> #include "inc/tm4c123gh6pm.h" // stellaris icin: #include "inc/lm4f120h5qr.h"

Kesme Fonksiyonları static inline void disable_interrupts() { //Kesmeleri pasif yap asm("cpsid I"); static inline void enable_interrupts() { // Kesmeleri aktifleştir asm("cpsie I"); static inline void wait_for_interrupt() { // Kesme olana kadar bekle asm("wfi");

PortF Kurulumu void init_port_f() { volatile unsigned long tmp; SYSCTL_RCGCGPIO_R = 0x00000020; tmp = SYSCTL_RCGCGPIO_R; GPIO_PORTF_LOCK_R = 0x4C4F434B; GPIO_PORTF_CR_R = 0x1F; GPIO_PORTF_AMSEL_R = 0x00; GPIO_PORTF_PCTL_R = 0x00000000; GPIO_PORTF_DIR_R = 0x0E; GPIO_PORTF_AFSEL_R = 0x00; GPIO_PORTF_PUR_R = 0x11; GPIO_PORTF_DEN_R = 0x1F; // Port F nin saatini aktifleştir // Saatin başlaması için gecikme // Port F GPIO kilidini aç // PF4-0 kilidini aç // PF anlog I/O kapat // PF4-0 GPIO olarak ayarla // PF4,PF0 giriş, PF3-1 çıkış // PF7-0 Alternatif fonksiyonları kapat // PF0 ve PF4 üzerindeki pull-up direncini // aktifleştir // PF4-0 digital I/O aktifleştir

PortF Kesme Kurulumu void PF4_interrupt_init() { GPIO_PORTF_IS_R &= ~0b10000; // PC4 is kenar hassas GPIO_PORTF_IBE_R &= ~0b10000; // PC4 iki kenara hassas değil GPIO_PORTF_IEV_R &= ~0b10000; // PC4 düşen kenar hassasiyeti GPIO_PORTF_ICR_R = 0b10000; // flag4 kesmesini temizle GPIO_PORTF_IM_R = 0b10000; // PC4 kesmesi aktifleştir NVIC_PRI7_R = (NVIC_PRI7_R & 0xFF00FFFF) 0x00A00000; // NVIC_SYS_PRI3_R kaydında TICK alanını kullanarak SysTick kesmelerinin önceliğini // oluşturulur NVIC_EN0_R = (1<<30); // NVIC_ST_CTRL_R kontrol saklayıcısına istenen modu yazılır

Kesme Esnasında Çalısacak Fonksiyon volatile uint32_t kesme_sayisi = 0; void PortF_interrupt_handler() { disable_interrupts(); GPIO_PORTF_ICR_R = 0b10000; // flag4 kesmesini temizle kesme_sayisi++; // yesil ledi ters cevir GPIO_PORTF_DATA_R ^= 0b01000; enable_interrupts();

Kesme Esnasında Çalısacak Fonksiyon volatile uint32_t kesme_sayisi = 0; void PortF_interrupt_handler() { disable_interrupts(); GPIO_PORTF_ICR_R = 0b10000; // flag4 kesmesini temizle kesme_sayisi++; // yesil ledi ters cevir GPIO_PORTF_DATA_R ^= 0b01000; enable_interrupts();

Kesme Esnasında Çalısacak Fonksiyon volatile uint32_t kesme_sayisi = 0; void PortF_interrupt_handler() { disable_interrupts(); GPIO_PORTF_ICR_R = 0b10000; // flag4 kesmesini temizle kesme_sayisi++; // ledi ters cevir GPIO_PORTF_DATA_R ^= 0b01000; enable_interrupts();

Kesme Esnasında Çalısacak Fonksiyon volatile uint32_t kesme_sayisi = 0; void PortF_interrupt_handler() { disable_interrupts(); GPIO_PORTF_ICR_R = 0b10000; // flag4 kesmesini temizle kesme_sayisi++; // ledi ters cevir GPIO_PORTF_DATA_R ^= 0b01000; enable_interrupts();

Kesme islemi int main() { init_port_f(); PF4_interrupt_init(); enable_interrupts(); while (1) { wait_for_interrupt();

Kesme islemi int main() { init_port_f(); PF4_interrupt_init(); enable_interrupts(); while (1) { wait_for_interrupt();

Kesme islemi int main() { init_port_f(); PF4_interrupt_init(); enable_interrupts(); while (1) { wait_for_interrupt();

Timer islemleri

Timer islemleri

Timer islemleri Cortex M4 8 32k RAM GPIO Port B GPIO Port A 8 Eight UARTs Four I2Cs Four SSIs CAN 2.0 GPIO Port D GPIO Port C 4 Twelve Timers Six 64-bit wide USB 2.0 JTAG 6 GPIO Port F GPIO Port E Two Analog Comparators ADC 2 channels 12 inputs 12 bits Two PWM Modules System Bus 8 5

Timer islemleri

Timer islemleri

Timer islemleri 1 saniye Timer0A 1/10 saniyede Timer1A

Timer islemleri extern void timer_0a_handler(); extern void timer_1a_handler();

Timer islemleri // The vector table alanı içindeki // The vector table alanı içindeki IntDefaultHandler,... IntDefaultHandler, timer_0a_handler,... IntDefaultHandler, // Timer 0 subtimer A // Timer 1 subtimer A // Timer 0 subtimer A // Timer 1 subtimer A

Timer islemleri #include <stdint.h> #include <stdbool.h> #include "inc/tm4c123gh6pm.h" #include "inc/hw_types.h" #include "inc/hw_memmap.h" #include "driverlib/sysctl.h" #include "driverlib/timer.h"

Timer islemleri static inline void disable_interrupts() {asm("cpsid I"); static inline void enable_interrupts() {asm("cpsie I"); static inline void wait_for_interrupt() {asm("wfi");

Timer islemleri void init_port_b() { volatile unsigned long delay; SYSCTL_RCGC2_R = SYSCTL_RCGC2_GPIOB; delay = SYSCTL_RCGC2_R; GPIO_PORTB_DIR_R = 0xFF; GPIO_PORTB_AFSEL_R &= ~0xFF; GPIO_PORTB_DEN_R = 0xFF;

Timer islemleri void init_port_f() { volatile unsigned long delay; SYSCTL_RCGC2_R = SYSCTL_RCGC2_GPIOF; delay = SYSCTL_RCGC2_R; GPIO_PORTF_DIR_R = 0b01110; GPIO_PORTF_AFSEL_R &= ~0b01110; GPIO_PORTF_DEN_R = 0b01110;

Timer islemleri void init_timer_0a(int period) { // timer_0 modulunu aktiflestir SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0); // timer_0 i periyodik olarak ayarla TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC); // timer_0a modulunu "period" sayisindan geri sayacak sekilde ayarla TimerLoadSet(TIMER0_BASE, TIMER_A, period); // timer_0a kesmesini aktiflesitr IntEnable(INT_TIMER0A); TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT); // timer_0a'yi baslat TimerEnable(TIMER0_BASE, TIMER_A);

Timer islemleri void init_timer_1a(int period) { // timer_1 modulunu aktiflestir SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1); // timer_1 i periyodik olarak ayarla TimerConfigure(TIMER1_BASE, TIMER_CFG_PERIODIC); // timer_1a modulunu "period" sayisindan geri sayacak sekilde ayarla TimerLoadSet(TIMER1_BASE, TIMER_A, period); // timer_1a kesmesini aktiflesitr IntEnable(INT_TIMER1A); TimerIntEnable(TIMER1_BASE, TIMER_TIMA_TIMEOUT); // timer_1a'yi baslat TimerEnable(TIMER1_BASE, TIMER_A);

Timer islemleri const uint8_t kodlar[] = { 0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110, 0b01101101, 0b01111101, 0b00000111, 0b01111111, 0b01101111 ;

Timer islemleri int sayi = 0; void timer_0a_handler() { // timer interrupt clear (timer kesmesini algiladigimizi bildiriyoruz) TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT); // sayiyi arttirip 7-segmentte gosterc sayi = (sayi + 1) % 10; GPIO_PORTB_DATA_R = kodlar[sayi];

Timer islemleri void timer_1a_handler() { // timer interrupt clear (timer kesmesini algiladigimizi bildiriyoruz) TimerIntClear(TIMER1_BASE, TIMER_TIMA_TIMEOUT); GPIO_PORTF_DATA_R ^= 0b00010;

Timer islemleri int main() { volatile unsigned long delay; disable_interrupts(); // timer_0a kesmesini saniyede 1 kere calisacak sekilde kur init_timer_0a(sysctlclockget()); // timer_1a kesmesini saniyede 10 kere calisacak sekilde kur init_timer_1a( ()/10); init_port_b(); init_port_f(); enable_interrupts(); GPIO_PORTB_DATA_R = kodlar[sayi]; while (1) { wait_for_interrupt();

SysTick, Timer, 4 seven segment a b c d e f g Gnd Gnd Gnd Gnd

Timer islemleri extern void ekran_guncelleme_timer(); extern void systick_handler();

SysTick, Timer, 4 seven segment // The vector table alanı içindeki // The vector table alanı içindeki IntDefaultHandler,... IntDefaultHandler, systick_handler,... ekran_guncelleme_timer, // The SysTick handle // Timer 1 subtimer A // The SysTick handler // Timer 1 subtimer A

SysTick, Timer, 4 seven segment /** * ornekte systick kesmesi zamani olcmek icin, * timer kesmesi ekrani guncellemek icin kullaniliyor. */ #include <stdint.h> #include <stdbool.h> #include "inc/tm4c123gh6pm.h" // stellaris icin: #include "inc/lm4f120h5qr.h" // stellaris icin: #include "inc/hw_ints.h" #include "inc/hw_types.h" #include "inc/hw_memmap.h" #include "driverlib/sysctl.h" #include "driverlib/timer.h"

SysTick, Timer, 4 seven segment static inline void disable_interrupts() { asm("cpsid I"); static inline void enable_interrupts() { asm("cpsie I"); static inline void wait_for_interrupt() { asm("wfi");

SysTick, Timer, 4 seven segment void init_port_b() { volatile unsigned long delay; SYSCTL_RCGC2_R = SYSCTL_RCGC2_GPIOB; delay = SYSCTL_RCGC2_R; GPIO_PORTB_DIR_R = 0xFF; GPIO_PORTB_AFSEL_R &= ~0xFF; GPIO_PORTB_DEN_R = 0xFF;

SysTick, Timer, 4 seven segment void init_port_e() { volatile unsigned long delay; SYSCTL_RCGC2_R = SYSCTL_RCGC2_GPIOE; delay = SYSCTL_RCGC2_R; GPIO_PORTE_DIR_R = 0x0f; GPIO_PORTE_AFSEL_R &= ~0x0f; GPIO_PORTE_DEN_R = 0x0f;

SysTick, Timer, 4 seven segment void init_timer_0a(int period) { // timer_0 modulunu aktiflestir SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0); // timer_0 i periyodik olarak ayarla TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC); // timer_0a modulunu "period" sayisindan geri sayacak sekilde ayarla TimerLoadSet(TIMER0_BASE, TIMER_A, period); // timer_0a kesmesini aktiflesitr IntEnable(INT_TIMER0A); TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT); // timer_0a'yi baslat TimerEnable(TIMER0_BASE, TIMER_A);

SysTick, Timer, 4 seven segment void SysTick_Init(unsigned long period) { NVIC_ST_CTRL_R = 0; // disable SysTick during setup NVIC_ST_RELOAD_R = period - 1; // reload value NVIC_ST_CURRENT_R = 0; // any write to current clears it NVIC_SYS_PRI3_R = (NVIC_SYS_PRI3_R & 0x00FFFFFF) 0x40000000; // priority 2 NVIC_ST_CTRL_R = 0x07; // enable SysTick with core clock and interrupts // enable interrupts after all initialization is finished

SysTick, Timer, 4 seven segment // 0'dan 9'a kadar olan sayilarin seven segment kodlari // bit sirasi: g f e d c b a uint8_t kodlar[10] = { 0b0111111, 0b0000110, 0b1011011, 0b1001111, 0b1100110, 0b1101101, 0b1111101, 0b0000111, 0b1111111, 0b1101111 ;

SysTick, Timer, 4 seven segment // 1 saniyedeki systick kesmesi sayisi #define SYSTICK_HZ 10 // 1 saniyede kac kere ekran guncelleme kesmesi olacagi #define EKRAN_KESME_HZ 400 // ekranda gosterilen sayi int sayi = 1234; // baslangictan itibaren olusan systick kesmesi sayisi uint32_t systick_count = 0; // ekran guncelleme kesmesinin sayaci int ekran_guncelle_sayac = 0;

SysTick, Timer, 4 seven segment /** systick kesmesinde calistirilan fonksiyon */ void systick_handler() { systick_count++; // 5 saniyede bir sayiyi arttir if (systick_count % (SYSTICK_HZ * 5) == 0) sayi++;

SysTick, Timer, 4 seven segment void ekran_guncelleme_timer() { /** Timer0A kesmesinde calistirilan fonksiyon */ // timer interrupt clear (timer kesmesini algiladigimizi bildiriyoruz) TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT); ekran_guncelle_sayac++; if (ekran_guncelle_sayac % 4 == 1) { int birler = sayi % 10; GPIO_PORTE_DATA_R = 0b1111; // hepsini kapat GPIO_PORTB_DATA_R = kodlar[birler]; GPIO_PORTE_DATA_R &= ~0b0001; // birler basamagini aktiflestir else if (ekran_guncelle_sayac % 4 == 2) { int onlar = (sayi / 10) % 10; GPIO_PORTE_DATA_R = 0b1111; // hepsini kapat GPIO_PORTB_DATA_R = kodlar[onlar]; GPIO_PORTE_DATA_R &= ~0b0010; // onlar basamagini aktiflestir else if (ekran_guncelle_sayac % 4 == 3) { int yuzler = (sayi / 100) % 10; GPIO_PORTE_DATA_R = 0b1111; // hepsini kapat GPIO_PORTB_DATA_R = kodlar[yuzler]; GPIO_PORTE_DATA_R &= ~0b0100; // yuzler basamagini aktiflestir else if (ekran_guncelle_sayac % 4 == 0) { int binler = (sayi / 1000) % 10; GPIO_PORTE_DATA_R = 0b1111; // hepsini kapat GPIO_PORTB_DATA_R = kodlar[binler]; GPIO_PORTE_DATA_R &= ~0b1000; // binler basamagini aktiflestir

SysTick, Timer, 4 seven segment int main() { init_port_b(); init_port_e(); // Ekran guncelleme islemi icin saniyede EKRAN_KESME_HZ tane kesme uretilecek init_timer_0a(sysctlclockget() / EKRAN_KESME_HZ); // Zaman olcmek icin saniyede SYSTICK_HZ tane kesme uretilecek SysTick_Init(SysCtlClockGet() / SYSTICK_HZ); enable_interrupts(); // kesmeleri aktiflestir while (1) { wait_for_interrupt();

Sorular

Es zamanlı islem yapma Frekansı 100 olarak ayarlanmıs systick kesmesi ile zaman ölçümü yapmak Seven segment kullanarak SANiYEDE BiR sayma Ledi 2.5 SANiYE yak, 2.5 SANiYE söndür

Tiva/Stellaris 7 Segment & Buton & Led Bağlantısı PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7 PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7 PE0 PE1 PE2 PE3 PE4 PE5 PF0 PF1 PF2 PF3 PF4 Vcc Seven Segment

Tiva/Stellaris 7 Segment & Buton & Led Bağlantısı PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7 PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7 PE0 PE1 PE2 PE3 PE4 PE5 PF0 PF1 PF2 PF3 PF4 Vcc Seven Segment Led

Nested Vector Interrup Controller (NVIC)

Interrupt Service Rutine ISR

Interrupt Service Rutine ISR // The vector table alanı içindeki IntDefaultHandler, // The SysTick handler satırı aşağıdaki gibi değiştirilmeli systick_handler, // The SysTick handler

Kütüphane Tanımlamaları #include <stdint.h> #include <stdbool.h> #include "inc/tm4c123gh6pm.h" // stellaris icin: #include "inc/lm4f120h5qr.h" #include "inc/hw_types.h" #include "driverlib/sysctl.h" // SysCtl ile baslayan fonksiyonlarda gerekli // 1 saniyede SYSTICK Kadar kesme üret #define SYSTICK_HZ 100

Kütüphane Tanımlamaları #include <stdint.h> #include <stdbool.h> #include "inc/tm4c123gh6pm.h" // stellaris icin: #include "inc/lm4f120h5qr.h" #include "inc/hw_types.h" #include "driverlib/sysctl.h" // SysCtl ile baslayan fonksiyonlarda gerekli // 1 saniyede SYSTICK Kadar kesme üret #define SYSTICK_HZ 100

Kütüphane Tanımlamaları #include <stdint.h> #include <stdbool.h> #include "inc/tm4c123gh6pm.h" // stellaris icin: #include "inc/lm4f120h5qr.h" #include "inc/hw_types.h" #include "driverlib/sysctl.h" // SysCtl ile baslayan fonksiyonlarda gerekli // 1 saniyede SYSTICK Kadar kesme üret #define SYSTICK_HZ 100

Kesme Fonksiyonları static inline void disable_interrupts() { //Kesmeleri pasif yap asm("cpsid I"); static inline void enable_interrupts() { // Kesmeleri aktifleştir asm("cpsie I"); static inline void wait_for_interrupt() { // Kesme olana kadar bekle asm("wfi");

Port F İlklendirme void init_port_f() { volatile unsigned long tmp; SYSCTL_RCGCGPIO_R = 0x00000020; tmp = SYSCTL_RCGCGPIO_R; GPIO_PORTF_LOCK_R = 0x4C4F434B; GPIO_PORTF_CR_R = 0x1F; GPIO_PORTF_AMSEL_R = 0x00; GPIO_PORTF_PCTL_R = 0x00000000; GPIO_PORTF_DIR_R = 0x0E; GPIO_PORTF_AFSEL_R = 0x00; GPIO_PORTF_PUR_R = 0x11; GPIO_PORTF_DEN_R = 0x1F; // Port F nin saatini aktifleştir // Saatin başlaması için gecikme // Port F GPIO kilidini aç // PF4-0 kilidini aç // PF anlog I/O kapat // PF4-0 GPIO olarak ayarla // PF4,PF0 giriş, PF3-1 çıkış // PF7-0 Alternatif fonksiyonları kapat // PF0 ve PF4 üzerindeki pull-up direncini // aktifleştir // PF4-0 digital I/O aktifleştir

Port B İlklendirme void init_port_b() { volatile unsigned long delay; SYSCTL_RCGC2_R = SYSCTL_RCGC2_GPIOB; delay = SYSCTL_RCGC2_R; GPIO_PORTB_DIR_R = 0xFF; GPIO_PORTB_AFSEL_R &= ~0xFF; GPIO_PORTB_DEN_R = 0xFF;

Seven Segment Tablosu uint8_t kodlar[] = { 0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110, 0b01101101, 0b01111101, 0b00000111, 0b01111111, 0b01101111 ;

Kesme İlklendirme /** SysTick_Init() fonksiyonu systick kesmesini aktifleştiriyor. Kaç saniyede bir kesme üretileceğini verilen period parametresine göre ayarlanıyor. */ void SysTick_Init(unsigned long period){ NVIC_ST_CTRL_R = 0; // SysTick'i kapatmak için ENABLE bitini temizlenir NVIC_ST_RELOAD_R = period-1; // RELOAD saklayıcısı ayarlanır NVIC_ST_CURRENT_R = 0; // Sayacı silmek için NVIC_ST_CURRENT_R'ye // herhangi bir değer yazılır NVIC_SYS_PRI3_R = (NVIC_SYS_PRI3_R & 0x00FFFFFF) 0x40000000; // NVIC_SYS_PRI3_R kaydında TICK alanını kullanarak SysTick kesmelerinin // önceliğini oluşturulur NVIC_ST_CTRL_R = 0x07; // NVIC_ST_CTRL_R kontrol saklayıcısına istenen modu yazılır

// baslangictan itibaren olusan systick kesmesi sayisi uint32_t systick_count = 0; Kesmede Çalışacak Fonksiyon // 7-segmentte gosterilen sayi volatile int sayi = 0; volatile int flag_sayi_arttir = 0; volatile int flag_ledi_ters_cevir = 0; void systick_handler() { // systick kesmesi oldugunda bu fonksiyon calisacak systick_count++; // kac tane systick kesmesi oldugunu say // Saniyede bir sayiyi arttirma flagini 1 yap // saydigimiz systick sayisi 100'e tam bolunuyorsa 1 saniye gecmistir if ((systick_count % (SYSTICK_HZ * 1)) == 0) flag_sayi_arttir = 1; // 5/2=2.5 saniyede bir ledi ters cevirme isleminin flagini 1 yap if (systick_count % (SYSTICK_HZ * 5/2) == 0)

// baslangictan itibaren olusan systick kesmesi sayisi uint32_t systick_count = 0; Kesmede Çalışacak Fonksiyon // 7-segmentte gosterilen sayi volatile int sayi = 0; volatile int flag_sayi_arttir = 0; volatile int flag_ledi_ters_cevir = 0; void systick_handler() { // systick kesmesi oldugunda bu fonksiyon calisacak systick_count++; // kac tane systick kesmesi oldugunu say // Saniyede bir sayiyi arttirma flagini 1 yap // saydigimiz systick sayisi 100'e tam bolunuyorsa 1 saniye gecmistir if ((systick_count % (SYSTICK_HZ * 1)) == 0) flag_sayi_arttir = 1; // 5/2=2.5 saniyede bir ledi ters cevirme isleminin flagini 1 yap if (systick_count % (SYSTICK_HZ * 5/2) == 0)

// baslangictan itibaren olusan systick kesmesi sayisi uint32_t systick_count = 0; Kesmede Çalışacak Fonksiyon // 7-segmentte gosterilen sayi volatile int sayi = 0; volatile int flag_sayi_arttir = 0; volatile int flag_ledi_ters_cevir = 0; void systick_handler() { // systick kesmesi oldugunda bu fonksiyon calisacak systick_count++; // kac tane systick kesmesi oldugunu say // Saniyede bir sayiyi arttirma flagini 1 yap // saydigimiz systick sayisi 100'e tam bolunuyorsa 1 saniye gecmistir if ((systick_count % (SYSTICK_HZ * 1)) == 0) flag_sayi_arttir = 1; // 5/2=2.5 saniyede bir ledi ters cevirme isleminin flagini 1 yap if (systick_count % (SYSTICK_HZ * 5/2) == 0)

// baslangictan itibaren olusan systick kesmesi sayisi uint32_t systick_count = 0; Kesmede Çalışacak Fonksiyon // 7-segmentte gosterilen sayi volatile int sayi = 0; volatile int flag_sayi_arttir = 0; volatile int flag_ledi_ters_cevir = 0; void systick_handler() { // systick kesmesi oldugunda bu fonksiyon calisacak systick_count++; // kac tane systick kesmesi oldugunu say // Saniyede bir sayiyi arttirma flagini 1 yap // saydigimiz systick sayisi 100'e tam bolunuyorsa 1 saniye gecmistir if ((systick_count % (SYSTICK_HZ * 1)) == 0) flag_sayi_arttir = 1; // 5/2=2.5 saniyede bir ledi ters cevirme isleminin flagini 1 yap if (systick_count % (SYSTICK_HZ * 5/2) == 0)

// baslangictan itibaren olusan systick kesmesi sayisi uint32_t systick_count = 0; Kesmede Çalışacak Fonksiyon // 7-segmentte gosterilen sayi volatile int sayi = 0; volatile int flag_sayi_arttir = 0; volatile int flag_ledi_ters_cevir = 0; void systick_handler() { // systick kesmesi oldugunda bu fonksiyon calisacak systick_count++; // kac tane systick kesmesi oldugunu say // Saniyede bir sayiyi arttirma flagini 1 yap // saydigimiz systick sayisi 100'e tam bolunuyorsa 1 saniye gecmistir if ((systick_count % (SYSTICK_HZ * 1)) == 0) flag_sayi_arttir = 1; // 5/2=2.5 saniyede bir ledi ters cevirme isleminin flagini 1 yap if (systick_count % (SYSTICK_HZ * 5/2) == 0)

int main() { init_port_b(); init_port_f(); Kesme Uygulaması // 1 saniyede SYSTICK_HZ tane kesme uretecek sekilde ayarlar SysTick_Init(SysCtlClockGet() / SYSTICK_HZ); enable_interrupts(); while (1) { if (flag_sayi_arttir) { flag_sayi_arttir = 0; sayi = (sayi + 1) % 10; GPIO_PORTB_DATA_R = kodlar[sayi]; if (flag_ledi_ters_cevir) { flag_ledi_ters_cevir = 0; GPIO_PORTF_DATA_R ^= 0b00100; wait_for_interrupt(); // sonraki kesmeye kadar islemciyi uyku moduna alir

int main() { init_port_b(); init_port_f(); Kesme Uygulaması // 1 saniyede SYSTICK_HZ tane kesme uretecek sekilde ayarlar SysTick_Init(SysCtlClockGet() / SYSTICK_HZ); enable_interrupts(); while (1) { if (flag_sayi_arttir) { flag_sayi_arttir = 0; sayi = (sayi + 1) % 10; GPIO_PORTB_DATA_R = kodlar[sayi]; if (flag_ledi_ters_cevir) { flag_ledi_ters_cevir = 0; GPIO_PORTF_DATA_R ^= 0b00100; wait_for_interrupt(); // sonraki kesmeye kadar islemciyi uyku moduna alir

int main() { init_port_b(); init_port_f(); Kesme Uygulaması // 1 saniyede SYSTICK_HZ tane kesme uretecek sekilde ayarlar SysTick_Init(SysCtlClockGet() / SYSTICK_HZ); enable_interrupts(); while (1) { if (flag_sayi_arttir) { flag_sayi_arttir = 0; sayi = (sayi + 1) % 10; GPIO_PORTB_DATA_R = kodlar[sayi]; if (flag_ledi_ters_cevir) { flag_ledi_ters_cevir = 0; GPIO_PORTF_DATA_R ^= 0b00100; wait_for_interrupt(); // sonraki kesmeye kadar islemciyi uyku moduna alir

int main() { init_port_b(); init_port_f(); Kesme Uygulaması // 1 saniyede SYSTICK_HZ tane kesme uretecek sekilde ayarlar SysTick_Init(SysCtlClockGet() / SYSTICK_HZ); enable_interrupts(); while (1) { if (flag_sayi_arttir) { flag_sayi_arttir = 0; sayi = (sayi + 1) % 10; GPIO_PORTB_DATA_R = kodlar[sayi]; if (flag_ledi_ters_cevir) { flag_ledi_ters_cevir = 0; GPIO_PORTF_DATA_R ^= 0b00100; wait_for_interrupt(); // sonraki kesmeye kadar islemciyi uyku moduna alir

int main() { init_port_b(); init_port_f(); Kesme Uygulaması // 1 saniyede SYSTICK_HZ tane kesme uretecek sekilde ayarlar SysTick_Init(SysCtlClockGet() / SYSTICK_HZ); enable_interrupts(); while (1) { if (flag_sayi_arttir) { flag_sayi_arttir = 0; sayi = (sayi + 1) % 10; GPIO_PORTB_DATA_R = kodlar[sayi]; if (flag_ledi_ters_cevir) { flag_ledi_ters_cevir = 0; GPIO_PORTF_DATA_R ^= 0b00100; wait_for_interrupt(); // sonraki kesmeye kadar islemciyi uyku moduna alir

int main() { init_port_b(); init_port_f(); Kesme Uygulaması // 1 saniyede SYSTICK_HZ tane kesme uretecek sekilde ayarlar SysTick_Init(SysCtlClockGet() / SYSTICK_HZ); enable_interrupts(); while (1) { if (flag_sayi_arttir) { flag_sayi_arttir = 0; sayi = (sayi + 1) % 10; GPIO_PORTB_DATA_R = kodlar[sayi]; if (flag_ledi_ters_cevir) { flag_ledi_ters_cevir = 0; GPIO_PORTF_DATA_R ^= 0b00100; wait_for_interrupt(); // sonraki kesmeye kadar islemciyi uyku moduna alir

7 0b0111111, Parçalı Gösterge 0b0000110, 0b1011011, 0b1001111, 0b1100110, 0b1101101, 0b1111101, 0b0000111, 0b1111111,

Dörtlü 7 Parçalı Gösterge

Dörtlü 7 Parçalı Gösterge D1 12 A 11 F 10 D2 9 D3 8 B 7 1 E 2 D 3 4 C 5 G 6 D4 desimal

Dörtlü 7 Parçalı Gösterge D4 D3 D2 D1 a b c d e f g dp

Dörtlü 7 Parçalı Gösterge

Tiva/Stellaris 4 lü 7 Segment Bağlantısı PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7 PF0 PF1 PF2 PF3 PF4 PF5 PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7 PE0 PE1 PE2 PE3 PE4 Vcc Seven Segment

Dörtlü Seven Segment #include <stdint.h> #include <stdbool.h> #include "inc/tm4c123gh6pm.h" // stellaris icin: #include "inc/lm4f120h5qr.h"

Dörtlü Seven Segment void init_port_b() { volatile unsigned long delay; SYSCTL_RCGC2_R = SYSCTL_RCGC2_GPIOB; delay = SYSCTL_RCGC2_R; GPIO_PORTB_DIR_R = 0xFF; GPIO_PORTB_AFSEL_R &= ~0xFF; GPIO_PORTB_DEN_R = 0xFF;

Dörtlü Seven Segment void init_port_e() { volatile unsigned long delay; SYSCTL_RCGC2_R = SYSCTL_RCGC2_GPIOE; delay = SYSCTL_RCGC2_R; GPIO_PORTE_DIR_R = 0x0f; GPIO_PORTE_AFSEL_R &= ~0x0f; GPIO_PORTE_DEN_R = 0x0f;

Dörtlü Seven Segment // 0'dan 9'a kadar olan sayilarin seven segment kodlari // bit sirasi: g f e d c b a uint8_t kodlar[10] = { 0b0111111, 0b0000110, 0b1011011, 0b1001111, 0b1100110, 0b1101101, 0b1111101, 0b0000111, 0b1111111,

int main() Dörtlü { Seven Segment volatile unsigned long delay; init_port_b(); init_port_e(); int sayi = 1234; const int BEKLEME_LIMIT = 10000; while (1) { // Sonraki sunumlarda sadece while(1){ blogu gösterilecek

Dörtlü Seven Segment while (1) { int birler = sayi % 10; GPIO_PORTE_DATA_R = 0b1111; // hepsini kapat GPIO_PORTB_DATA_R = kodlar[birler]; GPIO_PORTE_DATA_R &= ~0b0001; // birler basamagini aktiflestir for (delay = 0 ; delay < BEKLEME_LIMIT ; delay++) /* bekle */; // Sonraki slaytlarda onlar, yüzler ve binler basamakları bu kısımda // anlatılmaktadır.

int birler = sayi % 10; GPIO_PORTE_DATA_R = 0b1111; // hepsini kapat GPIO_PORTB_DATA_R = kodlar[birler]; GPIO_PORTE_DATA_R &= ~0b0001; // birler basamagini aktiflestir for (delay = 0 ; delay < BEKLEME_LIMIT ; delay++) /* bekle */; Dörtlü Seven Segment int onlar = (sayi / 10) % 10; GPIO_PORTE_DATA_R = 0b1111; // hepsini kapat GPIO_PORTB_DATA_R = kodlar[onlar]; GPIO_PORTE_DATA_R &= ~0b0010; // onlar basamagini aktiflestir for (delay = 0 ; delay < BEKLEME_LIMIT ; delay++) /* bekle */; int yuzler = (sayi / 100) % 10; GPIO_PORTE_DATA_R = 0b1111; // hepsini kapat GPIO_PORTB_DATA_R = kodlar[yuzler]; GPIO_PORTE_DATA_R &= ~0b0100; // yuzler basamagini aktiflestir for (delay = 0 ; delay < BEKLEME_LIMIT ; delay++) /* bekle */; int binler = (sayi / 1000) % 10; GPIO_PORTE_DATA_R = 0b1111; // hepsini kapat GPIO_PORTB_DATA_R = kodlar[binler]; GPIO_PORTE_DATA_R &= ~0b1000; // binler basamagini aktiflestir