cStart. 소스 파일에서 주석문을 제외하고 제일 처음에 vector table을 만나게 된다.
ldr 명령어는 레지스터에 해당주소를 저장하는 레지스터?(말이 이상함)
위 빨간네모를 보면 pc(program counter)에 reset_handler에 주소를 가지게 된다.
reset_handler는 아래와 같다.
위 그림에서 또 다시 pc에 _low_level_init에 주소를 가진다. 이제 부터 추적, 추적을 해서 복잡하게 될것이다.
_low_level_init은 아래그림과 같다.
ldr 명령어로 레지스터 r2 아래그림의 라벨을 따르고 있다. 그전에 알아야 할것은 arm은 레지스터가 총 r0~
r15까지 16개의 레지스터가 있다. 그중에서 r0~r12까지는 일반 레지스터이다. r13~r15까지는 특정 레지스터이다.
설명은 위의 그림의 주석으로 설명함.
이 그림에서 2개의 .word ~~~~가 있다.
ldmia 명령어에 의해서 r0=lowlevel_init
r1=TOP_OF_MEMORY를 가르키게 된다. 그리고 그것을 통째로 r2가 가르키는 것이다.
위의 그림보다 더 길지만, 자세하게 하지않으므로 생략. init함수에서 우리가 확인 하는 것은 주파수체배기 18MHz정도 되는 주파수를 48MHz로 증폭하는 소스이다. (하드웨어 회로도 구성되어 있으며 그것을 동작하기 위한 함수라는 것만 확인
하면 되겠다.)
다음은 TOP_OF_MEMORY를 추척해보면 다음과 같은 그림이 나온다.
위의 헤더파일 200000과 10000이 정의되어 있다. 이 주소를 더하면 0x210000이 된다. 즉, sram의
주소 시작주소이다.
다음은 메모리 map이다. 아래 그림처럼 SRAM영역은 0X0020000부터 0X002FFFF로 되어있다.
그러나 부팅 CODE에 의해서 0X210000이 된다.
'임베디드 > Arm2567SAM' 카테고리의 다른 글
4월 relay 정리 (0) | 2013.06.02 |
---|---|
4월 LED정리 (0) | 2013.05.31 |
4월 17일 LCD문자입력함수 만들기 (0) | 2013.05.30 |
4월 16일 CMD_Write와 DATA_write함수 만들기 (0) | 2013.05.28 |
5월 27일 LCD에 한글이름 찍기 (0) | 2013.05.27 |