SlideShare une entreprise Scribd logo
1  sur  20
UART VE SERİ
HABERLEŞME
BİLAL BURAK İZGİ
CAN EZGİ AYDEMİR
UART NEDİR?


UART= Universal Asenkron Reciever Transmitter



UART seri ve paralel veriyi birbirine çevirir. PC sistem bus’ındaki paralel veri
UART tarafından belli bir yönde iletmek üzere seri veriye dönüştürülür. Öte
yandan karşıt yönden gelen seri veri de, yine UART tarafından, CPU ‘nun
sistem bus’ından okuması için, paralel veriye dönüştürülür.



Kullanım şekli:
START BIT | DATA(7-8 bit) | PARITY BIT | STOP BIT (1 veya 2 bit)



Programlanabilir.
UART Ne Sağlar?


Çift yönlü asenkron haberleşme



Yüksek doğrulukta baudrate üretebilme



8 veya 9 bit data uzunluğunda kullanabilme



Ayarlanabilir stop biti sayısı (1-2bit)



Senkron haberleşme için sinyal çıkışı



IrDA ve SmartCard arayüzü



Tek hat üzerinden, tek yönlü haberleşebilme



4 adet hata tespit bayrağı(overrun, noise, frame, parity)



6 adet kesme alabilme özelliği



2 adet kesme vektör adresi(RXI, TXI)



Azaltılmış güç tüketim modu



Çoklu işlemci haberleşme gibi özellikleri bulunmaktadır.
UART Veri Gönderme


Datalar en düşük değerlikli bitten en yüksek değerlikli bite doğru gönderilir.



Gönderici taraf TX (transmitter) hattını data göndermezken Lojik1 seviyesinde
tutar. Data gönderileceği anda hat Lojik 0 seviyesine çekilerek data
gönderilmeye başlanır.



Start bitinden sonra, datalar bit bit gönderilip dataların sonunda ise Stop biti
gönderilir.



Stop biti ise, son bitten sonra(MSB den sonra) hattı lojik 1 seviyesine çıkarma
işlemidir.
UART Veri Alma


Hattın lojik1’den lojik0 seviyesine çekildiğinde data gönderiminin başladığını
anlar gelen bitleri ayarlanan baudrate süresince alır ve buffer’ına yazar.



Stop biti ile buffera gelen data yazılmış olur. Ve ilgili flag set edilir.



Buffer dolduğunda set edilen bayrağı sürekli kontrol ederek datanın gelmiş
olduğunu anlarız.
Boundrate Süresi Nedir?


Baudrate 1 bitin ne kadar sürede gönderileceğini ve alınacağını belirleyen
bps(bit per second – 1 saniyede gönderilen bit sayısı) birimi ile ölçülür.



Baudrate parametresi 1200,2400,4800,9600,19200,115200



Alıcı taraf ile gönderici tarafın baudrate değeri aynı olmalıdır ki, gönderilen
datalar alıcı tarafında doğru bir şekilde alınabilsin.
UART UYGULAMASI
#include <mqx.h>
/*Bu kütüphane FreeScale işlemcilerde kodu işlemciye tanıtmak için ve işlemci
bacaklarında uygun işlemleri yapabilmek için kullanılan kütüphanedir.C tabanlı
bir kütüphane olup sadece FreeScale işlemcilerde kullanılmak üzere
oluşturulmuştur.USB'den gelen stack(yığın) verilerinin uygun bir şekilde
programda işlenebilmesinden kaynaklanmaktadır*/

#include <bsp.h>
/*bsp kütüphanesi Board Support Package (BSP) kelimelerinin baş harflerinden
oluşmaktadır. Türkçe karşılığı Kurulum Destek Paketidir.
Buradaki kullanılmasının amacı FreeScale işlemcisinin kurulumu ve program
tarafından desteklenmesinden dolayıdır.*/
#if ! BSPCFG_ENABLE_IO_SUBSYSTEM

#error This application requires BSPCFG_ENABLE_IO_SUBSYSTEM defined nonzero in user_config.h. Please recompile BSP with this option.

/*Programa exeption tanımlanmıştır. user_config.h 'da
BSPCFG_ENABLE_IO_SUBSYSTEM değeri eğer sıfır olarak tanımlanmadığında
programı tekrardan BSP edip
derlemek gerektiğini belirlemiştir. #endif ile de bahsi geçen exeption
sonlandırılmış ve tanımlanması durdurulmuştur. */

#endif


#ifndef BSP_DEFAULT_IO_CHANNEL_DEFINED



/* Burada da aynı şekilde bir exception tanımlanmıştır.Ve burada
BSP_DEFAULT_IO_CHANNEL_DEFINED değeri NULL olmalıdır. Eğer bu değerler
sağlanmamış ise program exception fırlatacaktır.Ayrıca sorununun giderilmesi
için de yapılması gereken şudur: user_config.h'ı ve programı tekrardan uygun
BSP'ye göre derlemek ve BSPCFG_ENABLE_TTYx değerini uygun olan sıfır
değerine getirmektir.Bu şekilde sorun giderilmiş olacaktır. Aynı şekilde #endif
ile tanımlanan exception'un tanımlanması durdurulmuşrur.*/



#error This application requires BSP_DEFAULT_IO_CHANNEL to be not NULL.
Please set corresponding BSPCFG_ENABLE_TTYx to non-zero in user_config.h
and recompile BSP with this option.



#endif



/*NOT: Bu exeption'ların programın hemen başında tanımlanmasının sebebi
şudur ki programın uygun olmayan değerlerle başlamasını engellemek ve
mikrodenetleyeciyi hatadan kurtarmaktır. Böylece program başlamadan olası
sorunlar göz önüne alınıp gereğinin yapılması noktasında kullanıcıyı
uyarmaktır.*/
#define UART_TASK 5// Burada define olarak UART_TASK değerine 5 atanmıştır. Buda
UART'ımızın ID'si olacaktır.
extern void uart_task(uint_32);/*uart_task fonksiyonu uartın seri port üzerinden veri alışverişi
için tanımlanmıştır.Fonksiyon içerisine bir
integer değer alacaktır.Kodda bu bu değer 32bit'lik bir olarak tanımlanmıştır.*/
TASK_TEMPLATE_STRUCT MQX_template_list[] =
{
{UART_TASK, uart_task, 1500, 9, "uart", MQX_AUTO_START_TASK, 0, 0},
{0,

0,

0, 0, 0,

0,

0, 0}

};
* Yukarıda belirtilen TASK_TEMPLATE_STRUCK komutu görev şablonları listesidir. Görev
şablonları listesinden bir görev tanımlanır. Görevler işlemci üzerinde tutulmaktadır
Bu komut yardımıyla program başlama aşamasında MQX kütüphanesi yardımıyla görev
şablonundan bir göre otomatik olarak başlatılacaktır. Bunun olması programı
daha optimum bir hale getirecektir.MQX_AUTO_START_TASK komutu TASK_TEMPLATE_STRUCT
komutuyla birlikte de kullanılabilir. Bunun sebebi ise belirttiğimiz gibi
programın başlangıçta bir görevle başlamasıdır.*/


/* Aşağıdaki komutla birlikte görev şablonundan bir görev artık çalışmaya
başlayacaktır*/



void uart_task(uint_32 initial_data)



{



/*Bu komutta taşma ve overflow meydana gelmemelidir. Ayrıca durdurulmak
istenildiğinde 1 bitlik 1 verisi gönderilip interrupt gerçekleştirilebilir.



Ayrıca seri porttan veri alıveriş hızı bu komuta göre 9600 Baud(bit/sn) dir.Bu
hızda seriport haberleşmesi sağlanmış olacaktır. */




int_32 c;

//32 bitlik bir karakter tanımlanıyor



uint_32 flags = 0;
//Taşmanın gerçekleşmemesi için ve programın
hareketleri neticesinde bayraklardaki değişim görmek için bütün bayraklar 0
yapılıyor.



uint_32 baudrate = 9600;
/*Seriport veri aktarım hızı 9600 baud olarak
belirleniyor.Eğer bu değer farklılık gösterirse hyperterminal'den göndereceğimiz



veriyi düzgün olarak okuyamayız ve ekrana anlamsız karakterler gelecektir.*/



uint_32 stop_bits = IO_SERIAL_STOP_BITS_1; /*Komutu sonlandırma biti 1 bit
olacak şekilde 1 tanımlanmıştır.Eğer seriporttan gelen veri 1 olursa program
sonlamış olacaktır*/



uint_32 parity_bits = IO_SERIAL_PARITY_NONE; /* Eşlik biti tanımlanmıştır.*/
FILE_PTR serial_fd = fopen(BSP_DEFAULT_IO_CHANNEL, 0); /*PILE_PTR
komutu stack overflow durumlarında kullanılır.Bilgisayar üzerindeki
bir dosyanın içerisindeki verileri yığın haline getirmede kullanılır.Özetle
buradaki kullanımına bakarsak fopen komutuyla Board Support Package'in veri
kanalındaki 0 portunu açarak seri porttan gelecek olan veriyi stack haline
getirecektir.Ve bu değer serial_fd de tutulmaktadır.*/

if (IO_OK != ioctl(serial_fd, IO_IOCTL_SERIAL_SET_FLAGS, &flags)) {

printf("Setting the is failed");
_mqx_exit(-1);
}
/*Yukarıdaki if yapısında bir kontol söz konusudur.Yukarıda seri porttan stack
haline getirilmiş olan serial_fd verisinin işlemci üzerindeki
flaglara bakarak eğer flaglarda beklenmedik bir değişme meydana gelirse
programı -1 değeriyle sonlandırıp FAILTURE değeri dönderecektir.*/
if (IO_OK != ioctl(serial_fd, IO_IOCTL_SERIAL_SET_BAUD, &baudrate)) {
printf("Setting the baudrate is failed");
_mqx_exit(-1);
}

/*Yukarıdaki koda bakarsak programın başında belirlenen baud değeriyle(9600)
uyuşmuyorsa program FAILTURE değer dönderecektir.Yukarıda da belirttiğimiz
gibi eğer belirlenen baud değerlerinde bir tutarsızlık yada eşleşmeme meydana
gelirse ekrana farklı anlamsız karakterler dönderecektir.*/

if (IO_OK != ioctl(serial_fd,IO_IOCTL_SERIAL_SET_PARITY , &parity_bits)) {
printf("Setting the parity bits is failed");
_mqx_exit(-1);
}

/* Yukarıdaki kodda programın başında belirtildiği gibi eşleşme bitinde bir
tutarsızlık meydana gelirse program FAILTURE dönderecektir.-1 parametresi ile
sonlandırılacaktır.*/
if (IO_OK != ioctl(serial_fd, IO_IOCTL_SERIAL_SET_STOP_BITS, &stop_bits)) {
printf("Setting the stop bits is failed");
_mqx_exit(-1);
}
/*Yine programın başında belirtildiği gibi yıgın haline getirilmiş olan serial_fd
değişkeninde eğer programı sonlandırma bit
1 bit olacak şekilde 1 değerinden farklı ise o zaman program hataya düşecek
ve FAILTURE değer dönderecektir.*/
printf("n Embedded Systems Laboratory rn");
printf("n EE @ USF rn");
printf("n LAB #6 - UART DEVICE DRIVER rnn");
printf("n ------ Type your characters below: ----rnn");
/*Yukarıda printf içeriside yazılı olan veriler program arayüzünde program bu
aşamaya kadar başarılı bir şekilde çalıştırıldığında
kullanıcının karşısına çıkacak olan verilerdir.Bu veriler statiktir. Printf
içindeki veriler değiştirilirse program çalıştırıldığında
kullanıcı karşısına çıkacak olan yazılar da değişecektir.*/
while (TRUE) {
if (fstatus( serial_fd )) /*fstatus komutu _io_fstatus komutunun ileri düzeyde dil formunda C++ dilindeki
kullanımıdır.Bu yığın haline getirilen serial_fd
değerimizin o anki statusunu ekrana getirmektedir.Buna göre seri porttan artık veri alış verişi
başlamıştır. Buradaki if yapısı ile de bu durum sağlanmaktadır.*/
{
c = fgetc( serial_fd ); // Yukarıda 32 bir şeklinde olacak olan c karakterimize fgetc komutu ile girilen
karakterin ascii değeri alınmaktadır.Böyle seri portta veri alış verişindeki karakter transferi başlamıştır.
if (c==IO_ERROR)
break;
/*Eğer c karakter değişkenimizdeki değer input girişine göre
tanımlanmayan tutarsız bir karakter ise sonsuz şekilde
tanımlanan while döndüsünden çıkılacak ve program sonlanacaktır. Fakat tutarlı
karakterlerdeki veriler gelmeye devam ettikçe döndü dönecek ve karakter
alınımına ve seri port haberleşmesine devam edilecektir.Yada sonlandırma biti gelinceye kadar
devam edecektir.*/
fputc((char)c,serial_fd); // Burada c karakter değişkenimizde tutan veri artık karşı tarafa
gönderilmiştir.Yukarıda da belirtildiği gibi bu durum tutarsız karakter gönderilene kadar devam edecektir.

}
}
fclose(serial_fd); /* Sonlandırma biti geldiği zaman yada tutarsız karakter geldiği zaman serial_fd yığınımızın
bağlı olduğu pointer yapısıyla kurulmuş olan
port haberleşmesi kapatılacaktır ve program sonlanacaktır.*/

}
Dinlediğiniz
için
Teşekkürler

Contenu connexe

Tendances

ARM Processor architecture
ARM Processor  architectureARM Processor  architecture
ARM Processor architecturerajkciitr
 
Embedded system design using arduino
Embedded system design using arduinoEmbedded system design using arduino
Embedded system design using arduinoSantosh Verma
 
Understanding Flash Bootloader Software and Automotive ECU Reprogramming
Understanding Flash Bootloader Software and Automotive ECU ReprogrammingUnderstanding Flash Bootloader Software and Automotive ECU Reprogramming
Understanding Flash Bootloader Software and Automotive ECU ReprogrammingEmbitel Technologies (I) PVT LTD
 
Pic microcontroller architecture
Pic microcontroller architecturePic microcontroller architecture
Pic microcontroller architectureJamia Hamdard
 
Serial connectors, Protocols , USB (universal serial bus)
Serial connectors, Protocols , USB (universal serial bus)Serial connectors, Protocols , USB (universal serial bus)
Serial connectors, Protocols , USB (universal serial bus)A. Shamel
 
Unit 1 Introduction to Embedded computing and ARM processor
Unit 1 Introduction to Embedded computing and ARM processorUnit 1 Introduction to Embedded computing and ARM processor
Unit 1 Introduction to Embedded computing and ARM processorVenkat Ramanan C
 
Typical Embedded System
Typical Embedded SystemTypical Embedded System
Typical Embedded Systemanand hd
 
I2C Bus (Inter-Integrated Circuit)
I2C Bus (Inter-Integrated Circuit)I2C Bus (Inter-Integrated Circuit)
I2C Bus (Inter-Integrated Circuit)Varun Mahajan
 
Design and implementation of uart on soc
Design and implementation of uart on socDesign and implementation of uart on soc
Design and implementation of uart on socIjrdt Journal
 
Multicore Computers
Multicore ComputersMulticore Computers
Multicore ComputersA B Shinde
 
Stm32 f103c8t6
Stm32 f103c8t6Stm32 f103c8t6
Stm32 f103c8t6whatry1995
 

Tendances (20)

ARM Processor architecture
ARM Processor  architectureARM Processor  architecture
ARM Processor architecture
 
Embedded system design using arduino
Embedded system design using arduinoEmbedded system design using arduino
Embedded system design using arduino
 
Understanding Flash Bootloader Software and Automotive ECU Reprogramming
Understanding Flash Bootloader Software and Automotive ECU ReprogrammingUnderstanding Flash Bootloader Software and Automotive ECU Reprogramming
Understanding Flash Bootloader Software and Automotive ECU Reprogramming
 
Pic microcontroller architecture
Pic microcontroller architecturePic microcontroller architecture
Pic microcontroller architecture
 
Uart
UartUart
Uart
 
Automative basics v3
Automative basics v3Automative basics v3
Automative basics v3
 
Serial connectors, Protocols , USB (universal serial bus)
Serial connectors, Protocols , USB (universal serial bus)Serial connectors, Protocols , USB (universal serial bus)
Serial connectors, Protocols , USB (universal serial bus)
 
Can bus
Can busCan bus
Can bus
 
PIC Programlama, Assembly ve Komutlar
PIC Programlama, Assembly ve KomutlarPIC Programlama, Assembly ve Komutlar
PIC Programlama, Assembly ve Komutlar
 
Unit 1 Introduction to Embedded computing and ARM processor
Unit 1 Introduction to Embedded computing and ARM processorUnit 1 Introduction to Embedded computing and ARM processor
Unit 1 Introduction to Embedded computing and ARM processor
 
USB 3.0
USB 3.0USB 3.0
USB 3.0
 
Uart
UartUart
Uart
 
Typical Embedded System
Typical Embedded SystemTypical Embedded System
Typical Embedded System
 
Introduction to stm32-part1
Introduction to stm32-part1Introduction to stm32-part1
Introduction to stm32-part1
 
Hardware-Software Codesign
Hardware-Software CodesignHardware-Software Codesign
Hardware-Software Codesign
 
I2C Bus (Inter-Integrated Circuit)
I2C Bus (Inter-Integrated Circuit)I2C Bus (Inter-Integrated Circuit)
I2C Bus (Inter-Integrated Circuit)
 
Design and implementation of uart on soc
Design and implementation of uart on socDesign and implementation of uart on soc
Design and implementation of uart on soc
 
Multicore Computers
Multicore ComputersMulticore Computers
Multicore Computers
 
Stm32 f103c8t6
Stm32 f103c8t6Stm32 f103c8t6
Stm32 f103c8t6
 
Rtos by shibu
Rtos by shibuRtos by shibu
Rtos by shibu
 

En vedette

Bilgisayar ve Elektronik Devreler Arası Haberleşme Teknikleri
Bilgisayar ve Elektronik Devreler Arası Haberleşme TeknikleriBilgisayar ve Elektronik Devreler Arası Haberleşme Teknikleri
Bilgisayar ve Elektronik Devreler Arası Haberleşme TeknikleriOnur Güzel
 
Arduino ve Kablosuz Haberleşme Modülleri
Arduino ve Kablosuz Haberleşme ModülleriArduino ve Kablosuz Haberleşme Modülleri
Arduino ve Kablosuz Haberleşme ModülleriResul Rıza Dolaner
 
Fizik İçin Python
Fizik İçin PythonFizik İçin Python
Fizik İçin PythonOnur Güzel
 
Online Data Manager
Online Data ManagerOnline Data Manager
Online Data ManagerBurak Özkan
 
Haberlesme Sistemleri
Haberlesme SistemleriHaberlesme Sistemleri
Haberlesme Sistemlerichekomastik
 
Arduino eğitimleri 1 - giriş
Arduino eğitimleri   1 - girişArduino eğitimleri   1 - giriş
Arduino eğitimleri 1 - girişCoşkun Taşdemir
 
Presentation on Refrigerators
Presentation on RefrigeratorsPresentation on Refrigerators
Presentation on RefrigeratorsParesh Gupta
 
10 Project Proposal Writing
10 Project Proposal Writing10 Project Proposal Writing
10 Project Proposal WritingTony
 

En vedette (9)

Bilgisayar ve Elektronik Devreler Arası Haberleşme Teknikleri
Bilgisayar ve Elektronik Devreler Arası Haberleşme TeknikleriBilgisayar ve Elektronik Devreler Arası Haberleşme Teknikleri
Bilgisayar ve Elektronik Devreler Arası Haberleşme Teknikleri
 
Arduino ve Kablosuz Haberleşme Modülleri
Arduino ve Kablosuz Haberleşme ModülleriArduino ve Kablosuz Haberleşme Modülleri
Arduino ve Kablosuz Haberleşme Modülleri
 
Fizik İçin Python
Fizik İçin PythonFizik İçin Python
Fizik İçin Python
 
Online Data Manager
Online Data ManagerOnline Data Manager
Online Data Manager
 
Haberlesme Sistemleri
Haberlesme SistemleriHaberlesme Sistemleri
Haberlesme Sistemleri
 
Arduino eğitimleri 1 - giriş
Arduino eğitimleri   1 - girişArduino eğitimleri   1 - giriş
Arduino eğitimleri 1 - giriş
 
Refrigerator
RefrigeratorRefrigerator
Refrigerator
 
Presentation on Refrigerators
Presentation on RefrigeratorsPresentation on Refrigerators
Presentation on Refrigerators
 
10 Project Proposal Writing
10 Project Proposal Writing10 Project Proposal Writing
10 Project Proposal Writing
 

Similaire à Uart ve seri̇ haberleşme

MSP430-Programlama.pdf
MSP430-Programlama.pdfMSP430-Programlama.pdf
MSP430-Programlama.pdfgurkannaras33
 
Python İle Ağ Programlama
Python İle Ağ ProgramlamaPython İle Ağ Programlama
Python İle Ağ ProgramlamaOguzhan Coskun
 
Java, android ve arduino ile gömülü programlama
Java, android ve arduino ile gömülü programlamaJava, android ve arduino ile gömülü programlama
Java, android ve arduino ile gömülü programlamaborasayiner
 
Linux sunucularda bandwitch monitoring araçları
Linux sunucularda bandwitch monitoring araçlarıLinux sunucularda bandwitch monitoring araçları
Linux sunucularda bandwitch monitoring araçlarıAhmet Han
 
C# 5 Yeni özellikler
C# 5 Yeni özelliklerC# 5 Yeni özellikler
C# 5 Yeni özelliklerErkan BALABAN
 
Ubuntu Isletim Sistemi-Surecler ve Yonetimi
Ubuntu Isletim Sistemi-Surecler ve YonetimiUbuntu Isletim Sistemi-Surecler ve Yonetimi
Ubuntu Isletim Sistemi-Surecler ve YonetimiMustafa GOCMEN
 
ferhat gör
ferhat görferhat gör
ferhat görferhat36
 
Oracle Veritabanı Güvenlik Testi Çalışmaları
Oracle Veritabanı Güvenlik Testi ÇalışmalarıOracle Veritabanı Güvenlik Testi Çalışmaları
Oracle Veritabanı Güvenlik Testi ÇalışmalarıBGA Cyber Security
 
Recovery Manager (RMAN)
Recovery Manager (RMAN)Recovery Manager (RMAN)
Recovery Manager (RMAN)Anar Godjaev
 
Scada Sistemleri ve Güvenliği
Scada Sistemleri ve GüvenliğiScada Sistemleri ve Güvenliği
Scada Sistemleri ve GüvenliğiAhmet Gürel
 
Web Uygulama Güvenliği Ve Güvenli Kod Geliştirme Eğitim Notlarım
Web Uygulama Güvenliği Ve Güvenli Kod Geliştirme Eğitim NotlarımWeb Uygulama Güvenliği Ve Güvenli Kod Geliştirme Eğitim Notlarım
Web Uygulama Güvenliği Ve Güvenli Kod Geliştirme Eğitim NotlarımNur Yesilyurt
 
ARM Mimarisinde Exploit Geliştirme
ARM Mimarisinde Exploit GeliştirmeARM Mimarisinde Exploit Geliştirme
ARM Mimarisinde Exploit GeliştirmeSignalSEC Ltd.
 

Similaire à Uart ve seri̇ haberleşme (20)

MSP430-Programlama.pdf
MSP430-Programlama.pdfMSP430-Programlama.pdf
MSP430-Programlama.pdf
 
Cisco packet tracer
Cisco packet tracer Cisco packet tracer
Cisco packet tracer
 
Python İle Ağ Programlama
Python İle Ağ ProgramlamaPython İle Ağ Programlama
Python İle Ağ Programlama
 
11 g RAC -ASM
11 g RAC -ASM11 g RAC -ASM
11 g RAC -ASM
 
Java, android ve arduino ile gömülü programlama
Java, android ve arduino ile gömülü programlamaJava, android ve arduino ile gömülü programlama
Java, android ve arduino ile gömülü programlama
 
Portlar
PortlarPortlar
Portlar
 
CEIT 253
CEIT 253CEIT 253
CEIT 253
 
CEIT 253
CEIT 253CEIT 253
CEIT 253
 
CEIT 253
CEIT 253CEIT 253
CEIT 253
 
Linux sunucularda bandwitch monitoring araçları
Linux sunucularda bandwitch monitoring araçlarıLinux sunucularda bandwitch monitoring araçları
Linux sunucularda bandwitch monitoring araçları
 
C# 5 Yeni özellikler
C# 5 Yeni özelliklerC# 5 Yeni özellikler
C# 5 Yeni özellikler
 
Ubuntu Isletim Sistemi-Surecler ve Yonetimi
Ubuntu Isletim Sistemi-Surecler ve YonetimiUbuntu Isletim Sistemi-Surecler ve Yonetimi
Ubuntu Isletim Sistemi-Surecler ve Yonetimi
 
ferhat gör
ferhat görferhat gör
ferhat gör
 
Oracle Veritabanı Güvenlik Testi Çalışmaları
Oracle Veritabanı Güvenlik Testi ÇalışmalarıOracle Veritabanı Güvenlik Testi Çalışmaları
Oracle Veritabanı Güvenlik Testi Çalışmaları
 
Recovery Manager (RMAN)
Recovery Manager (RMAN)Recovery Manager (RMAN)
Recovery Manager (RMAN)
 
Scada Sistemleri ve Güvenliği
Scada Sistemleri ve GüvenliğiScada Sistemleri ve Güvenliği
Scada Sistemleri ve Güvenliği
 
Donanım Sunusu - 4.1
Donanım Sunusu - 4.1Donanım Sunusu - 4.1
Donanım Sunusu - 4.1
 
Web Uygulama Güvenliği Ve Güvenli Kod Geliştirme Eğitim Notlarım
Web Uygulama Güvenliği Ve Güvenli Kod Geliştirme Eğitim NotlarımWeb Uygulama Güvenliği Ve Güvenli Kod Geliştirme Eğitim Notlarım
Web Uygulama Güvenliği Ve Güvenli Kod Geliştirme Eğitim Notlarım
 
Assembly for Hackers
Assembly for HackersAssembly for Hackers
Assembly for Hackers
 
ARM Mimarisinde Exploit Geliştirme
ARM Mimarisinde Exploit GeliştirmeARM Mimarisinde Exploit Geliştirme
ARM Mimarisinde Exploit Geliştirme
 

Uart ve seri̇ haberleşme

  • 1. UART VE SERİ HABERLEŞME BİLAL BURAK İZGİ CAN EZGİ AYDEMİR
  • 2. UART NEDİR?  UART= Universal Asenkron Reciever Transmitter  UART seri ve paralel veriyi birbirine çevirir. PC sistem bus’ındaki paralel veri UART tarafından belli bir yönde iletmek üzere seri veriye dönüştürülür. Öte yandan karşıt yönden gelen seri veri de, yine UART tarafından, CPU ‘nun sistem bus’ından okuması için, paralel veriye dönüştürülür.  Kullanım şekli: START BIT | DATA(7-8 bit) | PARITY BIT | STOP BIT (1 veya 2 bit)  Programlanabilir.
  • 3. UART Ne Sağlar?  Çift yönlü asenkron haberleşme  Yüksek doğrulukta baudrate üretebilme  8 veya 9 bit data uzunluğunda kullanabilme  Ayarlanabilir stop biti sayısı (1-2bit)  Senkron haberleşme için sinyal çıkışı  IrDA ve SmartCard arayüzü  Tek hat üzerinden, tek yönlü haberleşebilme  4 adet hata tespit bayrağı(overrun, noise, frame, parity)  6 adet kesme alabilme özelliği  2 adet kesme vektör adresi(RXI, TXI)  Azaltılmış güç tüketim modu  Çoklu işlemci haberleşme gibi özellikleri bulunmaktadır.
  • 4.
  • 5.
  • 6. UART Veri Gönderme  Datalar en düşük değerlikli bitten en yüksek değerlikli bite doğru gönderilir.  Gönderici taraf TX (transmitter) hattını data göndermezken Lojik1 seviyesinde tutar. Data gönderileceği anda hat Lojik 0 seviyesine çekilerek data gönderilmeye başlanır.  Start bitinden sonra, datalar bit bit gönderilip dataların sonunda ise Stop biti gönderilir.  Stop biti ise, son bitten sonra(MSB den sonra) hattı lojik 1 seviyesine çıkarma işlemidir.
  • 7. UART Veri Alma  Hattın lojik1’den lojik0 seviyesine çekildiğinde data gönderiminin başladığını anlar gelen bitleri ayarlanan baudrate süresince alır ve buffer’ına yazar.  Stop biti ile buffera gelen data yazılmış olur. Ve ilgili flag set edilir.  Buffer dolduğunda set edilen bayrağı sürekli kontrol ederek datanın gelmiş olduğunu anlarız.
  • 8. Boundrate Süresi Nedir?  Baudrate 1 bitin ne kadar sürede gönderileceğini ve alınacağını belirleyen bps(bit per second – 1 saniyede gönderilen bit sayısı) birimi ile ölçülür.  Baudrate parametresi 1200,2400,4800,9600,19200,115200  Alıcı taraf ile gönderici tarafın baudrate değeri aynı olmalıdır ki, gönderilen datalar alıcı tarafında doğru bir şekilde alınabilsin.
  • 10. #include <mqx.h> /*Bu kütüphane FreeScale işlemcilerde kodu işlemciye tanıtmak için ve işlemci bacaklarında uygun işlemleri yapabilmek için kullanılan kütüphanedir.C tabanlı bir kütüphane olup sadece FreeScale işlemcilerde kullanılmak üzere oluşturulmuştur.USB'den gelen stack(yığın) verilerinin uygun bir şekilde programda işlenebilmesinden kaynaklanmaktadır*/ #include <bsp.h> /*bsp kütüphanesi Board Support Package (BSP) kelimelerinin baş harflerinden oluşmaktadır. Türkçe karşılığı Kurulum Destek Paketidir. Buradaki kullanılmasının amacı FreeScale işlemcisinin kurulumu ve program tarafından desteklenmesinden dolayıdır.*/
  • 11. #if ! BSPCFG_ENABLE_IO_SUBSYSTEM #error This application requires BSPCFG_ENABLE_IO_SUBSYSTEM defined nonzero in user_config.h. Please recompile BSP with this option. /*Programa exeption tanımlanmıştır. user_config.h 'da BSPCFG_ENABLE_IO_SUBSYSTEM değeri eğer sıfır olarak tanımlanmadığında programı tekrardan BSP edip derlemek gerektiğini belirlemiştir. #endif ile de bahsi geçen exeption sonlandırılmış ve tanımlanması durdurulmuştur. */ #endif
  • 12.  #ifndef BSP_DEFAULT_IO_CHANNEL_DEFINED  /* Burada da aynı şekilde bir exception tanımlanmıştır.Ve burada BSP_DEFAULT_IO_CHANNEL_DEFINED değeri NULL olmalıdır. Eğer bu değerler sağlanmamış ise program exception fırlatacaktır.Ayrıca sorununun giderilmesi için de yapılması gereken şudur: user_config.h'ı ve programı tekrardan uygun BSP'ye göre derlemek ve BSPCFG_ENABLE_TTYx değerini uygun olan sıfır değerine getirmektir.Bu şekilde sorun giderilmiş olacaktır. Aynı şekilde #endif ile tanımlanan exception'un tanımlanması durdurulmuşrur.*/  #error This application requires BSP_DEFAULT_IO_CHANNEL to be not NULL. Please set corresponding BSPCFG_ENABLE_TTYx to non-zero in user_config.h and recompile BSP with this option.  #endif  /*NOT: Bu exeption'ların programın hemen başında tanımlanmasının sebebi şudur ki programın uygun olmayan değerlerle başlamasını engellemek ve mikrodenetleyeciyi hatadan kurtarmaktır. Böylece program başlamadan olası sorunlar göz önüne alınıp gereğinin yapılması noktasında kullanıcıyı uyarmaktır.*/
  • 13. #define UART_TASK 5// Burada define olarak UART_TASK değerine 5 atanmıştır. Buda UART'ımızın ID'si olacaktır. extern void uart_task(uint_32);/*uart_task fonksiyonu uartın seri port üzerinden veri alışverişi için tanımlanmıştır.Fonksiyon içerisine bir integer değer alacaktır.Kodda bu bu değer 32bit'lik bir olarak tanımlanmıştır.*/ TASK_TEMPLATE_STRUCT MQX_template_list[] = { {UART_TASK, uart_task, 1500, 9, "uart", MQX_AUTO_START_TASK, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0} }; * Yukarıda belirtilen TASK_TEMPLATE_STRUCK komutu görev şablonları listesidir. Görev şablonları listesinden bir görev tanımlanır. Görevler işlemci üzerinde tutulmaktadır Bu komut yardımıyla program başlama aşamasında MQX kütüphanesi yardımıyla görev şablonundan bir göre otomatik olarak başlatılacaktır. Bunun olması programı daha optimum bir hale getirecektir.MQX_AUTO_START_TASK komutu TASK_TEMPLATE_STRUCT komutuyla birlikte de kullanılabilir. Bunun sebebi ise belirttiğimiz gibi programın başlangıçta bir görevle başlamasıdır.*/
  • 14.  /* Aşağıdaki komutla birlikte görev şablonundan bir görev artık çalışmaya başlayacaktır*/  void uart_task(uint_32 initial_data)  {  /*Bu komutta taşma ve overflow meydana gelmemelidir. Ayrıca durdurulmak istenildiğinde 1 bitlik 1 verisi gönderilip interrupt gerçekleştirilebilir.  Ayrıca seri porttan veri alıveriş hızı bu komuta göre 9600 Baud(bit/sn) dir.Bu hızda seriport haberleşmesi sağlanmış olacaktır. */   int_32 c; //32 bitlik bir karakter tanımlanıyor  uint_32 flags = 0; //Taşmanın gerçekleşmemesi için ve programın hareketleri neticesinde bayraklardaki değişim görmek için bütün bayraklar 0 yapılıyor.  uint_32 baudrate = 9600; /*Seriport veri aktarım hızı 9600 baud olarak belirleniyor.Eğer bu değer farklılık gösterirse hyperterminal'den göndereceğimiz  veriyi düzgün olarak okuyamayız ve ekrana anlamsız karakterler gelecektir.*/  uint_32 stop_bits = IO_SERIAL_STOP_BITS_1; /*Komutu sonlandırma biti 1 bit olacak şekilde 1 tanımlanmıştır.Eğer seriporttan gelen veri 1 olursa program sonlamış olacaktır*/  uint_32 parity_bits = IO_SERIAL_PARITY_NONE; /* Eşlik biti tanımlanmıştır.*/
  • 15. FILE_PTR serial_fd = fopen(BSP_DEFAULT_IO_CHANNEL, 0); /*PILE_PTR komutu stack overflow durumlarında kullanılır.Bilgisayar üzerindeki bir dosyanın içerisindeki verileri yığın haline getirmede kullanılır.Özetle buradaki kullanımına bakarsak fopen komutuyla Board Support Package'in veri kanalındaki 0 portunu açarak seri porttan gelecek olan veriyi stack haline getirecektir.Ve bu değer serial_fd de tutulmaktadır.*/ if (IO_OK != ioctl(serial_fd, IO_IOCTL_SERIAL_SET_FLAGS, &flags)) { printf("Setting the is failed"); _mqx_exit(-1); } /*Yukarıdaki if yapısında bir kontol söz konusudur.Yukarıda seri porttan stack haline getirilmiş olan serial_fd verisinin işlemci üzerindeki flaglara bakarak eğer flaglarda beklenmedik bir değişme meydana gelirse programı -1 değeriyle sonlandırıp FAILTURE değeri dönderecektir.*/
  • 16. if (IO_OK != ioctl(serial_fd, IO_IOCTL_SERIAL_SET_BAUD, &baudrate)) { printf("Setting the baudrate is failed"); _mqx_exit(-1); } /*Yukarıdaki koda bakarsak programın başında belirlenen baud değeriyle(9600) uyuşmuyorsa program FAILTURE değer dönderecektir.Yukarıda da belirttiğimiz gibi eğer belirlenen baud değerlerinde bir tutarsızlık yada eşleşmeme meydana gelirse ekrana farklı anlamsız karakterler dönderecektir.*/ if (IO_OK != ioctl(serial_fd,IO_IOCTL_SERIAL_SET_PARITY , &parity_bits)) { printf("Setting the parity bits is failed"); _mqx_exit(-1); } /* Yukarıdaki kodda programın başında belirtildiği gibi eşleşme bitinde bir tutarsızlık meydana gelirse program FAILTURE dönderecektir.-1 parametresi ile sonlandırılacaktır.*/
  • 17. if (IO_OK != ioctl(serial_fd, IO_IOCTL_SERIAL_SET_STOP_BITS, &stop_bits)) { printf("Setting the stop bits is failed"); _mqx_exit(-1); } /*Yine programın başında belirtildiği gibi yıgın haline getirilmiş olan serial_fd değişkeninde eğer programı sonlandırma bit 1 bit olacak şekilde 1 değerinden farklı ise o zaman program hataya düşecek ve FAILTURE değer dönderecektir.*/
  • 18. printf("n Embedded Systems Laboratory rn"); printf("n EE @ USF rn"); printf("n LAB #6 - UART DEVICE DRIVER rnn"); printf("n ------ Type your characters below: ----rnn"); /*Yukarıda printf içeriside yazılı olan veriler program arayüzünde program bu aşamaya kadar başarılı bir şekilde çalıştırıldığında kullanıcının karşısına çıkacak olan verilerdir.Bu veriler statiktir. Printf içindeki veriler değiştirilirse program çalıştırıldığında kullanıcı karşısına çıkacak olan yazılar da değişecektir.*/
  • 19. while (TRUE) { if (fstatus( serial_fd )) /*fstatus komutu _io_fstatus komutunun ileri düzeyde dil formunda C++ dilindeki kullanımıdır.Bu yığın haline getirilen serial_fd değerimizin o anki statusunu ekrana getirmektedir.Buna göre seri porttan artık veri alış verişi başlamıştır. Buradaki if yapısı ile de bu durum sağlanmaktadır.*/ { c = fgetc( serial_fd ); // Yukarıda 32 bir şeklinde olacak olan c karakterimize fgetc komutu ile girilen karakterin ascii değeri alınmaktadır.Böyle seri portta veri alış verişindeki karakter transferi başlamıştır. if (c==IO_ERROR) break; /*Eğer c karakter değişkenimizdeki değer input girişine göre tanımlanmayan tutarsız bir karakter ise sonsuz şekilde tanımlanan while döndüsünden çıkılacak ve program sonlanacaktır. Fakat tutarlı karakterlerdeki veriler gelmeye devam ettikçe döndü dönecek ve karakter alınımına ve seri port haberleşmesine devam edilecektir.Yada sonlandırma biti gelinceye kadar devam edecektir.*/ fputc((char)c,serial_fd); // Burada c karakter değişkenimizde tutan veri artık karşı tarafa gönderilmiştir.Yukarıda da belirtildiği gibi bu durum tutarsız karakter gönderilene kadar devam edecektir. } } fclose(serial_fd); /* Sonlandırma biti geldiği zaman yada tutarsız karakter geldiği zaman serial_fd yığınımızın bağlı olduğu pointer yapısıyla kurulmuş olan port haberleşmesi kapatılacaktır ve program sonlanacaktır.*/ }