Saya memiliki pekerjaan penuh waktu sebagai insinyur firmware. Saya baru-baru ini diberi tugas untuk meninjau konfigurasi GPIO dan mengubah pengaturan sesuai kebutuhan. Saya menemukan beberapa pin yang salah dikonfigurasi sehingga secara alami saya mengkonfigurasi ulang mereka, namun saya diberitahu saya melakukannya dengan urutan yang salah. Inilah yang saya bicarakan:
Sebelum:
GPIO1.direction = INPUT;Setelah:
GPIO1.direction = OUTPUT;
GPIO1.value = 0;
Namun selama ulasan kode saya telah diberitahu bahwa saya perlu mengubah urutan inisialisasi menjadi sebagai berikut:
GPIO1.value = 0;
GPIO1.direction = OUTPUT;
Dengan kata lain atur nilainya terlebih dahulu lalu tetapkan arah pin. Saya juga telah diberitahu bahwa ini adalah bagaimana harus pada prosesor modern karena mereka menggunakan dua register, satu untuk input dan satu untuk output, namun prosesor lama hanya menggunakan satu register, sehingga urutan operasi tidak masalah.
(Catatan: Modern = ARM Cortex M3 dan di atasnya, Old = Intel 8051)
Saya meminta penjelasan yang lebih baik di tempat kerja, tetapi saya tidak bisa mendapatkan jawaban yang baik. Itu sebabnya saya memutuskan untuk bertanya di sini.
Jadi inilah pertanyaanku:
- Mengapa urutan inisialisasi penting pada prosesor baru?
- Mengapa urutan inisialisasi tidak masalah pada prosesor lama?
- Dua register apa yang mereka bicarakan dalam prosesor modern?
- Apa register tunggal yang mereka bicarakan pada prosesor lama?
Jika seseorang bisa memberikan semacam diagram, itu akan lebih baik.
Jawaban:
8051 asli menggunakan apa yang disebut port output pseudo-bidirectional (drain terbuka dengan pullup), jadi sebenarnya tidak ada pengaturan arah port.
Tentu saja untuk port keluaran dua arah benar modern, lebih baik memiliki nilai yang ditetapkan sebelum mengaktifkan pin port untuk output, karena jika tidak, Anda dapat memiliki transien pada output yang dapat melakukan sesuatu yang tidak diinginkan.
Lihat jawaban saya di sini , misalnya.
Sunting: Berikut adalah struktur pin I / O untuk mikrokontroler CMOS modern (relatif) :
TRIS (TRIState) disebut DDR (Data Direction Register) di banyak micros lainnya. Dalam hal ini, jika output kait TRIS tinggi maka kedua transistor 'mati', tetapi port masih dapat dibaca.
Berikut adalah struktur pin I / O yang sedikit lebih rumit untuk Microchip micro yang lebih baru .
Sekali lagi, kait TRIS menonaktifkan output. Yang ini termasuk kait LAT yang membantu menghindari masalah baca-modifikasi-tulis . Pada seri PIC Anda harus menulis ke register LAT saja (dan membaca dari register PORT).
Berikut adalah sirkuit internal I / O pin port 8051 dan CMOS 8051 klasik yang asli (dari sumber ini ):
Ada sedikit kerumitan ekstra dalam hal ada transistor percepatan paralel dengan pull-up yang secara singkat dihidupkan untuk mengatasi kapasitansi eksternal. Seperti yang Anda lihat, tidak ada kontrol TRIS / DDR sama sekali. MOSFET pull-up yang digunakan dalam operasi normal adalah 'lemah' - mereka cukup kecil (Id rendah) sehingga output eksternal yang terhubung ke pin dapat menarik garis port pseudo-bidirectional rendah.
sumber
Jika Anda menetapkan arah terlebih dahulu, pin akan secara singkat dikonfigurasikan ke output apa pun nilai outputnya saat ini. Jika Anda menetapkan nilai terlebih dahulu, ini tidak akan terjadi.
Jadi, melakukannya dengan cara yang Anda anjurkan untuk menghindari gangguan pada output, yang bisa berkisar dari tidak berbahaya hingga bencana, tergantung pada apa yang terhubung dengan pin.
sumber
Dengan asumsi arah default adalah input (yaitu High-Z, yang masuk akal karena kami tidak ingin MCU memaksakan nilai pada jalur yang terhubung), urutan pengaturan port ini lebih disukai tetapi tidak perlu. Sebenarnya diperlukan ketika aplikasi Anda mengharuskan pada saat startup nilai port tidak akan, katakanlah
1
. Kemudian Anda akan mengatur nilainya ke0
dan kemudian mengubah arah. Dalam hal ini Anda menghindari kemungkinan "kesalahan" sesaat antara pengaturan arah dan nilai, yang mungkin menghasilkan lonjakan pada pin itu. Dan memang benar untuk semua prosesor yang memiliki logika seperti itu, tidak hanya yang baru.sumber