Fase Kebisingan dan Jitter dalam Analisis Sistem Elektronik Digital Digital Electronics Perangkat Keras Xor Untuk Pin Output pada Mikrokontroler AVR

Perangkat Keras Xor Untuk Pin Output pada Mikrokontroler AVR

Tahukah Anda bahwa banyak chip AVR memiliki jenis perangkat keras eksklusif atau (XOR) ketika menyangkut kadar logika pin output? Jika Anda melihat dalam lembar data (gambar di atas adalah tangkapan layar dari datasheet ATTiny13) Anda akan menemukan bagian pada beralih pin. Ternyata jika Anda menetapkan port sebagai output, menulis logika satu ke register PIN yang sesuai akan mengaktifkan level logika dari itu. Ini benar-benar mudah diabaikan jika Anda menulis dalam C, tetapi saya telah bekerja untuk belajar sedikit bahasa assembler dan menemukan ini sangat berguna. Terus baca setelah istirahat dan saya akan memberi tahu Anda bagaimana saya terjadi pada info ini dan apa yang baik.

Jadi pertama-tama, mari kita bicara tentang mengapa ini tidak terlalu penting jika Anda menulis dalam kode C. Biasanya jika Anda ingin mengaktifkan beberapa pin output, Anda hanya akan menulis satu liner yang XOR dengan bitmask:

1
Portb ^ = 0xff;

Ini sedikit C singkatan (pelajari lebih banyak tentang itu dari seri tutorial saya) yang melakukan XOR pada level output saat ini dan menulis hasilnya kembali ke port. Tetapi hal yang sama dapat dilakukan dalam perangkat keras dengan menulis bitmask ke register PINB:

1
Pinb = 0xff;

Anda tidak terlalu peduli, karena itu hanya satu baris kode. Sebenarnya itu mungkin lebih sederhana untuk xor portb karena itu lebih masuk akal secara konseptual. Tetapi kompiler mungkin berakhir menggunakan lebih banyak siklus daripada jika Anda menulis ke register PIN.

Saya kebetulan di fitur ini karena saya berkedip beberapa LED sebagai cara belajar assembler. Saya punya tumpukan kode ini dalam layanan interupsi rutin:

1
2.
3.
4.
ldi myreg, 0xff
dalam integ, portb
EOR integ, myreg
keluar portb, integ

Ini memuat bitmask menjadi satu register, memuat dalam logika saat ini dari portb ke register lain, melakukan XOR dari keduanya, dan menulis hasilnya kembali ke Portb. Ini membutuhkan empat siklus dan membutuhkan dua register. Memalukan bit adalah operasi yang belum sempurna yang saya kagumkan tidak ada perintah untuk XOR bits secara langsung jadi saya mulai mencari-cari. Saya menemukan artikel singkat ini di AVR Freaks yang memungut saya ke fitur sakelar Bit. Sekarang saya dapat mengurangi kode assembler saya sebagai berikut:

1
2.
LDI Intreg2, 0xff; Menggunakan Intreg2 sebagai Masker Bit
keluar pinb, intreg2; menulis ke pinb effectivley melakukan eksklusif atau pada portb

Ini menghasilkan efek toggling yang sama, tetapi hanya mengambil dua siklus dan membutuhkan penggunaan hanya satu register.

Apa yang saya temukan banyak yang menarik adalah bahwa tidak peduli berapa banyak saya menggunakan chip AVR, tidak pernah kekurangan kejutan yang menunggu untuk ditemukan di lembar data.

Leave a Reply

Your email address will not be published. Required fields are marked *