Evaluator-7T를 이용한 7-seg와 LED 제어
- 최초 등록일
- 2010.10.17
- 최종 저작일
- 2008.09
- 35페이지/ 한컴오피스
- 가격 3,000원
소개글
Evaluator-7T를 이용하는 첫 번째 실험으로 S3C4510B microcontroller에 대해 이해하고, 7-seg와 LED를 사용하여 16진수 값을 오름차순과 내림차순으로 출력시켜 본다.
목차
1.Title
Evaluator-7T를 이용한 7-seg와 LED 제어
2.Name
3.Abstract
Evaluator-7T를 이용하는 첫 번째 실험으로 S3C4510B microcontroller에 대해 이해하고, 7-seg와 LED를 사용하여 16진수 값을 오름차순과 내림차순으로 출력시켜 본다.
4.Background
본문내용
1. Special Purpose General Register
유저가 프로그램 할 때 레지스터 지정을 위해 사용할 수 있는 키워드는 r0 ~ r15까지이다. 그중에 몇 가지는 특별한 목적을 위해 사용된다.
- Program Counter (r15)
r15는 다른 CPU에서 PC와 같은 역할을 한다. 다만 차이가 있다면 r15를 일반 다른 레지스터처럼 오퍼랜드로 사용할 수 있다는 점이고 ARM 어셈블러에서는 pc라는 키워드와 r15를 동일하게 취급한다.
- Stack Pointer (r13)
ARM에는 Stack을 위한 명령어가 따로 없다. 즉, Push나 Pop 등의 명령어가 제공되지 않는다. 그러나 sp라는 키워드를 사용하여 r13을 쓸 수 있는데, 묵시적으로 r13을 스택 포인터로 사용할 수 있도록 정해 놓았다. 그리고, Push 명령이나 Pop 명령이 없으므로, ARM에서는 같은 기능을 일반 데이터 전송 명령을 통해 해결한다. ARM의 데이터 전송명령은 Auto Increment 기능이 있어서 하나의 인스트럭션으로 Push나 Pop과 동일한 기능을 수행 할 수 있다.
- Link Register (r14)
r14는 링크 레지스터라고 부fms다. 이 레지스터는 8086 등의 CPU에서는 보지 못했던 기능의 레지스터다. 8086등의 프로세서는 서브루틴을 호출할 경우 CALL을 사용하면, 다음에 수행될 프로그램 카운터를 스택에 넣고, 호출될 번지를 프로그램 카운터에 넣는 동작을 하는데, ARM에서는 CALL과 RET와 같은 명령이 없다. 대신 `Branch with Link`라는 명령(BL)이 있는데, 해당 명령을 수행하면, CALL과 비슷하게 다음에 수행될 pc(r15)값을 스택이 아니라 lr(r14)에 넣고 분기 번지를 pc(r15)에 넣어 분기한다. 즉, 스택을 사용하지 않는 것이라 할 수 있다. 복귀할 때는 RET대신 mov pc,lr 이라는 데이터 전송명령으로 복귀한다.
이런 방식은 나름대로 장단점이 있다. 우선 단점을 말하자면, 어떤 서브루틴이 콜 되었을 때, 서브루틴에서는 복귀번지가 r14에 들어 있는 상태가 된다. 문제는 해당 서브루틴에서 다시 한번 다른 서브 루틴을 콜 한다면, 원래 r14에 보관되어 있던 복귀 번지 값이 덮어 씌워지는 결과가 생긴다. 이런 경우엔, 수동으로 sp(r13)를 이용하여 스택에 r14 값을 보관해 두어야 한다. 즉, Call하기 전에 r14를 스택에 보관해 두고, 리턴해서 복구하는 과정을 거치는 셈이다.
2. ARM Status Register 6개 - but 1개의 Status Register
ARM에는 32비트의 스테이터스 레지스터가 6개가 있다. 그러나 6개 모두를 한꺼번에 사용하지는 못하고, 또 그럴 필요도 없다. 일단은 하나의 32비트 Status 레지스터만 생각하면 된다. 스테이터스 레지스터는 PSR이라고 부른다. 그리고 일반적으로 CPSR 이라고 하여 Current Processor Status Register로도 부른다.
PSR은 크게 Flag Bits부분과 Control Bits부분으로 나누어 진다.
- Flag Bits
어떤 인스트럭션의 결과 등을 나타내는 부분으로 4 비트가 있다. 다른 CPU의 그것과 유사한데, 각각 N, Z, C, V 의 4가지다.
1) Negative/Less Than Flag
N 으로 표기되는 이 플래그는 연산의 결과가 마이너스인 경우에 Set
2) Zero Flag
Z 으로 표기되는 이 플래그는 연산의 결과가 0이 되었을 경우에 Set
3) Carry/Borrow/Extend Flag
C 로 표기되는 이 플래그는 자리올림이나 내림이 발생한 경우 Set 그리고 Shift 연산 등에서 사용된다.
참고 자료
-http://blog.naver.com/nemco3/90001967381
-http://tisu.it.jyu.fi/embedded/TIE345/luentokalvot/Embedded_3_ARM.pdf
-http://blog.paran.com/xscale/4260066
-ARM System Developer`s Guide : Designing and Optimizing System Software