이번에는 AVR의 Atmel Studio를 사용하는 방법을 알아보고 레지스터 제어하는 법과 시뮬레이터 디버깅을 해보자.
(이 회사는 인수되고 이름이 중구난방이 되버렸다....처음엔 AVR Studio였다가 Atmel Studio로 바뀌고 이젠 Microchip Studio란다....난는 뭔가 Atmel Studio가 더 편하고 친근하다.)
환경 설정
Atmel Studio7 설치 후 File - New - Project 을 누르면 칩을 선택하는 화면이 나온다.
여기서 사용할 칩을 선택하면 되는데 가장 많이 사용하고 교육용으로도 사용되는 흔하디 흔한 ATmega128을 사용해보자.
칩을 선택하면 비주얼스튜디오와 비슷한 화면을 맞이 할수 있다.
이제 여기서 신나게(?)코딩을 해주면 된다.
AVR코딩은 C언어를 기본으로 깔고 가지만 선택한 칩의 데이터시트를 보면서 어떤 레지스터를 무슨 명령어를 통해 제어할건지 따로 공부해야 한다.
레지스터 제어
크게 3가지의 범용레지스터를 지정해줘야 한다.
- DDRx : 해당 레지스터를 입력/출력으로 설정할건지 방향설정을 해주는 레지스터.(0 : 입력, 1 : 출력)
- PORTx : 출력 레지스터(0 : 0V, 1 : +5V)
- PINx : 입력 레지스터
x에는 A~G까지 지정 가능하며(ATmega128한정) 각각의 레지스터는 8비트(1바이트)로 구성되어있다.
그럼 이제 다음과 같이 코드를 작성해보자.
DDRB 레지스터에 0xFF값을 대입한다는 의미는 전부 출력모드로 설정한다.
이제 무한루프 안에서 동작을 설정해주면 된다.
무한루프 내부 코드는 10미리초 단위로 포트B의 레지스터 전부가 on/off를 반복한다는 뜻이다.
실제 보드를 연결해서 테스트를 해보면 좋지만 당장 갖고있는 보드가 없어서 시뮬레이션을 돌리면서 레지스터의 변화를 확인해보자.
시뮬레이터
2. main.c디렉토리로 돌아와서 Debug – Windows – I/O를 누르면 사용되는 레지스터를 디버깅을 통해 확인 할 수 있다.
이제 확인하고싶은 구간에 중단점을 찍으면서 디버깅을 해보자.
첫번째 초기값은 DDRB로부터 모두 출력모드로 설정되고 포트B에 0x00을 대입해서 아무 변화가 없다.
두번째는 포트B에 0xFF를 대입하여 전부 출력으로 설정한 결과 레지스터가 on돼서 빨간불이 들어온 것을 알 수 있다.
세번째는 while문을 돌아서 다시 포트B에 0x00을 대입하여 레지스터가 off되었다.
비트 쉬프트 패턴
앞에서 한 실습은 레지스터 1바이트를 통으로 제어했다면 쉬프트연산자를 통해 비트단위로 제어 해보자.
위와같이 코드를 작성해보자.
pattern_value라는 변수를 생성해 0x01이라는 hex값을 대입하고 DDRB레지스터를 전부 출력모드로 선언해 주었다.
무한루프문 안에서 포트B에 pattern_value를 대입하고 1칸씩 비트 쉬프트를 진행한다.
if문은 레지스터가 8비트라서 쉬프트를 계속하게되면 범위를 벗어나게 된다. 이렇게 overflow가 되면 다시 0x01로 세팅하는 작업이다.
이제 포트B에 중단점을 찍고 시뮬레이터로 디버깅을 해보자.
비트쉬프트연산을 개발보드 없이 시뮬레이터를 돌려서 레지스터의 변화를 확인할 수 있다.
'테크 > AVR(Microchip Studio)' 카테고리의 다른 글
[AVR] Atmega328P UART통신 & 헤더파일 나누기(putty) (0) | 2021.12.29 |
---|---|
[AVR] 아두이노를 이용한 AVR코딩 & 버튼 채터링(Microchip Studio) (0) | 2021.12.25 |
[µ-Processor] 내부구조(ALU) (1) | 2021.07.20 |
[µ-Processor] AVR내부연산 & Opcode (0) | 2021.07.17 |
[µ-Processor] 기본적인 어셈블리어 & 문법 (0) | 2021.07.17 |