AVR kayıtlarının ve bağlantı noktalarının sıfıra başlatılması gerekiyor mu?


9

Kodumu başlatma rutini sırasında aşağıdaki gibi şeyler yapmak için kullanın:

clr    r0  ; will always stay zero

ve:

out    PORTA, r0; initialize ports
out    DDRA, r0
out    PORTB, r0
...

Bu gerçekten gerekli mi? Yoksa sıfırlandıktan sonra otomatik olarak yapıldığından emin olabilir miyim? Özellikle, varsayılan olarak giriş olarak ayarlanacak tüm bağlantı noktalarına güvenebilir miyim, böylece kod yürütülmediğinde harici seslerle ilgili bir sorun yok mu?

Yanıtlar:


6

AVR'nin G / Ç bağlantı noktaları sıfırlandıktan sonra INPUT / Tri-State / Hi-Z (DDRx = 0x00) olarak ayarlanır. Çoğu mikrodenetleyici (hepsi değilse de?) Bu davranışa sahiptir. Bir pimin girmesi için en güvenli durumdur. Evet, otomatik olarak giriş olarak ayarlanacak bağlantı noktalarına güvenebilirsiniz.

Bazı alıntılar ve ATmega16 şunu gösteriyor:

resim açıklamasını buraya girin

Port C pinleri, saat çalışmıyor olsa bile bir sıfırlama koşulu aktif hale geldiğinde üç olarak belirtilir.


1
Bu tam da aradığım şey :)
Stefan Paul Noack

hatırladığım kadarıyla, bir girişi kayarsanız, rastgele bir gürültü elde edersiniz, bu yüzden başlangıç ​​durumu sıfır olabilir, bu tamam, ancak ilk saat döngüsünden sonra sıfır olmayabilir.
miceuz

@miceuz Buradaki nokta, çıktıların bilinmeyen bir durumda olmamasıdır . Mikrodenetleyiciye bağlı harici devre üzerinde istenmeyen bir etkisi olabilir
m.Alin

1
miceuz port giriş kayıtlarına atıfta bulunuyorsunuz, değil mi? bunlar başlangıç ​​durumları olarak N / A'ya sahiptir (bu, pime uygulanan her şeyi yansıttıkları için mantıklıdır). Ama veri yönü kayıtlarından bahsediyordum. Sadece portun yanlışlıkla çıkış olarak ayarlanmadığından emin olmak istedim, muhtemelen pime uygulanan voltajlarla çelişiyordum.
Stefan Paul Noack

oh evet, gerçekten, gürültü için üzgünüm ..
miceuz

4
  • Bağlantı noktası başlatma, veri sayfasının söylediklerinden bağımsız olarak DAİMA iyi bir fikirdir.

  • Veri sayfası hiçbir şey söylemiyorsa, bu tamamen hayati bir fikirdir.


Bağlantı noktası veri içeriğini yalnızca programınız çalıştığında ne olacağını önemsiyorsanız tanımlamanız gerekir.

Sonucu umursamıyorsanız, port veri bitlerini ayarlamanız gerekmez :-).

Üreticiler veri sayfalarında bağlantı noktası veri bitlerinin ayarlandığını veya temizlendiğini söylüyorsa, yine de olabilirler, ancak yine de kendiniz başlatmak için STILL gerçekten çok iyi bir fikirdir. "Sınır koşulları" çoğu şeyin yanlış gittiği yerlerdir - ör. Bir döngü başlangıcı, bir döngü sonu, dairesel tampon sarma yuvarlak noktası, .... İşlemci başlatma donanım eşdeğeridir. Gürültü, aksaklık ve insanlarla dolu gerçek bir dünyada, programlarınızın mümkün olduğunca kaderini yönetmek gerçekten iyi bir fikirdir. Bağlantı noktası başlatma bunun kolay bir parçasıdır.


Tamamen kabul etti. Bir donanım sıfırlaması yerine, program başlangıcında bir sıçrama olabileceğini veya - dolaylı atlamalar yanlış gittiğinde son zamanlarda ne olduğunu - program sayacının taştığını ve tekrar 0x0000'e ulaştığını düşündüm. Bundan sonra limanların hangi eyalette olacağını kim bilebilir ...
Stefan Paul Noack

1

Sıfırlama üzerine ne kayıtlar ne de SRAM başlatılır, yalnızca bazı çevresel kayıtlar. Kullandığınız şeyleri başlatmalısınız.


Bunun hangi çevre kayıtları için kaybolmuş olduğunu biliyor veya bağlantınız var mı? UCSRCVeri sayfasında olduğu gibi bazıları için 'başlangıç ​​değerleri' buldum . G / Ç bağlantı noktaları, özellikle veri yönü ne olacak?
Stefan Paul Noack

2
G / Ç bağlantı noktaları girişe ayarlanmıştır. Hepsi veri sayfasında.
Leon Heller

@LeonHeller oh teşekkürler, şimdi görüyorum. Tam orada kayıt açıklamalarında. Bunu bir şekilde özledim ...
Stefan Paul Noack

@ noah1989, Leon doğrudur, çevresel kayıtlar için başlangıç ​​değerleri her zaman kayıt defterinin görselleştirmesinin altında belirtilir (veya her bir bitin adlarına sahip görüntü ne olursa olsun :)).
avakar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.