- 개발 환경
Macbook Pro 14 (M3)
macOS : Sequoia 15.4
개발 보드 : NewTC AVR MEGA 128 개발보드
프로그래머 : NewTC AVR용 USPISP V7.0
Jtag 프로그래머 및 디버거 : AVR JTAG ICE USB
1. 서론
지난 포스트에서 Toolchain를 설치 하였으며 이번에는 개발보드에 기본적으로 장착되어 있는 LED를 점등 하는 예제를 동작시켜볼 예정입니다. 이번에는 터미널를 통해서 컴파일 및 업로드를 하면서 makefile로 자동화 하기 전 컴파일부터 업로드까지의 흐름을 이해할것입니다.
2. LED 점등 예제 코딩
# 프로젝트 폴더 생성 및 이동
mkdir -p ~/Documents/atmel/LED_blink
cd ~/Documents/atmel/LED_blink
# 소스 파일 생성
touch ./main.c
먼저 우리가 개발할 보드의 LED를 확인 해보면 PA0에 연결되어 있습니다. 그러므로 PA0를 출력으로 설정하고 1초 마다 점등하도록 예제를 작성하도록 하겠습니다.
// CPU 클력 설정
#define F_CPU 16000000UL
// MCU 설정
#define __AVR_ATmega128A__
#include <avr/io.h>
#include <util/delay.h>
int main(void){
DDRA = 0x01; // PA0을 출력으로 설정
while(1){
PORTA = 0x01; // PA0의 출력을 HIGH로 설정
_delay_ms(1000); // 1초 딜레이
PORTA = 0x00; // PA0의 출력을 HIGH로 설정
_delay_ms(1000); // 1초 딜레이
}
return 0;
}
3. avr-gcc로 컴파일
이제 위 소스 코드를 컴파일하도록 하겠습니다.
avr-gcc -Wall -Os -g -DF_CPU=16000000UL -mmcu=atmega128a -o main.bin main.c
- 옵션 설면
-Wall : 모든 Warning 출력
-Os : 출력 결과물의 크기(size)를 최적화(Optimization)
-g : 출력 결과물에 디버깅 심볼을 추가
-DF_CPU=16000000UL : MCU 클럭을 16MHz로 설정
-mmcu=atmega128a : mcu 설정
-o main.bin : 출력 파일 이름을 main.bin으로 설정
4. avr-objcopy로 MCU 업로드하기 위한 hex 파일 생성
avr-gcc로 main.bin 파일을 생성하였지만 해당 파일은 Atmel MCU에 맞는 파일이 아닙니다. 이를 Atmel MCU에 맞춘 파일로 바꾸어줄 필요가 있습니다.
avr-objcopy -j .text -j .data -O ihex main.bin main.hex
- 옵션 설명
-j .text -j .data : 출력 파일에 복사할 섹션을 설정 (text 섹션과 data 섹션을 복사)
-O ihex : 출력 파일의 형식을 설정 (hex 형식으로 설정)
main.bin : 입력 파일 이름
main.hex : 출력 파일 이름
4. 개발 보드와 프로그래머 연결 및 설정
맥북에 연결하면 /dev 폴더 내 디바이스 파일이 생성됩니다.
5. 퓨즈 비트 설정
- 퓨즈 비트 계산기
https://www.engbedded.com/fusecalc/
AVR® Fuse Calculator – The Engbedded Blog
Welcome to the classic AVR Fuse Calculator. There is also an ALPHA version of a new fuse configurator, called confFUSE™, which utilizes an up-to-date device database. If you want to give it a try, switch to confFUSE™. But be warned: That new version is
www.engbedded.com
위와 같이 설정 하였다면 "Apply feature settings"를 클릭 하여 퓨즈 비트를 확인합니다.
- Ext. Crystal/Resonator High Freq. : 개발 보드는 외부에 16MHz 크리스탈 오실레이터가 있습니다. 그 오실레이터를 사용하기 위한 설정입니다.
- On-Chip Debug Enabled : 나중에 JTAG로 디버깅하기 위해 미리 1로 설정합니다.
- ATmega103 Compatibility Mode : Atmega103과 호환 가능하도록 하는 비트입니다. 저희는 사용할 필요가 없으니 0으로 설정합니다.
MCU의 퓨즈 비트 Write
avrdude -p m128a -c stk500v2 -P /dev/tty.usbmodem00000000000011 -U lfuse:w:0xff:m -U hfuse:w:0x19:m -U efuse:w:0xff:m
- 옵션 설명
-p m128a : 업로드할 MCU 설정
# avrdude가 지원 가능한 mcu 목록 확인
avrdude -p '?'
-c stk500v2. : 프로그래머의 타입 설정
# avrdude가 지원 가능한 프로그래머 목록 확인
avrdude -c '?'
-P /dev/tty.usbmodem00000000000011 : 연결된 프로그래머의 디바이스 파일
-U lfuse:w:0xff:m -U hfuse:w:0x19:m -U efuse:w:0xff:m : 우리가 퓨즈 비트 계산기로 도출한 설정
6. Hex 파일을 mcu에 업로드
avrdude -p m128a -c stk500v2 -P /dev/tty.usbmodem00000000000011 -U flash:w:main.hex
- 옵션 설명
-U flash:w:main.hex
flash : 접근할 메모리 타입
w : 쓰기(Write)
main.hex : 업로드할 파일
'Embedded > Atmel' 카테고리의 다른 글
Mac에서 Atmel(AVR) MCU 개발을 위한 환경 구축 - 6 : Visual Studio Code로 디버깅 (0) | 2025.04.04 |
---|---|
Mac에서 Atmel(AVR) MCU 개발을 위한 환경 구축 - 5 : 저렴한 JTAG로 Debugging 하기 (0) | 2025.04.04 |
Mac에서 Atmel(AVR) MCU 개발을 위한 환경 구축 - 4 : VS Code에서 펌웨어 작성 (0) | 2025.04.03 |
Mac에서 Atmel(AVR) MCU 개발을 위한 환경 구축 - 3 : Makefile로 자동화 (0) | 2025.04.03 |
Mac에서 Atmel(AVR) MCU 개발을 위한 환경 구축 - 1 Toolchain 설치 (0) | 2025.04.02 |