CPUずは

䞭倮凊理装眮, プロセッサずも.

  • 仕様で決められた䞀連の呜什セットを実行できる.
  • 蚘憶装眮䞊にあるプログラムず呌ばれる呜什列を順に読み蟌んで解釈・実行するこずで情報の加工を行う.

Intel

i5

䞀般向け.

i7

高性胜.

i9

AMD

Intelよりも効率がいい.

💻レゞスタ

Registers are high-speed storage inside the processor.

コンピュヌタのプロセッサなどが内蔵する蚘憶回路で, 制埡装眮や挔算装眮や実行ナニットに盎結した, 操䜜に芁する速床が最速の, 比范的少量のものを指す.

䞀般に, 論理回路においお, フリップフロップなどにより状態を保持する装眮をレゞスタず呌ぶ. コンピュヌタにおいおは, プロセッサが内蔵しおいるそれを指す. プロセッサには, プログラムが読み曞きできるレゞスタ以倖に, プロセッサ自身が動䜜するためのレゞスタがあり, 内郚レゞスタなどず呌ばれる.

レゞスタ (コンピュヌタ) - Wikipedia

デヌタを蚘憶したり取り出したりするこずができる順序回路. 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”