본문 바로가기
# Semiconductor/- Semicon Academy

[Harman 세미콘 아카데미] 16일차 - ATmege128의 개요

by Graffitio 2023. 7. 10.
[Harman 세미콘 아카데미] 16일차 - ATmege128의 개요
728x90
반응형
[ATmege128 개요]

 

마이크로 컨트롤러

 

CPU, ROM, RAM과 전류 Fanout을 늘린 I/O 확장용 GPIO제어기가 한 침에 함께 구성되어 주로 단순한 반복 작업을 하기 위한 제품에 장착되는 작은 보드 등을 통한 자동화 장치 등에 사용된다.(GPIO : General perform input / output)
- 임베디드 환경에 적합한 저전력 소모의 칩이며, 내보에 32개의 범용 레지스터가 내장됨.

- 유비쿼터스 및 센서 네트워크를 위한 소형 시스템에 적합

- 유사 RISC아키텍쳐(RISC Like architecture)

  : 유사 아키텍쳐라고 하는 것은 RISC 구조를 따르고 있으나 명령어와 주소 지정 방식의 수가 RISC에 비해 많기 때문.

 

1) 스위치, 센서 등의 입력 장치

    - 키보드 역할

    - 제어 입력 신호를 발생시키는 역할

 

2) LED, LCD, Motor, Relay 등의 출력장치

    - 모니터 역할

    - 제어 신호를 이용하여 시스템을 제어하는 역할

 

특징

- 프로그램을 다운로드하여 저장할 수 있는 2K~128K 바이트의 플래시 메모리 저장

- 내부 EEPROM 용량 : 128~512 바이트까지 가능

- 내부 오실레이터에 의해 동작하는 워치독 타이머와 전 이중방식의 다양한 외부 접속장치 내장

- 다양한 인터럽트 소스와 파워 절약모드 외부 메모리 추가 가능

- 내장 디바이스

   : 타이머/카운터, 직렬 통신장치, 아날로그 비교기,

     외부 데이터 장치, 인터페이스, 입출력포트,

     SPI(Serial Peripheral Interface), 아날로그 디지털 변환기(ADC) 등

 

8bit AVR의 종류

 

1) Tiny(ATiny)

    : 소형 시스템에 적합아며, 외형 핀 8~20개,

      메인 MCU보다 여러 회로를 하나의 소자로 구현한

      보조 역할의 칩으로 사용(리모컨)

2) Mega(ATmega)

    : 대형이고 입/출력 핀의 수가 많은 시스템에 적합하며,

      무선 전화기 및 프린터용 제어기,

      FAX 및 CD-ROM 제어기, 통신장비 등에 응용됨.

3) XMEGA(ATxmega)

    : 일반적인 목적, 용도는 Mega 시리즈와 같음

4) Automotive AVR

    : 자동차와 같은 환경을 위한 환경에 강한 튼튼한 디자인 및 CAN 통신

 

 

개인용 컴퓨터와의 차이

 

- Havard Architecture로 구성되어 있다.

- 프로그램과 데이터가 서로 다른 메모리 영역을 차지하며, 각각의 어드레스, 데이터, 제어 버스가 존재함

- 프로그램 명령과 데이터를 동시에 읽을 수 있으며, 명령어 구조는 RISC(Reduced instruction set computer) 구조를 사용함.

  (RISC : 간단한 명령어들의 집합 체계)

 

 

폰 노이만 vs 하버드

 

Von Neumann arcitecture

 

- 내장 메모리 순차 처리 방식으로 데이터 메모리와 프로그램 메모리가 구분되어 있지 않고

  하나의 버스를 가진 구조때문에 CPU가 명령어와 데이터에 동시에 접속 불가

- 메모리 값을 읽고 쓰는 구조이기 때문에 기억장치에 병목 현상이 발생한다.

 

Havard architecture

 

- 명령용 버스와 데이터 버스를 물리적으로 분할

- CPU가 명령어와 데이터를 동시에 접근 가능

- 처리 속도를 높이려면, 보다 많은 전기 회로가 필요함.

- 두 개의 버스와 메모리를 가지게 되므로 CPU 코어에서 공간을 많이 차지함.

 

구분 Von neumann Havard
목적 CPU는 한 번에 단일 명령어 실행 가능 병렬처리를 위해 메모리 분리
메모리 하나의 메모리 공유 명령어, 데이터 메모리 분리
프로세스 메모리 → FI → 메모리 → DI → 메모리 → FI → Store(메모리)와 같이 순차적으로 수행된다. 명령어 메모리 FI
Store → 데이터 메모리
동시에 명령어와 데이터 처리 가능
장점 공용 메모리 사용으로 상대적 구현 비용이 저렴 파이프 라이닝 기술 사용을 위한 환경 제공
단점 파이프 라이닝 기술 사용 시, 메모리 공유 문제 발생(병목현상) 별도 메모리 사용으로 비용 증가 및 회로구조가 복잡해짐
적용 사례 일반적인 범용 CPU Microchip Technology의 PIC, Atmel AVR, 현재 범용 CPU(Intel 펜티엄 이후)

 

현대의 architecture

: CPU의 외부적으로는 폰 노이만 구조를, 내부적으로는 하버드 구조를 적용하여 속도를 향상시킨 제품도 많다.

기본적으로는 폰 노이만 구조를 기반으로 만들었기 때문에, 병목현상만 일부 해결되었고 메모리속의 프로그램을 순차적으로 실행하는 근본 구조는 변하지 않음.

 


 

[ATmega128의 특징]

 

1) 개선된 RISC구조

- 대부분 단일 클록에서 실행되는 133개의 명령어

- 8비트로 구성된 32개의 범용 작업 레지스터

- 16MHz에서 16MPIS(Milliom Instruction Per Second)

- 2사이클에서 실행되는 내장 곱셈장치

 

2) 프로그램 메모리와 데이터 메모리

- ISP가 지원되는 128Kbyte의 플래시매모리(10,000번의 쓰기/지우기)

- 부트 코드 영역

- 4Kbyte의 EEPROM

- 4Kbyte의 내부 SRAM

- 소프트웨어에 의한 LOCK동작

 

3) JTAG(IEEE standard 1149.1과 호환)

- JTAG를 통한 Boundary Scan 방법

- On chip Debug 지원

- JTAG 인터페이스를 통한 Flash, EEPROM, 퓨즈, Lock 비트 설정

 

4) 내장 입출력 장치

- 별도로 동작하는 프리스케일러와 출력 비교 장치로 구성된 2개의 8bit 타이머/카운터

- 프리스케일러, 출력 비교 장치와 입력 캡처로 구성된 2개의 16bit 타이머/카운터

- 외부 오실레이터에 의한 Real time Counter

- 2개의 8bit PWM 채널

- 2비트에서 16bit까지 조절이 가능한 6개의 PWM채널

- 8채널의 10bit ADC

  : 8개의 싱글 입력 / 7개의 자동 입력 / 1x, 10x, 200x, 이득으로 이루어진 2개의 차동 입력

- 바이트 중심의 TWO-Wired Interface(동기 2선식 통신)

- 2개의 UART(Universal Synchronous & Asynchronous Receiver/Transmitter)

- SPI(Serial Peripheral Interface,  동기 3선식 통신)

- 별도의 오실레이터로 이루어진 Watchdog Timer

- Analog Comparator

- 53개의 범용 입출력 포트

 

5) Power-on Reset

- Brown-out 검출기

- 외부 및 내부 인터럽트 소스

- 6개의 Sleep mode

 


 

[ATmega128의 구조]

 

ATmega128의 핀 구조

 

 

 

 

- 8bit 병렬 입출력이 가능한 7개의 포트(A, B, C, D, E, F, G)

  (port G는 5bit)

- 전원(Vcc, GND)

- 클록(XTAL1, XTAL2)

- 리셋(RESET)

- 프로그램 관련(PEN)

- ADC 관련(AVCC, AREF, AGND)

 

 

 

 

 

ATmega128의 내부 구조

□  : 실질적으로 사용하는 코어

ALU(Arithmetic Logical Unit)

- 산술 연산기

- 산술연산(+, -, *, /), 논리연산(AND, OR,NOT), 비트연산

 

 

1. 상태레지스터(State Register)

 

ALU가 가장 최근에 실행한 산술연산 명령의 결과에 대한 상태를 표시하는 레지스터

상태 bit는 조건부 처리 명령에 의하여 프로그램의 흐름을 변셩하는데 사용

인터럽트를 실행할 때 PUSH되거나 POP되지 않으므로 사용자가 이를 소프트웨어로 처리해야 한다.

(ex : _delay.ms()함수를 쓰면, 해당 시간동안 CPU 멈춤)

 

Bit 7 (I : Global Interrupt Enable)

- 전체 인터럽트 허용

- SEI 및 CLI 명령으로 이 비트를 각각 set 또는 reset 가능

- 인터럽트 처리가 시작되면 이 비트는 자동적으로 클리어되며, 나중에 RETI 명령을 만나면 원래 상태 복구

- 각 인터텁트를 개별적으로 허용하는 것은 인터럽트 마스크 레지스터에 의해 결정

 

Bit 6 (T : Bit copy Storage)

- 비트 복사 명령인 BLD(Bit load) 및 BST(Bit Store) 명령을 사용

- 이 비트를 조작 비트의 출발지 혹은 목적지로 사용

- BST에서는 레지스터의 지정 비트가 T에 들어가고,

  BLD에서는 T의 내용이 레지스터의 지정 비트로 들어감.

- 잘 안 씀

 

BIT 5 (H : Half Carry Flag)

- BCD 연산을 위한 것으로 자리올림(Half-carry)이 발생할 경우 set됨.

- 뺄셈의 경우, 반 빌림수(Half-borrow)가 발생하면 1, 발생 안 하면 0으로 set

 

BIT 4 (S : Sign Bit = N XOR V)

- 음수를 나타내는 N 플래그와 오버플로우가 발생했음을 알리는 V 플래그의 XOR연산 결과가 1이면 set되고 그렇지 않으면 클리어됨.

- 이 bit는 부호없는 정수 및 부호있는 정수들의 크기를 판단할 때 자주 사용

 

Bit 3 :(V : Two;s Complement Overflow Flag)

- 2의 보수 연산에서 자리 올림이 발생했음을 알림

- 이 flag는 BRVS와 BRVC 명령에서 분기조건이 이루어지는 기준으로 사용

 

Bit 2 (N : Negative Flag)

- 산술 연산 및 논리 연산의 결과가 음수일 때 1로 set

  (2의 보수 사용 시에 최상의 비트가 1이 되면)

- 연산 결과가 음수라는 것을 표시

 

Bit 1 (Z : Zero flag)

- 산술 연산 및 논리 연산의 결과가 0이 되면 1로 set

- zero flag는 0이 아닌 1로 set됨(헷갈리지 말 것)

 

Bit 0 (C : Carry Flag)

- 산술 연산의 가산 및 논리연산의 결과 자리올림(carry)이 발생했음을 알림

- 감산에서 이 비트가 자리 내림(borrow)을 표시

 

 

2. 범용 레지스터(General Purpose Resister)

 

AVR ATmega128은 "Register to Register" 구조로 되어 있으며,

RISC를 실현시킨 CPU이므로 누산기(Accumulator)가 없으며 R0~R31까지 32개의 8bit 범용 레지스터를 가지고 있다.

기본적인 사칙연산을 수행할 수 있으며, 즉시 데이터(immediate data)를 사용하는 일부의 연산명령은 R16~R31에서만 수행

 

 

3. X, Y, Z 레지스터(General Purpose Resister)

 

32개의 범용 레지스터 중에서 R26~R31은 각각 2개씩 합해져서 3개의 15bit 레지스터(X, Y, Z)로 사용 가능하며,

이 16bit 레지스터들은 주로 데이터 메모리의 16bit address를 간접 지정하는 Address pointer로 사용한다.

또한 Z레지스터는 LPM, ELPM, SPM 명령에서 프로그램 메모리 영역의 상수를 액세스하는데 사용하기도 한다.

 

 

4. 스택 포인터(Stack Pointer)

 

- 주된 목적으로 서브 루틴 호출이나 인터럽트 발생 시, 다시 돌아올 복귀 주소를 저장하는데 사용

- 이외에 C언어의 지역 변수를 저장, 어셈블리어에서 임시 데이터를 저장하는 용도

- 스택 포인터는 메모리의 상위 번지에서 차례대로 저장

- SPH는 상위 byte, SPL은 하위 byte

- 스택 포인터는 항상 스택의 상단을 가리키는 16bit 레지스터로써, 이는 데이터 저장이 가능한 스택의 번지를 의미한다.

- Push 명령어를 사용하면, 1byte 데이터를 SP가 가리키는 스택메모리 번지에 저장하고 이후 SP값을 1만큼 감소

- Pop 명령어를 사용하면, 먼저 SP값을 1 증가시킨 후에 SP가 가리키는 스택 메모리 번지에서 1byte의 데이터를 꺼냄

 

 

5. 메모리 구조

 

1) 물리적 : 내부 플래시 메모리 / 내부 SRAM / 내부 EEPROM / 외부 SRAM

 

물리적 구조

    - 내부 플래시 메모리

       : 사용자가 작성한 프로그램 자체가 인텔의 HEX 형태로 적재

    - 내부 SRAM

       : 사용자가 작성한 프로그램이 동작할 때, 필요한 여러가지 정보를 동적으로 생성

     - 내부 EEPROM

       : 영구적으로 저장할 필요가 있는 데이터 저장 

    - 외부 SRAM

       : 내부 SRAM만으로는 부족하거나 그 밖의 이유로 확장할 경우 사용

 

 

2) 기능적 : 프로그램 메모리 / 데이터 메모리

 

프로그램 메모리

 

 

 

① 프로그램 메모리

     - 8bit 마이크로 컨트롤러이지만,

       명령어는 8bit가 아닌, 16bit 구조로 되어 있음.

     - 64k × 16bit의 용량을 가짐

     - Instruction이 16bit인 경우,

       하나의 번지를 / 32 bit인 경우, 2개의 번지를 차지함

     - 메모리는 두 부분으로 나뉘는데,

       하나는 부트프로그램영역(부트로더),

       두 번째는 응용프로그램영역

 

 

 

 

 

 

 

 

 

② SRAM 데이터 메모리(내부)

      - 내부 SRAM과 내부 EEPROM으로 나뉨

      - 64byte IO메모리는 IN/OUT 명령어로 접근 가능

      - 확장된 160byte IO 메모리는 ST/STS/STD와

         LD/LDS/LDD 명령어로 접근 가능

      - 10,000번 반복 기입 가능 

 

 

 

 

 

 

 

 

 

   ③ EEPROM 데이터 메모리(내부)

       - 100,000번 반복적으로 기입 가능

 

       <EEARH(EEARL)>

EEARH(EEARL)

           - Bit 15~12 : 예약 비트

           - Bit 11~0 : 내부 EEPROM 4kbyte를 나타내는 address

 

       <EEDR>

EEDR

        - Bit 7~0 : 내부 EEPROM 데이터를 쓰고 읽는 경우에 사용하는 8bit 데이터 레지스터

 

       <EECR>

EECR

           - Bit 3 : EERIE(EEPROM Ready Interrupt Enable)

                       1로 설정되면, EEWE bit가 0이 될 때 EEPROM reaady 인터럽트 발생하는 기능

           - Bit 2 : EEMWE(EEPROM Master Write Enable)

                       EEWE를 1로 설정할 때, EEPROM에 쓰기가 허용 여부 결정

           - Bit 1 : EEWE(EEPROM Write Enable)

                        EEMWE가 1로 설정되면 EEWE가 1로 되고 나서

                        4클록 사이클 이내에 EEDR의 데이터를 EEAR이

                        가리키는 EEPROM의 주소에 쓴다.

                        완료되면, EEMWE는 자동으로 0이 됨

           - Bit 0 : EERE(EEBROM Read Enable)

                       EEPROM의 읽기 스트로브로서 EEAR 레지스터에 적잘한 주소값이

                       부여된 경우, EERE를 1로 해야 EEPROM 읽기 시작 가능

 

 

   ④ IO메모리

 

           - 내장된 각종 I/O 장치를 제어하기 위한 레지스터로 IN/OUT 명령을 사용하여 입출력 장치에 접근

 

레지스터의 메모리 구조 summary

 

Pull-up / Pull-down Resister

 

1. Floating 현상

 

스위치가 연결되지 않은 상태에서, 전류가 흐르는지 안 흐르는지 알 수 없는 상태

즉, 신호가 0(low)과 1(high) 사이의 애매한 위치에 떠 있는 현상

 

디지털 핀을 입력상태로 설정하면, 5V값은 high, 0V값은 low로 인식한다.

그런데 핀 자체의 칩에서는 몇 V인지 인식할 수 없고 입력 단자 주위의 정전기나 noise에 의해 오류가 발생한다.

 

2. 풀업 저항

좌 : 0    /   우 : 1

: 저항을 전원쪽에 붙여주어 플로팅 현상을 해결하는 방법 

그림과 같이 풀업저항에서 스위치가 열린 상태에선 입력 핀으로 전류가 흐르게 되고, 전원 전압과 같은 5V 전압이 걸린다.

∴ 입력 핀에는 high값이 읽이게 됨.

 

3. 풀다운 저항

: GND에 저항을 연결하여 플로팅 현상을 해결하는 방법

스위치가 열린 상태에서는 어디에도 전류가 흐르지 않고, 입력 핀에는 0V의 전압이 걸린다.

스위치가 닫힌 상태에서는 저항으로 인해 전류가 입력 핀 쪽으로 흐르고 5V의 전압이 걸린다.

728x90
반응형