MSTK2440 보드가 정상 동작하는가 확인하기 위해서 간단한 startup 프로그램과 c프로그램을 만들어 봤다.
start.s 파일을 보면 진짜 별거 없다. Watch dog과 인터럽트를 disable하고 바로 C프로그램의 Main함수로 jump했다. Reset 이외의 exception들은 전부 처리하지 않았다. 일단 스택과 SDRAM 동작 설정을 아무 것도 하지 않았기 때문에 C프로그램에서 변수와 로컬함수 사용은 불가능하다. ㅋㅋ 그저 LED만 껐다 켰다 해볼뿐. delay함수 구현도 안되었기 때문에 Jlink로 하나의 step씩 실행해야 LED 점멸 결과를 알 수 있다ㅋㅋ 아래의 start.s 소스를 보면 이후 start up 코드의 기본 뼈대가 될 것이다.

; start.s
 AREA    Init, CODE, READONLY
 ENTRY
 
 ;Exception Vector Table
 b ResetHandler
 b HandlerUndef ;handler for Undefined mode
 b HandlerSWI  ;handler for SWI interrupt
 b HandlerPabort ;handler for PAbort
 b HandlerDabort ;handler for DAbort
 b .    ;reserved
 b HandlerIRQ  ;handler for IRQ interrupt
 b HandlerFIQ  ;handler for FIQ interrupt


 IMPORT  Main    ; The main entry of mon program

;=======
; ENTRY
;=======
ResetHandler
 ldr r0,=0x53000000   ;watch dog disable
 ldr r1,=0x0
 str r1,[r0]

 ldr r0,=0x4A000008
 ldr r1,=0xffffffff  ;all interrupt disable
 str r1,[r0]

 ldr r0,=0x4A00001C
 ldr r1,=0x7fff  ;all sub interrupt disable
 str r1,[r0]

 b Main
 b .
 
HandlerUndef
HandlerSWI
HandlerPabort
HandlerDabort
HandlerIRQ
HandlerFIQ
 b .



// Main.c
#define rGPBCON (*(volatile unsigned int*)0x56000010)
#define rGPBDAT (*(volatile unsigned int*)0x56000014)

// start.s에서 스택설정이 안되었기 때문에 아직 동작안함
void delay(int d)
{
 int i=0;
 for(i=0;i<d;i++);
}

void Main()
{
 // GPB5,6,7,8 output으로 설정 -> s3c2440 데이터 시트 참조
 rGPBCON = (0+(0x01<<10)+(0x01<<12)+(0x01<<14)+(0x01<<16));
 rGPBDAT = ~((1<<5) + (1<<8)); // GPB5, GPB8 LED ON
 
 while(1)
 {
  rGPBDAT = 0xffffffff; // LED OFF
  //delay(1000);
  
  rGPBDAT = 0x0;    // LED ON
  //delay(1000);
 };
}



'ARM > MSTK-2440' 카테고리의 다른 글

MSTK-2440 보드 회로 분석  (0) 2009.08.21
MSTK-2440 보드 소개  (0) 2009.08.21

+ Recent posts