TI stellaris launchpad에 들어 있는 LM4F 프로세서에는 칩의 ROM에 stellarisware peripheral access library 가 이미 들어있기 때문에 그 함수들을 사용하면 되고 그런 함수들은 함수 이름이 'ROM_'으로 시작한다.
일단 간단한 프로그램을 만들어 보자. 파일 이름은 ledtest1.c로 하겠다.
- #include "inc/hw_gpio.h"
- #include "inc/hw_memmap.h"
- #include "inc/hw_sysctl.h"
- #include "inc/hw_types.h"
- #include "driverlib/gpio.h"
- #include "driverlib/rom.h"
- #include "driverlib/sysctl.h"
- #define LED_RED GPIO_PIN_1
- #define LED_BLUE GPIO_PIN_2
- #define LED_GREEN GPIO_PIN_3
- int main()
- {
- ROM_SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN);
- ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
- ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, LED_RED|LED_BLUE|LED_GREEN);
- for (;;) {
- // set the red LED pin high, others low
- ROM_GPIOPinWrite(GPIO_PORTF_BASE, LED_RED|LED_GREEN|LED_BLUE, LED_RED);
- ROM_SysCtlDelay(5000000);
- ROM_GPIOPinWrite(GPIO_PORTF_BASE, LED_RED|LED_GREEN|LED_BLUE, 0);
- ROM_SysCtlDelay(5000000);
- }
- }
위의 프로그램을 컴파일해서 stellaris launchpad에 다운로드 할 수 있는 바이너리 파일을 만들기 위해서는 startup 파일과 linker script 파일이 필요하다.
컴파일러에 따라 다른 파일이 필요한데 맥에서 cross-gcc(arm-none-eabi-gcc)를 사용하는 경우 stellarisware에 들어있는 startup_gcc.c (~/stellarisware/boards/ek-lm4f120xl/blinky/startup_gcc.c)와 blinky.ld (~/stellarisware/boards/ek-lm4f120xl/blinky/blinky.ld) 파일을 사용하면 된다.
startup_gcc.c 파일을 위의 소스코드와 같은 디렉토리에 복사 해 넣은 다음 아래와 같은 Makefile을 만들어 준다.
- #
- # Makefile for Stellaris Launchpad
- #
- STELLARISDIR=/Users/nautes/stellarisware
- PROCESSOR=LM4F120H5QR
- LOADER_SCRIPT=blinky.ld
- CC=arm-none-eabi-gcc
- CFLAGS=-g \
- -mthumb \
- -mcpu=cortex-m4 \
- -mfpu=fpv4-sp-d16 \
- -mfloat-abi=softfp \
- -Os \
- -ffunction-sections \
- -fdata-sections \
- -MD \
- -std=c99 \
- -Wall \
- -pedantic \
- -DPART_${PROCESSOR} \
- -c \
- -I${STELLARISDIR} \
- -DTARGET_IS_BLIZZARD_RA1
- TARGET:=ledtest1
- BOOTSTRAP:=startup_gcc.o
- SRCS:=ledtest1.c
- OBJS:=$(SRCS:.c=.o) $(BOOTSTRAP)
- .c.o:
- ${CC} ${CFLAGS} $<
- $(TARGET): $(OBJS)
- # arm-none-eabi-ld -T ${LOADER_SCRIPT} --entry ResetISR -o $@ ${BOOTSTRAP} ${TARGET}.o --gc-sections
- arm-none-eabi-ld -T ${LOADER_SCRIPT} --entry ResetISR -o $@ $(OBJS) --gc-sections
- arm-none-eabi-size ${TARGET}
- arm-none-eabi-objcopy -O binary ${TARGET} ${TARGET}.bin
- clean:
- rm ${TARGET} *.d *.o *.bin
디렉토리에 ledtest1.c, blinky.ld, startup_gcc.c, Makefile이 다 있으면 프로그램을 make하면 된다.
$ ls
Makefile blinky.ld ledtest1.c startup_gcc.c
$ make
arm-none-eabi-gcc -g -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -Os -ffunction-sections -fdata-sections -MD -std=c99 -Wall -pedantic -DPART_LM4F120H5QR -c -I/Users/nautes/stellarisware -DTARGET_IS_BLIZZARD_RA1 ledtest1.c
arm-none-eabi-gcc -g -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -Os -ffunction-sections -fdata-sections -MD -std=c99 -Wall -pedantic -DPART_LM4F120H5QR -c -I/Users/nautes/stellarisware -DTARGET_IS_BLIZZARD_RA1 startup_gcc.c
arm-none-eabi-ld -T blinky.ld --entry ResetISR -o ledtest1 ledtest1.o startup_gcc.o --gc-sections
arm-none-eabi-size ledtest1
text data bss dec hex filename
902 0 261 1163 48b ledtest1
arm-none-eabi-objcopy -O binary ledtest1 ledtest1.bin
$ lm4flash ledtest1.bin
ICDI version: 9270
$
lm4flash 명령이 정상적으로 실행되면 빌드 된 바이너리 파일이 보드로 다운로드 되고 바로 실행이 시작되기 때문에 보드의 리셋스위치 바로 아래 있는 D1 LED(아래 사진의 파란색 원 부분)가 빨간색으로 반짝이는걸 볼 수 있다.
댓글 없음:
댓글 쓰기