"Enter"a basıp içeriğe geçin

LPC21xx Uart veri gönderme

lpc21xx_uart

İş yerinde Erdoğan’ın yapmış olduğu uygulamanın bir çok kişinin arayıp yapamadığı fikri beni bu yazıyı yazmaya yöneltti. LPC21xx serisi ARM işlemcilerde UART biriminden veriyi nasıl yollarız? nasıl veri alırız? bununla ilgili olarak ilk başta veri göndermekle ilgili olanı sizinle paylaşacağım. LPC serisinin İsiste simülasyonu olması bu işlemci üzerinde daha çabuk sonuçlar elde etmemizi sağlıyor. Çünkü baskılı devresini çizmek basmak çalıştırmak ve sorunları çözmek cidden zaman kaybına neden oluyor.

Uart birimini çalıştırmak için öncelikle bilmemiz gereken bir kaç kaydedici(register) var.

PINSEL

Öncelikle Uart pinlerini giriş çıkış olarak değil de uart olarak kullanacağımızı ayarlıyoruz. Uart pinlerini açmak için ilk dört pin durumu 0101 yani decimal olarak 5 olmalı.

[php]
PINSEL0=5;    // Tx ve Rx pinleri aktif edilir
[/php]

lpc21xx_uart_pinsel

U0FCR & U0LCR

Nu kaydediciler parite bitini stop bitini kaç bit haberleşme yapılacağını ve UART yolunun temizlenmesini sağlar.

[php]
U0FCR=0x7; // FIFO’lar aktif edilir ve resetlenir
U0LCR=0x83; // İletişim ayarları yapılıyor 8 bit
[/php]

lpc21xx_uart_u0fcr_u0lcr_u0lsr

U0DLL & U0DLM

Uart haberleşmenin hızını belirlemek için kullanılan kaydedicilerdir. Uart hızı için bir formülleri bulunmaktadır. PCLK için ise MSEL ve PSEL ayarlarınında düzgün yapılması gerekmektedir. 19200 hızı için değerleri aşağıdaki gibidir.

lpc21xx_uart_baudrate

[php]
U0DLL=10; // Baud rate set to 19200
U0DLM=0x0;
[/php]

U0LSR

U0LSR kaydedicisinin 6. biti Veri gönderme işleminin bitip bitmediğini göstermektedir. Eğer 6. bit 1 ise veri gönderilmiştir ve TX yolu boştur.

lpc21xx_uart_u0lsr_register

Kodumuza gelirsek yine Piclerle ilgili seri iletişim yazımda olduğu gibi bir pin’i giriş yapıp pinden 1 geldiğinde daha önceden belirlediğimiz bir yazıyı seri porttan göndereceğiz.

[php]
#include "LPC21xx.h"
#include "string.h"

#define TEMT (1<<6)
#define Buton (IOPIN0&0x4)
char Metin2[]="emrahbudak.com\n\r";

void Uart_Init(void)
{
PINSEL0=5; // Tx ve Rx pinleri aktif edilir
U0FCR=0x7; // FIFO’lar aktif edilir ve resetlenir
U0LCR=0x83; // İletişim ayarları yapılıyor 8 bit
U0DLL=10; // Baud rate set to 19200
U0DLM= 0;
U0LCR=0x3; // Clear DLAB
}

void Uart_Gonder(char *Metin)
{
int i=0;
while(Metin[i]!=NULL)
{
U0THR=Metin[i];
i++;
while(!(U0LSR & TEMT)){}
}
}

int main()
{
IODIR0 = 0x00000001; //// 1. biti cikis digerleri giris
Uart_Init();
while(1)
{
if(Buton)
{
while(Buton);
Uart_Gonder(Metin2);
}
}
}[/php]

Kaynak Kodlarını İndir

4 Yorum

  1. erdoğan erdoğan Şubat 3, 2013

    isim verme 🙂

    • emrahbudak emrahbudak Şubat 3, 2013

      Bizde böyle gardaş 😀 Her şeyi olduğu gibi anlatırım ben 🙂

  2. Erdinç Erdinç Şubat 28, 2013

    Çok merakettim hiç bu kodu denedin mi acaba?
    void Uart_Gonder(char *Metin)
    {
    int i=0;
    while(Metin[i]!=NULL)
    {
    U0THR=Metin[i];
    i++;
    }
    while(!(U0LSR & TEMT)){}
    }

    sanırım bu işi ezbere yapıyorsun.
    olması gereken budur
    tabi daha başka yalnışları yoksa.

    void Uart_Gonder(char *Metin)
    {
    int i=0;
    while(Metin[i]!=NULL)
    {
    U0THR=Metin[i];
    i++;
    while(!(U0LSR & TEMT)){}
    }
    }
    🙂

  3. emrahbudak emrahbudak Mart 1, 2013

    Bu arada Erdinç arkadaşımızın anlattığı şekilde yapmak gerekli. Çünkü gönderilen her veri için bufferin boşalmasını beklemek gerekiyor. saygısızca hatamızı yüzümüze vurduğu için Erdinç arkadaşımıza teşekkür ederiz.
    Ayrıca yazının altında bulunan rar dosyasını indirdiğinizde bir önceki haliyle dahi çalışan kodu bulabilirsiniz. Kodu indirdikten sonra gerekli değişikliği yapmanız gerekiyor.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir