실험(4) 예비 보고서●10장 외부 메모리 인터페이스소속 : 홍익대학교 전자전기공학부수업 : 금요일 교시 조학번 : B 이름 : 김담당교수님 : 유 교수님담당조교님 : 박 조교님제출일자 : 2015년 월 일 요일▣실습14 : TEXT LCD에 글자쓰기1) 실습개요- ATMega128의 GPIO에 TEXT LCD를 연결하고, LCD 화면에 미리 작성된 문장("Hello! MCU World !!")을 표시- AVR 개발 환경에서 제공하는 TEXT-LCD 관련 함수를 이해하면 쉽게 프로그램을 작성할 수 있음.2) 실습 목표- TEXT LCD의 동작 원리 이해- AVR 개발환경에서 제공하는 TEXT-LCD 관련 함수 이해- TEXT LCD 제어 프로그램 방법 습득3) 사용 모듈 : MCU 모듈, TEXT-LCD 모듈TEXT LCD 모듈 회로4) 사전지식- AVR 개발 환경에서 TEXT LCD 관련 라이브러리 함수를 제공lcd.c 와 avr_lib.c 라는 파일에 포함AVR Studio에서 이미지를 Build할 때 이 lcd.c파일과 avr_lib.c 파일을 함께 포함시켜야 함.- TEXT LCD용 라이브러리 함수lcdInit : TEXT LCD 초기화lcdGotoXY(unsigned char x, unsigned char y): TEXT LCD의 커서를 원하는 위치로 이동.lcdDataWrite( unsigned char data ): TEXT LCD에 하나의 문자 출력lcdPrintData(char* data, unsigned char nBytes) : TEXT LCD에 nBytes 길이의 문자열을 출력lcdClear() : TEXT LCD의 화면을 지움.4) 소스코드 분석소스코드소스코드 해석#include#include"lcd.h“int main(){lcdInit();lcdGotoXY(0,0);lcdDataWrite('H');lcdDataWrite('e');lcdDataWrite('l');lcdDataWrite('l');lcdDataWrite('o');lcdGotoXY(3,1);lcdPrintData("MCU World !!",12);return 0;}AVR 입출력에 대한 헤더 파일과 인터럽트를 사용하기 위한 헤더파일과 그 외 헤더파일을 선언한다.‘H' 출력‘e' 출력‘l' 출력‘l’출력‘0’출력현재 커서위치를 (3,1) 위치로 이동▣실습15 : 외부메모리 I/F에 SRAM 붙이기1) 실습개요- ATmega128의 외부 메모리 인터페이스를 이용하여 SRAM을 제어하는 방법을 실습- 외부 메모리 인터페이스에 SRAM과 TEXT LCD를 연결- UART포트를 이용하여 PC와 통신 연결- PC에서 입력하는 문자열을 SRAM에 한문자씩 차례로 저장하였다가, 한번에 꺼내서 TEXT LCD에 출력2) 실습 목표- ATmega128 외부 메모리 인터페이스 동작 원리 이해 (레지스터 설정)- SRAM 동작 원리 이해- SRAM의 제어 방법 습득3) 사용 모듈 : MCU 모듈, 메모리 모듈, TEXT-LCD 모듈, UART 모듈메모리 모듈의 SRAM부 회로4) 사전지식①외부 메모리를 사용을 위한 제어 레지스터 설정ⅰ외부 메모리 Enable→ MCUCR 레지스터의 SRE 비트를 ‘1’로 세팅ⅱ메모리의 영역 분할 및 대기 사이클을 설정→ XMCRA의 SRL(2:0) 비트를 설정하여 메모리의 섹터를 나눌 것인지, 아닌지를 결정→ 상위(Upper)와 하위(Lower) 메모리 섹터들에 대한 대기 사이클(Wait-State)를 설정→ 여기서는 메모리 영역을 0x1100~0x7FFF까지의 하위 섹터와 0x8000~0xFFF F까지의 상위 섹터로 나누어 사용→ 각 메모리 섹터의 대기 사이클은 0ⅲ메모리를 위해 어느 정도의 핀을 할당할 것인지를 결정→ XMCRB 레지스터의 XMBK 비트를 세팅하여 BUS-Keeper를 사용할 것인지 아닌지를 결정→ 여기서는 BUS-Keeper는 사용하지 않고, 메모리는 60KByte 전체 영역을 사용→ 따라서, C 포트의 모든 핀들은 외부 메모리(SRAM)에 할당→외부 메모리의 주소영역 : 0x1100~0XFFFF②외부 메모리(여기서는 SRAM)을 액세스하는 방법ⅰ포인터 변수를 이용하여 접근ⅱ외부 메모리의 주소영역이 0x1100~0XFFFFⅲ메모리 읽기→ A = *(volatile unsigned char *)0x1100;ⅳ메모리 쓰기→ *(volatile unsigned char *)0x1100 = 0xAA;ⅴvolatile : 컴파일러가 최적화 과정에 해당 메모리의 영역을 제거해 버리는 것을 막기 위해 사용4) 소스코드 분석소스코드소스코드 해석#ifdef LCD_PORT_INTERFACE#ifndef LCD_CTRL_PORT#define LCD_CTRL_PORT PORTB#define LCD_CTRL_DDR DDRB#define LCD_CTRL_RS 0#define LCD_CTRL_RW 1#define LCD_CTRL_E 2#endif#ifndef LCD_DATA_POUT#define LCD_DATA_POUT PORTD#define LCD_DATA_PIN PIND#define LCD_DATA_DDR DDRD#endif#endif#include#include#include"lcd.h“#define read_XRAM(address) (*(volatile unsigned char *)(0x1100+address))#define write_XRAM(address,value) ((*(volatile unsigned char *)(0x1100+address))=value)void putch(unsigned char data){while((UCSR0A & 0x20) == 0);UDR0 = data;UCSR0A |= 0x20;}UCSR0A 레지스터 중에서 5번째 비트(UDREn)를 세트하여 UDRE0를 클리어 함.소스코드소스코드 해석unsigned char getch(){unsigned char data;while((UCSR0A & 0x80) == 0);data = UDR0;UCSR0A |= 0x80;return data;}int main(){unsigned char i=0,j=0;unsigned char line1,line2;unsigned char Tmp=0;unsigned char text[]="nr**************************************""nr EXT-SRAM TEST Program ! ""nr TextLCD에 출력할 데이터를 입력 하세요nr"" (종료 : Enter키, 32바이트 이내)nr"" **************************************nr >> ";MCUCR |= 0x80;XMCRA |= 0x40;XMCRB = 0x00;DDRE = 0xfe;UCSR0A = 0x00;UCSR0B = 0x18;UCSR0C = 0x06;UBRR0H = 0x00;UBRR0L = 0x03;lcdInit();UCSR0A 레지스터 중에서 7번째 비트를 세트하여 RXC0를 클리어 함.외부 메모리 enablelower sector = 0x1100 - 0x7fff ,Upper sector = 0x8000 - 0xffffRx(입력 0), Tx (출력, 1)Rx, Tx enable비동기 방식, No Parity bit, 1 Stop bit7.3728 MHz -> 115200 bpsUBRRnH/L레지스터는 16비트 중에서 12비트만 사용하여 USARTn모듈의 송수신 속도를 설정TextLCD 초기화소스코드소스코드 해석while(text[j]!='