CPUとは
中央処理装置, プロセッサとも.
- 仕様で決められた一連の命令セットを実行できる.
- 記憶装置上にあるプログラムと呼ばれる命令列を順に読み込んで解釈・実行することで情報の加工を行う.
- 📝レジスタ: CPUの内部記憶領域.
- CPU - Wikipedia
Intel
i5
一般向け.
i7
高性能.
i9
AMD
Intelよりも効率がいい.
💻レジスタ
Registers are high-speed storage inside the processor.
コンピュータのプロセッサなどが内蔵する記憶回路で, 制御装置や演算装置や実行ユニットに直結した, 操作に要する速度が最速の, 比較的少量のものを指す.
一般に, 論理回路において, フリップフロップなどにより状態を保持する装置をレジスタと呼ぶ. コンピュータにおいては, プロセッサが内蔵しているそれを指す. プロセッサには, プログラムが読み書きできるレジスタ以外に, プロセッサ自身が動作するためのレジスタがあり, 内部レジスタなどと呼ばれる.
データを記憶したり取り出したりすることができる順序回路. out (t) = out (t-1) を実現する.
Register のプログラムでの扱い
Pin を操作するためのレジスタには, アドレス空間の決められたアドレスが割り振られている. (仕様)
プログラムでは, あらかじめ Define を利用してレジスタのアドレスを宣言するのが王道. volatile をつけることで, コンパイラが最適化してアドレスを変更するのを防ぐ.
#define PA5 (*((volatile unsigned long *) 0x40004080))これは以下と同値.
data = (*((volatile unsigned long *) 0x40004080));
data = 0x40004080;
data = (*0x40004080);そうすると, 以下のようにして Register の値を Read/Write できる.
# Register Write
PA5 = 0x20;
# Register Read
data = PA5;初期設定はこんな感じ.
void PortF_Init (void){ volatile unsigned long delay;
SYSCTL_RCGC2_R |= 0x00000020; // 1) F clock
delay = SYSCTL_RCGC2_R; // delay
GPIO_PORTF_LOCK_R = 0x4C4F434B; // 2) unlock PortF PF0
GPIO_PORTF_CR_R |= 0x1F; // allow changes to PF4-0
GPIO_PORTF_AMSEL_R &= 0x00; // 3) disable analog function
GPIO_PORTF_PCTL_R &= 0x00000000; // 4) GPIO clear bit PCTL
GPIO_PORTF_DIR_R &= ~0x11; // 5.1) PF4,PF0 input,
GPIO_PORTF_DIR_R |= 0x08; // 5.2) PF3 output
GPIO_PORTF_AFSEL_R &= 0x00; // 6) no alternate function
GPIO_PORTF_PUR_R |= 0x11; // enable pullup resistors on PF4,PF0
GPIO_PORTF_DEN_R |= 0x1F; // 7) enable digital pins PF4-PF0
}L チカ Example 抜粋
// symbolic names instead of addresses
#define GPIO_PORTF_DATA_R (*((volatile unsigned long *) 0x400253FC))
#define GPIO_PORTF_DIR_R (*((volatile unsigned long *) 0x40025400))
#define GPIO_PORTF_AFSEL_R (*((volatile unsigned long *) 0x40025420))
#define GPIO_PORTF_PUR_R (*((volatile unsigned long *) 0x40025510))
#define GPIO_PORTF_DEN_R (*((volatile unsigned long *) 0x4002551C))
#define GPIO_PORTF_LOCK_R (*((volatile unsigned long *) 0x40025520))
#define GPIO_PORTF_CR_R (*((volatile unsigned long *) 0x40025524))
#define GPIO_PORTF_AMSEL_R (*((volatile unsigned long *) 0x40025528))
#define GPIO_PORTF_PCTL_R (*((volatile unsigned long *) 0x4002552C))
#define SYSCTL_RCGC2_R (*((volatile unsigned long *) 0x400FE108))
// 2. Declarations Section
// Global Variablesp
unsigned long SW1; // input from PF4
unsigned long SW2; // input from PF0
// Subroutine to initialize port F pins for input and output
// PF4 is input SW1 and PF2 is output Blue LED
void PortF_Init (void){ volatile unsigned long delay;
SYSCTL_RCGC2_R |= 0x00000020; // 1) F clock
delay = SYSCTL_RCGC2_R; // delay
GPIO_PORTF_LOCK_R = 0x4C4F434B; // 2) unlock PortF PF0
GPIO_PORTF_CR_R |= 0x1F; // allow changes to PF4-0
GPIO_PORTF_AMSEL_R &= 0x00; // 3) disable analog function
GPIO_PORTF_PCTL_R &= 0x00000000; // 4) GPIO clear bit PCTL
GPIO_PORTF_DIR_R &= ~0x11; // 5.1) PF4,PF0 input,
GPIO_PORTF_DIR_R |= 0x08; // 5.2) PF3 output
GPIO_PORTF_AFSEL_R &= 0x00; // 6) no alternate function
GPIO_PORTF_PUR_R |= 0x11; // enable pullup resistors on PF4,PF0
GPIO_PORTF_DEN_R |= 0x1F; // 7) enable digital pins PF4-PF0
}
void FlashSOS (void){
//S
GPIO_PORTF_DATA_R |= 0x08; delay (1);
GPIO_PORTF_DATA_R &= ~0x08; delay (1);
GPIO_PORTF_DATA_R |= 0x08; delay (1);
GPIO_PORTF_DATA_R &= ~0x08; delay (1);
GPIO_PORTF_DATA_R |= 0x08; delay (1);
GPIO_PORTF_DATA_R &= ~0x08; delay (1);
//O
GPIO_PORTF_DATA_R |= 0x08; delay (4);
GPIO_PORTF_DATA_R &= ~0x08;delay (4);
GPIO_PORTF_DATA_R |= 0x08; delay (4);
GPIO_PORTF_DATA_R &= ~0x08;delay (4);
GPIO_PORTF_DATA_R |= 0x08; delay (4);
GPIO_PORTF_DATA_R &= ~0x08;delay (4);
//S
GPIO_PORTF_DATA_R |= 0x08; delay (1);
GPIO_PORTF_DATA_R &= ~0x08;delay (1);
GPIO_PORTF_DATA_R |= 0x08; delay (1);
GPIO_PORTF_DATA_R &= ~0x08;delay (1);
GPIO_PORTF_DATA_R |= 0x08; delay (1);
GPIO_PORTF_DATA_R &= ~0x08;delay (1);
delay (10); // Delay for 5 secs in between flashes
}Topics
自分のCPUの世代を調べる
lscpu | grep “Intel”