본문 바로가기
코스웨어/15년 스마트컨트롤러

20151127-김재홍-ARM_Assembly_2일차

by 알 수 없는 사용자 2015. 11. 27.
728x90
반응형

/***ARM_Assembly_2일차***/


embedded recipes 132_Page


APCS :    ARM Procedure Call Standard

1) 함수를 부를 때 레지스터는 어떻게 사용해야 하는가?

2) return 값은 어떻게 돌려주는가?

3) stack은 어떨 때, 어떻게 사용되는가?

4) 1)~3)에서 사용된 레지스터 이외의 레지스터들은 어떻게 사용되는가?

이와 같이 일반 레지스터를 쓰는 이런 약속을 APCS 즉, ARM Procedure Call Standard라고 부르고, 

이 Standard에 맞추어서 Compiler는 기계어를 만들어 냅니다.


AAPCS :    Procedure Call Standard for ARM Architecture

http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042e/IHI0042E_aapcs.pdf


AAPCS에 의한 각 레지스터의 사용법은 다음 Table과 같습니다.

R14 (LR, Link Register) : 함수를 호출하거나, 어디론가 jump했을 때 돌아올 주소(Return Address)를 넣는 목적으로 사용합니다.

인텔cpu에서는 eip에 값을 못 넣습니다. 그렇기 때문에 다음과 같은 명령은 컴파일 에러를 일으킵니다.

mov    eip, 30    // eip에 30을 넣어라.

ARM은 위와 같은 명령을 막아 놓지는 않았습니다. 그렇다고 맘대로 쓰다가는 망합니다.



스택에 할당되는 영역은 될 수 있으면 회피하는 것이 좋습니다.

호출된 함수 내부에서 할당되어 마음대로 쓰는 것을 스크래치Scratch(연습장)라 합니다.


함수의 인자 최초4개는 레지스터에 할당하기 때문에 

함수를 만들 때 인자를 활용하는 것이 빠른 연산을 하기에 가장 좋습니다.

다시말해 함수의 3번째, 4번째 인자를 내부 변수용으로 쓰면 함수를 사용하는데 효율적입니다.


embedded recipes 137_Page


 IP 란?

구글에서 'IP회로'로 검색하니 다음의 결과가 나왔습니다.

IPIntellectual Property의 약자입니다.

ASIC나 FPGA를 만들 때 사용될 수 있는 논리회로 블럭을 의미합니다.

"IP Cores"의 예로는 UART, CPU, Ethernet 컨트롤러, PCI 인터페이스등이 있습니다.


ISR

Handler 내부에는 Interrupt가 여러 가지 종류가 있을 테니, 그 각각의 Interrupt에 따른 응답이 다릅니다.

그것을 Interrupt Service Routine이라고 부르고, 약자로는 ISR이라고 부릅니다.


전자 시스템에서 Interrupt의 정체는 전기 신호입니다.

인터럽트가 들어오면(동작하면) 회로가 동작한다고 생각하면 되겠습니다.

다시말해, 인터럽트신호가 걸리면 회로가 동작하는 것입니다.


인터럽트의 중첩 Nesting

Nesting은 이런 인터럽트의 중첩을 말합니다.

인터럽트가 걸려서 ISR을 처리하는 동안에 인터럽트가 또 걸리는게 Nesting입니다.


Interrupt Nesting


이렇게 무한히 Nesting을 처리하다 보면 원래 맨 처음에 처리하던 인터럽트는 무한히 그 순서가 밀리고, 

이런 인터럽트에는 우선순위Priority가 있습니다.

또 이런 인터럽트의 중첩은 cpu에 따라 허용하지 않는 cpu도 있습니다.


embedded recipes 141_Page


ARM이라는 회사는 실제로 Processor를 파는 회사가 아니고 CUP Architecture를 파는 회사입니다.

MCU (Micro controller unit) 또는 MPU (Micro processor unit)와 같은 chip들은 결국에 모두 같은 ARM core를 쓰다 보니까,

ARM assembly (여기서의 어셈블리는 언어가 아닌 회로를 말한다)를 모두 공용으로 사용하며, 

ARM Assembly를 이용해서 MCU를 control가능하게 합니다.


ARM이 이런 core design만 팔다 보니, core에 여러 가지 기능을 덧붙여서 한 개의 chip으로 만드는 기술이 스포트라이트를 받게 되었는데 

이런 구조를 SoC라고 부르기도 합니다. 

한마디로 System on Chip이라고 해서, ARM core를 바탕으로 웬만한 Device들을 block화 해서 한 chip에 집어 넣겠다는 전략인 것입니다.

이런 concept을 이용해서 여러 chip을 만들다 보니까, SoC 측면에서 각각의 기능들을 가진 chip을 각각의 block으로 만들면 재사용 가능하다는 것을 알았습니다.

기능을 모듈화하는 것입니다. 이런 각각의 기능을 가진 SoC내부의 block들을 IP (Intellectual Property)라고 명명하게 됩니다.



이런모듈들을 HDL이나, Verilog 같은 디자인 툴을 이용해서 모듈을 설계하고,


HDL


Verilog


ASIC Library를 이용해서 최종 netlist 까지 만들어 내면 하나의 모듈이 되고, 이런 모듈 하나를 IP라고 부른다는 말입니다.


이런 것들이 모여 각자의 기능으로 묶인 block들이 모여 한 개의 MCU라는 걸 이루게 됩니다.

Serial port라던가, I/O, PLL 등, 웬만한 기능들은 이 chip안에 모두 가지고 있습니다.


주파수 체배기 Frequency Multiplier 란?

Multiply라는 말은 우리말로 곱해준다는 뜻입니다. Frequency multiplier란 말 그대로, 주파수를 정배수로 뻥튀기해준다는 말입니다.

예를들어 1GHz가 입력되면 출력에서는 2GHz, 3GHz, 4GHz등의 배수 주파수 성분 중 한가지를 선택하여 사용하게 만든 그런 회로입니다.

이중에서 두배의 주파수를 출력하는 회로는 간단하게 Frequency Doubler라고 부르며, 세배의 주파수를 출력하는 경우는 Frequency Tripler라고 부릅니다.

Frequency multiplier는 이렇게 입력주파수의 배수성분을 출력해내는 회로를 통칭해서 부르는 것입니다. 

이러한 체배기 중에선 4배, 5배의 출력주파수를 사용하는 경우도 있지만, double이나 tripler정도 배율의 체배기가 주로 애용됩니다.






728x90