CPUの創りかた

CPU部の回路図を入力する

[Assignments]、[Device...]の順に選択して[Device]ウィンドウを開く。その中の[Device and Pin Options...]をクリックして[Device and Pin Options - プロジェクト名]ウィンドウを開く。その中の[Unused Pins]を選択し、[Reserve all unused pins:]を[As in…

外部回路まとめ

これまでに作ったプログラムをひとつにまとめる。リセット信号はATmega328Pと共用することにした。 #include "TD4_external.h" /* ニモニック(のようなもの)一覧: MOV_A(Im) : AレジスタにImを転送 MOV_B(Im) : BレジスタにImを転送 MOV_AB : AレジスタにBレ…

ROMを作る、の修正

ROMを作る -の修正 前はクロックの立ち上がりで割り込みをかけてデータを更新していたが、今度はアドレスの変化で割り込んでデータを更新することにする。 これでTD4の外部回路は全部出来たことになる。 #define F_CPU 8000000UL #include <avr/io.h> #include <avr/interrupt.h> #defin</avr/interrupt.h></avr/io.h>…

リセット信号を作る

リセット信号もATmega328Pで生成することにする。 #define F_CPU 8000000UL #include <avr/io.h> #include <util/delay.h> int main(){ DDRD |= (1 << PD3); // PD3から!リセット信号を出力することにする。 PORTD &= ~(1 << PD3); // 最初に!リセット信号をLにしておいて、 _delay_m</util/delay.h></avr/io.h>…

マニュアルクロックを作る

マニュアルクロックもATmega328Pで生成することにする。 #define F_CPU 8000000UL #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> volatile uint8_t switch_changed = 0; ISR(INT0_vect){ switch_changed = 1; } int main(){ DDRD |= (1 << PD5); // PD5からマニュアルクロ</util/delay.h></avr/interrupt.h></avr/io.h>…

1 Hz、10 Hzのクロックを作る

クロックはATmega328Pで生成することにする。 /* PD7から10Hzを、PD6から1Hzを出力する。 */ #include <avr/io.h> #include <avr/interrupt.h> #define F_CPU 8000000UL #define PRESCALE_FOR_1HZ 10 volatile int8_t counter = PRESCALE_FOR_1HZ; ISR(TIMER1_COMPA_vect){ // 20Hzの頻</avr/interrupt.h></avr/io.h>…

ROMを作る

pp.121ff.、pp.240ff. とてもテキストのような真似はできないのでマイコンで代用することにする。ついでにアセンブルもする。CPUと組み合わせたときにこれでうまくゆくかどうかはわからない。 #include <avr/io.h> #include <avr/interrupt.h> #define F_CPU 8000000UL #define MOV_A(Im</avr/interrupt.h></avr/io.h>…

クロックジェネレーター

pp.102-108 まずはテキストどおりに1 Hz、10 Hzの発振回路を試す。ただし電源電圧は3.3 Vにした。