1. word : CPU 가 한번에 처리할 수 있는 크기
2. Thumb mode : 과거에 쓰던거라서..
> uint16_t 짜리 data 를 uint32_t 버퍼에 넣는거랑 비슷함
// 2번 가져오지뭐,,
3. ARM mode
normal : USR , 나머지 : privileged
>> USR -> privileged X
4. 모드별 Register
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 등등)
previl > usr :: O
usr > privileged :: Hard ( mode bit를 설정해야함 :: 10000 / 11111 )
>> SYS : like a privileged user mode
Abort :메모리 접근, Fetch 오류
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
// Bridge : protocal , speed 가 다르니 Transe 해줌
Arbiter : 결정권
Decoder : 분배권
Master의 BUS사용
요청 > 허락 > 다른것들 LOCK 해줘 > 접근slave 주소 전송 : Decoder > slave 선택됨 알려줌
> 준비OK > 쓸게 or 읽을게 ( 1 , 0 ) > 쓰고 / 읽기
NONSEQ : 보내고 + 4
BUSY : 주소 유지
SEQ : 연속적으로 +4
0x20 > NONSEQ > 0x24 >BUSY> 0x24 > SEQ > 0x28 >SEQ > 0x2C > SEQ > 0x30
>> 주소를 증가시키면 주루룩 데이터 전송 가능
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 |