임베디드/임베디드 레시피

2장 정리

twoweeks-within 2025. 1. 24. 10:57

1. word : CPU 가 한번에 처리할 수 있는 크기

 

2. Thumb mode : 과거에 쓰던거라서..
   > uint16_t 짜리 data 를 uint32_t 버퍼에 넣는거랑 비슷함 

     // 2번 가져오지뭐,,

 

3. ARM mode

 

 

   normal : USR , 나머지 : privileged 

      >> USR -> privileged X

 

4. 모드별 Register

Context !

 

CPSR

N : Negative : 마이너스
2) Z : Zero : 0 일때 
3) C : Carry : 자리올림.
4) V : over flow

 

하위 7 bit : IRQ

        6 bit : FIQ 

      > 0 :: enable

        5 bit : Thumb

       0~4 bit : 현재 mode

 

SPSR  :  saved CPSR

R14   : LR :: Linked Register

R13  : SP

R15  : PC :: Fetch 해온 위치 ( excute +8 , Fetch +4 , decode + 0)

 

 

4.1) USER

 

user mode :: CPSR control X.. IRQ, FIQ 발생 안하게 할 수 있음

 

5. Exception : HW 적 특정 mode 진입 ( ex) interrupt 등등)

 

Exception Vector table

 

previl > usr :: O

usr > privileged :: Hard ( mode bit를 설정해야함 :: 10000 / 11111 )

>> SYS : like a privileged user mode

 

Abort :메모리 접근, Fetch 오류

 

CPSR 하위 0~4 [4:0]

 

CPSR 에 따라 mode변경 >Register set 즉, context 가 바뀜 ( register set, Stack point (R13) )

 

EX) SVC mode 중 IRQ가 발생

:::  Hardware

1) CPSR을 SPSR_irq에 복사 (SVC 값)
2) CPSR의 mode를 IRQ로 변경, stack pointer도 IRQ mode의 stack pointer로 변경.

// context changing
3) IRQ disable , ARM mode로 변경.
     Exception이발생 > 무조건 32bit ARM mode

4) R14_irq := 현재 PC 
5) IRQ Exception Vector 주소 > PC := 0x12
    

::: Software

       > IRQ handler
6) R0~R12  :  R13_irq (stack pointer)가 가리키는 stack에 저장

// SP  주소 - 13개 :: - 52 byte

7) 돌아갈 주소를 보정

// pipe line 은 나중에 나옴

R14_irq (LR) = PC

sub     lr, lr, #4   

8) 복귀 :: 백업 해둔걸 가져옴 

 

6. exception 돌아갈곳

 

 

' ^ ' 접미사 

ldmfd sp!, {r0-12, pc}^ :: SPSR > CPSR 로 업데이트

 

7. 함수 인자 ->레지스터

 

r0~r3 ( a1~a4 ) :: 함수인자 / result (포인터/주소) /  scratch ( 연습장 )                         >   4개 이상 인자는 stack에 할당

r4~r11 :: 변수 저장 레지스터

             > 8개 이상 역사 stack

// 레지스터 1개는 :: 32bit ,4byte

 

 

ex)

int f =sum_function (10, 20, 30, 40)  // sum 하는 함수

r0 := 10, r1:= 20, r2:=30, r3:=40

>f == r0 == 100 // 보통 return 값이 r0 으로 들어감

+

값이 아닌 주소를 보내 포인터 처럼 가져다가 쓸 수 있음

 

8. Interrupt 

     Interrupt 발생 > IRQ or FIQ Vector > ISR (  Interrupt Service Routine )

Nesting :  ISR 중 다른 Interrupt 받게해줌

  )) DPC, APC, Bottom half  : 중요한거 처리 후에 해줘

 

9, SoC:  System on Chip  :; ARM core + device  

        ex) CPU + 카메라 +  통신장치 + GPU ,네트워크 등등

// MCU 보다 더 포괄

10 . IP Module (Intellectual Property) 

  : SoC 에서 각각의 chip 들을 분할 > 모듈화 

       > HDL , Verilog ( Design Tool ) :  회로 설계

        > ASIC Library : Netlist  :: 회로 연결 ( HDL 코드 > 합성) 

   >> USB, UART , DMA,,, 

 

 

     :: AMBA Protocol > intercommunication

 

 11. SoC IP 모듈 연결 BUS

    : AMBA protocal (통신규약)

> Bus Interface : AHB, ASB, APB

 

(ASB)AHB : high speed , APB : 주변장치 peripheral

 

 // Bridge :  protocal , speed 가 다르니 Transe 해줌

 

 

Arbiter : 결정권

Decoder : 분배권

 

 Master의 BUS사용

요청 > 허락 > 다른것들 LOCK 해줘 > 접근slave 주소 전송 : Decoder > slave 선택됨 알려줌 

 > 준비OK > 쓸게 or 읽을게 ( 1 , 0 ) > 쓰고 / 읽기

 

 

Burst Transfer

 

NONSEQ : 보내고 + 4

BUSY : 주소 유지

SEQ : 연속적으로 +4

0x20 > NONSEQ > 0x24 >BUSY> 0x24 > SEQ > 0x28 >SEQ > 0x2C > SEQ > 0x30

 >> 주소를 증가시키면 주루룩 데이터 전송 가능

BURST의 종류

 

   WRAP : x 범위 안에서 돌면서 burst 

    INCR : x 범위 안에서 무작정 증가 burst

 

 

HBURST : WRAP4

HSIZE  : Word 

>> 

32bit > 4byte :: 4byte * 4 = 16byte = 0x10 byte

 

0x30~ 0x40 ( 0x10byte) 안에서 Wrapping 
 >> 초과시 -4 씩 줄여나감 ,, 미만시 +4 

'임베디드 > 임베디드 레시피' 카테고리의 다른 글

1장 이어서  (0) 2025.01.22
1장 정리안된부분  (0) 2025.01.20
Excetption , JTAG, ICD (완)  (0) 2025.01.20
watch dog Reset in ISR  (0) 2025.01.19
0x0 go  (0) 2025.01.19