ATmega128A의 메모리 구조(I/O 레지스터) 헤더파일 생성 및 #if

 

#1. ATmega128A 메모리의 구조

 

학습목표 - ATmega128A의 구조와 폰노이만/하버드 구조에 대해 안다.

 

ATmega128A 데이터시트의 7. Memories를 살펴 본다.

 

//ARM은 레지스터의 메모리가 주소가 나와 있지 않다. 레지스터의 개수가 크기 때문이다. 때문에 메뉴얼에 적힌 기본 주소를 보고 주소를 유추하여 사용하여야 한다.

 

<ATmega256A 메모리맵>

 

$1100번지 이후는 외부메모리를 장착하여 사용하여야 한다.

ATmega는 확장메모리가 설치 되어 있는지 알 수 없기 때문에 확장 SRAM 없이 확장영역의 주소를 입력하여도 에러가 나지 않는다.

Flash메모리에 firmware가 설치되는데 flash메모리는 128kbyte를 넘어갈 수 없기 때문에 펌웨어의 용량이 커져 버리면 해당 펌웨어를 사용할 수 없다.

 

//Compile을 거치면 해당 CPU가 인지 할 수 있는 기계어로 변경된다.

 

 

이전 주소는 CPU이지만 주소 값을 가짐으로 메모리 맵에 표시해 준 것이다.

 

실제 메모리의 주소는 $100번지부터이다.

 

CPUALU가 들어있지 않고 따로 분리 되어 2개의 버스로 명령어를 처리하는 구조를 하버드 구조(Harvard Architecture)라고 한다. I/O mapped Memory 방식을 가지고 있다.

 

CPU안에 ALU가 들어있는 구조를 폰 노이먼 구조라고 하고 이것은 I/O mapped I/O 방식이다.

 

폰 노이만 구조에서는 RAM에 실행파일과 논리연산 명령이 동시에 있을 경우 병목 현상이 생기게 된다. 이를 해결하기 위해 등장한 것이 하버드 구조이지만 하버드 구조는 BUS가 폰노이만 구조의 2배가 들고 이에 따라 제어를 위한 부가적인 장치 및 소프트웨어가 필요하기 때문에 성능은 하버드 구조가 좋지만 비용 면에서는 떨어진다.

 

#2. 메모리 맵과 I/O레지스터 작동 원리

 

학습목표 - 메모리 맵과 I/O레지스터 작동 원리를 이해한다.

 

메모리의 5대 영역.

 

1. Code(함수, 상수)

2. Data

3. BSS

4. Heap // 운영체제가 있어야만 만들어지는 메모리 영역이다.

5. Stack(지역 변수)

 

//주소가 위의 순서대로 이루어지지는 않는다.

 

 

데이터 시트의 메모리로 다시!

 

GPR(General Purpose Register)은 기억을 담당하는 레지스터이다.

 

I/O 레지스터는 $0x20부터 - $0xFF까지이다. (자세한 I/O내용은 register summary에 나와있다.)

 

//PIN - Port In

//DDR - Data Direction Register, Data(0V or 5V)

 

 

 

#3. 회로입출력을 위한 C코딩

 

학습목표 - 입출력 제어를 위한 C언어를 작성하고 이해할 수 있다.

 

 

위에 회로에 입출력 값을 제어하기 위한 C코딩.

 

PORTA에 전압을 인가한다는 상황에서,

 

0x3A = 0x01;

 

왼쪽 주소를 compiler는 상수 주소로 인식하게 하게 위해

 

1. casting: (unsigned char *)0x0A = 0x01;

2. 포인터 사용: *((unsigned char *)0x0A) = 0x01;

3. 최적화 차단: *((volatile unsigned char *)0x0A) = 0x01;

 

//volatile 최적화를 위해 값을 바로 집어넣지 않고 GPR에서 가지고 있다가 후에 입력할 수 있기 때문에 최적화 없이 바로 집기 위한 선언!

 

4. 복잡한 명령어를 단축: #define DDRA (*((volatile unsigned char *)0x0A))

DDRA = 0x01;

 

//단축명령어는 만인이 알아 볼 수 있는 이름으로 해 주는 것이 세계평화에 좋다.

 

//PORT1을 입력하면(5V) 전원을 인가하면 양쪽에서 5V가 인가되어 전류가 흐르지 않게 된다.

#4. 헤더파일의 적용 및 #if #end

 

학습목표 - 헤더파일을 작성하여 삽입할 수 있다. #if #end문을 사용할 수 있다.

 

헤더파일을 만들어 보자!

p/566 26-3 조건부 컴파일(Conditional Compilation)을 위한 매크로

 

전처리 문에서도 if를 쓸 수 있다.

 

#if는 반드시 #endif와 한 쌍으로 사용되어야 한다.

 

if문을 사용하여 참이면 코드를 포함 거짓이면 코드를 포함하지 않는다.

 

 

예제 p/567을 컴파일하여(cl /P) *.i 파일을 생성한 후 열람하여 어떻게 전처리언어가 처리되었는지 확인해 보자.

 

#if #else 문도 삽입 가능하다! 또한 if문에서 참 거짓 뿐만 아니라 특정 조건도 지정 가능하다.

 

else if 문을 줄여서 #elif를 쓴다.

 



반응형
Posted by newind2000
Busan IT/디지털 제어2015. 3. 5. 13:30

디지털 제어 - 디지털 논리 회로

 

#1. 디지털 논리회로

 

학습목표 - OR/AND 회로에 대해 이해한다.

 

디지털하면 이진법! 01로 신호화.

 

디지털 신호는 표본화 양자화 부호화 과정을 거쳐서 완성된다.

 

아날로그 신호는 연속 디지털 신호는 비연속이다.

 

MP3의 소리 출력을 예로 들어 디지털 신호에 대해 살펴보자.

 

인간의 가청 주파수인 20 - 20kH를 추출하여 진동수를 조절하여 소리의 세기, 높이, 음색을 조절할 수 있다.

 

<소리의 3요소>

논리회로에서 AND회로는 곱셉이라고 생각하고 OR회로는 +라고 생각하면 된다.

이 때 01이상의 숫자로 구분하여 1이상일 때는 작동 0일 때는 비작동이다.

 

논리회로에서 왼쪽은 입력 오른쪽은 출력이라고 가정한다.

<논리회로의 기호>

 

AND/OR 작동 원리를 실습해 보자.

 

AND 회로는 74XX08시리즈, OR 회로는 74XX32시리즈.

 

ex) MC74HC32AN 회사 OR gate

 

<MC74HC32AN 핀과 논리 설명>

 

! 핀의 번호는 시계반대 방향으로 1 - 14번까지

 

 

#2 - 3. 디지털 논리 회로의 실습

 

MC74HC32AN 데이터시트를 보고 논리회로를 파악한다.

 

// 5volt LED에 바로 전압을 인가하면 LED가 타버린다. 저항을 넣어야 한다.

 

각 논리 값을

 

0 0

1 0

0 1

1 1

 

로 설정하고 출력 값을 확인해보자.

 

 

<브레드보드 선 연결 회로>

 

#4. 논리회로와 pull-up/pull-down

 

Floating을 방지하기 위해 pull-up 또는 pull-down을 사용해 보자.


 

 

반응형
Posted by newind2000