본문 바로가기

전체 글77

Cortex-A9 Coprocessor Cortex-A9 Coprocessor CP15 기능1. SCR (System Control Coprocessor)2. MMU 설정 및 제어3. I-Cache, D-Cache 설정 및 제어4. L2 Cache Preload Engine의 설정 및 제어5. System Performance Monitor6. C0-C15 16개의 레지스터 보유 리턴 스택1. 함수 호출 시 복귀주소를 스택에 저장2. 리턴 명령을 prefecth하면 복귀주소를 POP하여 그 주소의 명령부터 prefetch3. 리턴이 발생하면 pipeline flushing 없이 계속 리턴 이후 명령 수행이 가능. *참고로 prefetch된 명령들은 MMU T/T 등이 변경되기 전의 조건에서 fetch된 명령들이기 때문에, 현재 명령이 MMU .. 2018. 7. 29.
Interrupt Controller Interrupt ControllerARM 코어에는 FIQ와 IRQ가 각각 하나씩만 존재한다. 하지만 인터럽스 소스들은 여러개가 있기 때문에, 코어 외부에 인터럽트 컨트롤러가 인터럽트 개수를 확장하고 운용한다. 인터럽트 컨트롤러의 역할1. 인터럽트 소스 허용 여부 결정2. 각 인터럽트의 우선순위 결정3. IRQ, FIQ 결정 IRQ 핸들러 설계 예시HandlerIRQ: sub lr, lr, #4 stmfd sp!, {r0-r3, r12, lr} ldr r0, =ICCIAR_CPU0 ldr r1, [r0] ldr r2, 0x3FF and r1, r1, r2 ldr r0, =ISR_Vector ldr r2, [r0, r1, lsl #2] blx r2 ldmfd sp!, {r0,-r3, r12, pc}^ 핸들.. 2018. 7. 29.
ARM Mode(모드) and Exception(예외) ARM Mode and Exception 파이프라인 구조ARM 아키텍처는 다음과 같은 3 스테이지 걸쳐 실행된다.1. Fetch메모리로부터 명령을 파이프라인으로 불러온다. 2. Decode명령을 decode해서 ARM 프로세서에게 보낸다. 3. ExecuteARM 프로세서 내부의 ALU 연산 결과가 레지스터값에 저장된다. ARM은 위와 같이 명령이 다음 실행 단계로 넘어갈 때 다음 명령을 새로 불러온다. 따라서 한 사이클에 최대 3개의 명령 스테이지가 동시에 진행될 수 있다. 프로세서 모드 1. User (usr)일반적인 사용자 프로그램이 실행되는 모드. 2. System (sys)Privileged OS task가 수행되는 모드. 3. Supervisor (svc)OS를 위한 protected mode.. 2018. 7. 24.
Tail Call Tail Call func0 --> func1 --> func2 --> func3 순서로 함수가 호출되는 경우, func0에서 분기할 때만 'BL' 명령어를 쓰고,그 뒤에 호출되는 함수 셋에서 'B' 명령어를 쓰면,LR(Link Register)은 func0 의 분기 지점을 여전히 가리키고 있게된다. 이 때, func2에서 func3 호출 뒤 'BX LR' 명령으로 바로 func0로 리턴할 수 있다. 매번 새로 호출된 함수에서 'BL' 명령으로 LR을 갱신시키지 않으면 Tail Call의 효과를 누릴 수 있다.LR가 가리키는 복귀 주소인 func0로 즉시 리턴되기 때문에 효율적이다. 2018. 7. 24.