임베디드 개발(before)/IoT 임베디드 SW 개발자 양성과정

[27일차] ARM 프로세서 이해 및 활용 (Program Status Register (PSR), Exception)

주운녕 2020. 8. 19. 14:15

개념을 이해하기 위해 찾아보다가 정리가 굉장히 잘 되있는 사이트를 발견했다.

찬찬히 읽어보며 이해해봐야지 JK전자와 함께하는 ARM 완전정복

 

Program Status Register (PSR)

    ▷ ARM의 PSR

        - 1개의 CPSR(Current Program Status Register)

        - 5개의 SPSR(Saved Program Status Register)

● PSR 레지스터의 정보

    ▷ Condition code flag

       - ALU의 연산 결과 정보를 가지는 flag 정보를 가지고 있다. -> ALU를 통한 명령의 실행 결과를 나타내는 부분이다.

       1) N 비트(Negative flag)

       - ALU 연산 결과가 마이너스가 발생한 경우(연산결과 맨 꼭대기 비트가 1이 될 경우) set

 

       2) Z 비트(Zero flag)

       - ALU 연산 결과 0이 발생한 경우 set

 

       3) C 비트(Carry flag)

       - ALU연산 결과 자리올림이 발생하거나 내림이 발생하지 않은 경우 set

       - Shift 연산에서 carry사 발생한 경우 set

       ex. 덧셈후 32비트 이상 비트가 증가하여 넘어갈 때 set 

       ex2. 작은수에서 큰 수를 뺄 때 작은 수에 한자리 빌려옴. (버로우 (B))( 빼기시 버로우의 반대 비트 (B=~C))

 

       4) V 비트(oVerflow flag)

       - ALU 연산 결과 overflow가 발생하면 세트 (더하기로 맨 꼭대기 비트가 켜질 때)

 

       5) Q 비트(Q flag)

       - ARM Architecture v5TE/J에서 새롭게 추가된 saturation 연산 명령의 수행결과 saturation이 발생시 set

       - 이 비트는 사용자에 의해서만 클리어 된다.

 

       6) J 비트

       - ARM Atchitecture v5TE/J에서 새롭게 추가된 Java 바이트 코드를 수행하는 Jazelle state 임들 나타낸다.

 

    ▷ Control bits

        ⊙ 프로세서의 모드, 동작 state와 인터럽트를 제어

        - I/F 비트

        : IRQ('I' 비트) 또는 FIQ('F' 비트)를 막는 mask 역할을 하는 비트(다른 인터럽트를 처리중이거나 더 급한 일이 있을 경우), (인터럽트와 F인터럽트가 동시에 들어오면 인터럽트 컨트롤러에서 관리 한다.)

 

        - T 비트

        :- BX 명령에 의해서만 제어

        :- Thumb state임을 나타낸다.

        :- 상태를 나타낼 뿐 프로세서는 이 비트에 강제로 값을 write 할 수 없다.

 

    ▷ Mode bits

        - ARM의 7가지 동작 모드를 나타낸다.

● Exception

    - 외부의 요청이나 오류에 의해 정상적으로 진행되는 프로그램의 동작을 잠시 멈추고 프로세서의 동작 모드를 변환하고 미리 정해진 프로그램을 이용하여 외부의 요청이나 오류에 대한 처리를 하도록 하는 것.

    ex) I/O장치에서 인터럽트를 발생시키면 IRQ Exception이 발생하고, 프로세서는 발생된 IRQ Exception을 처리하기 위해 IRQ 모드로 전환되어 요청된 인터럽트에 맞는 처리 동작 수행.

    

▷Exception Vector

- Exception이 발생하면 미리 정해진 어드레스의 프로그램을 수행.

- 미리 정해진 프로그램의 위치를 Exception Vector라 한다.

 

▷Exception Vector Table

- 발생가능한 각각의 Exception에 대하여 Vector를 정의해 놓은 테이블.

    :- 각 Exception별로 1word 크기의 ARM 명령어 저장 공간을 가진다.

- Vector table에는 Branch 명령어 또는 이와 유사한 명령으로 실제 Exception을 처리하기 위한 루틴으로 분기 할 수 있는 명령으로 구성되어 있다.

    :- FIQ의 경우는 Vector Table의 맨 상위(마지막)에 위치하여 분기명령 없이 처리 루틴을 프로그램 할 수 있다.

- ARM은 기본적으로 0x00000000에 vector table을 둔다. (MMU제어 프로그램에 의해 위치 변경 가능)

 

 

 


* 개인적인 학습 목적으로 작성한 글이기에 내용에 잘못된 정보가 있을 수 있습니다.