AVR_M4_232 User Guide www.SangSangDom.com
Read This First Preface About This Manual How to Use This Manual This users guide describes the characteristics, operation, and use of the AVR_M4_232 Toolkit board. A complete circuit description as well as schematic diagram is included. How to Use This Manual This document contains the following chapters: Chapter 1 - Introduction and Description Chapter 2 - User Control Chapter 3 – Schematics Chapter 4 – VHDL Code for CPLD Related Documentation From SangSangDom This document contains the following chapters: SangSangDom
Contents SangSangDom 1. Introduction & Description 1.1 Features 1.2 Layout & Dimension 1.3 Functionality 2. User Control 2.1 외부 인터페이스 레지스터 설정 2.2 RS232 Channel Interface 2.3 AVR PORT Interface 2.4 ISP 통신 2.5 Power 3. Schematics 4. 하이퍼터미널 5. C-Code SangSangDom
1. Introduction & Description 1.1 Features AVR_M4_232 사용자의 목적에 따라 serial 통신 기능 제공 한다. 사용자의 임으로 Atmega2560 에 입력된 값을 통하여 1:1, 1:2 1:3, 1:4 통신이 가능하다. 32 x 8Bit의 외부 메모리를 확장 하여 좀더 폭넓은 사용이 가능하다. - 외부메모리 32K x 8 LOW VOLTAGE CMOS STATIC RAM - High-speed access times : 10 ns - 칩이 deselect 일 때 자동으로 power down mode - 3.3V 전압 - Three-state outputs 1.2 Layout <Top> <Bottom> SangSangDom
1.3 Functionality SangSangDom 4 Channel 의 Serial 통신 가능 32K x 8 Bit 외부 메모리 장착 AVR MCU 2 3 Serial channel Channel1 Channel2 Channel3 Channel4 1:1, 1:2 1:3, 1:4 통신 가능 LCON control RCON 확장 Memory 버퍼 32K x 8 bit memory SangSangDom
2. User Control 2.1 외부 인터페이스 레지스터 설정 SangSangDom XMCRA 레지스터 : 외부 데이터 메모리 영역의 액세스 신호들을 유효하도록 하며 메모리 영역을 분할하거나 웨이트 사이클을 설정하는데 사용. XMCRA SRW00 SRW01 SRW10 SRW11 SRL0 SRL1 SRL2 SRE R/W Bit (0x74) Read/Write Initial Value 7 6 5 4 3 2 1 SRE (External SRAM/XMEM Enable) 비트 : AD0~7, A8~15, ALE, WR, RD 등과 같은 외부 데이터 메모리 영역의 엑세스 신호들을 유효하도록 함 SRL0~2 (Wait-state Sector Limit) 비트 : 외부 데이터 메모리 영역을 2개의 섹터로 분할 하여 이들 각 섹터에 별도로 웨이트 사이클을 설정 SRW11~10 (Wait-state Select Bits for Upper Sector) 비트 : 외부 데이터 메모리의 상 위 섹터에 해당하는 웨이트 사이클을 설정 SRW00~01 (Wait-state Select Bits for Upper Sector) 비트 : 외부 데이터 메모리의 하 Lower sector = 0x2200~0xDFFF Upper sector = 0xE000~0xFFFF 1 Lower sector = 0x2200~0xBFFF Upper sector = 0xC000~0xFFFF Lower sector = 0x2200~0x9FFF Upper sector = 0xA000~0xFFFF Lower sector = 0x2200~0x7FFF Upper sector = 0x8000~0xFFFF Lower sector = 0x2200~0x5FFF Upper sector = 0x6000~0xFFFF Lower sector = 0x2200~0x3FFF Upper sector = 0x4000~0xFFFF Lower sector = 없음 Upper sector = 0x2200~0xFFFF Sector Limits SRL0 SRL1 SRL2 SRWn1 SRWn0 웨이트 사이클의 수 0 웨이트 1 Read/Write 신호에 1개의 웨이트 1 Read/Write 신호에 2개의 웨이트 1 1 Read/Write 신호에 2개 + 다음 어드레스 출력 전에 1개의 웨이트 SangSangDom
- 외부 인터페이스 레지스터 설정 예 SangSangDom XMCRB 레지스터 : 버스 키퍼 기능을 설정하고 외부 데이터 메모리 어드레스의 상위 비트 중에서 어디까지 어드레스 기능으로 사용할 것인지를 설정하는데 사용. XMM0 XMM1 XMM2 - XMBK R/W R XMCRB Bit (0x75) Read/Write Initial Value 7 6 5 4 3 2 1 XMBK (External Memory Bus-keeper Enable) 비트 : AD0 ~ AD7 신호가 3-스테이트로 되어야 하는 동안에 이를 이전의 값으로 출력되도록 하는 Bus-Keeper 기능을 설정. XMM0~2 (External Memory High Mask) 비트 : 포트 C와 기능을 겸하고 있는 어드레스 버스의 상위 비트가 어느 부분까지 어드레스 버스 신호로 사용될지를 설정. XMM2 XMM1 XMM0 어드레스 버스 포트 C A8~A15 로 사용 없음 1 A8~A14 로 사용 PC7 로 사용 A8~A13 로 사용 PC6~PC7 로 사용 A8~A12 로 사용 PC5~PC7 로 사용 A8~A11 로 사용 PC4~PC7 로 사용 A8~A10 로 사용 PC3~PC7 로 사용 A8~A9 로 사용 PC2~PC7 로 사용 PC0~PC7 로 사용 - 외부 인터페이스 레지스터 설정 예 7 6 5 4 3 2 1 SRE 1 SRL2 SRL1 SRL0 SRW11 SRW10 SRW01 SRW00 XMCRA XMBK - XMM2 XMM1 XMM0 XMCRA XMCRA 레지스터 (0x83) SRE 비트 : 외부 메모리 Enable SRL0~2 비트 : 외부 데이터 메모리의 섹터 영역 lower sector 와 upper sector 중 upper sector 로만 사용. (upper sector=0x2200~0xFFFF) -SRW00~11 비트 : 외부 메모리의 하의 섹터와 상위 섹터에 해당하는 웨이트 사이클을 사용하지 않음. XMCRB 레지스터 (0x00) XMBK 비트 : Bus-keeper Disable XMM0~2 비트 : Address Bus A8~A15 로 사용 포트로는 사용하지 않음. SangSangDom
2.2 RS232 Channel Interface SangSangDom RS232 Driver를 통하여 외부의 RS232 Terminal과 연결되는 Connector로써 4개의 채널을 동시에 연결하여 사용할 수 있다. Tx0 Rx0 Tx1 Rx1 Tx2 Rx2 Tx3 Rx3 GND Table 1-1 Connector ECH Pinout Pin Number Signal Description CH1 - 1 CH1 TX RS232 채널 1번의 TX 포트 CH1 - 2 CH1 RX RS232 채널 1번의 RX 포트 CH1 - 3 CH1 GND RS232 채널 1번의 GND CH2 - 1 CH1 TX RS232 채널 2번의 TX 포트 CH2 - 2 CH1 RX RS232 채널 2번의 RX 포트 CH2 - 3 CH1 GND RS232 채널 2번의 GND CH3 - 1 CH3 TX RS232 채널 3번의 TX 포트 CH3 - 2 CH3 RX RS232 채널 3번의 RX 포트 CH3 - 3 CH1 GND RS232 채널 3번의 GND CH4 - 1 CH4 TX RS232 채널 4번의 TX 포트 CH4 - 2 CH4 RX RS232 채널 4번의 RX 포트 CH4 - 3 CH4 GND RS232 채널 4번의 GND SangSangDom
2.3 AVR PORT Interface SangSangDom AVR 의 각각의 포트를 사용자가 보다 쉽게 사용할 수 있도록 확장한 외부 핀 이며 LCON과 RCON으로 나뉘어 사용할 수 있다 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 Table 1-2 Connector LCON Pinout Pin Number signal Description 1 VCC Power 1,30 GND Ground 3~7 PH2~PH6 AVR PORTH2~PORTH6 8 PB0 AVR PORTB0 9~12 PB4~PB7 AVR PORTB4~PORTB7 13 PH7 AVR PORTH7 14~15 PG3~PG4 AVR PORTG3~PORTG4 16~23 PL0~PL7 AVR PORTL0~PORTL7 24~25 PD0~PD1 AVR PORTD0~PORTD1 26~29 PD4~PD7 AVR PORTD4~PORTD7 LCON 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 Table 1-3 Connector RCON Pinout Pin Number signal Description 1 PE7 Power 2,30 GND Ground 3~4 PE5~PE6 AVR PORTE5~PORTE6 5~6 PE3~PE4 AVR PORTE3~PORTE4 7 PG5 AVR PORTG5 8 PE2 AVR PORTE2 9, 11, 13, 15 PF1, PF3, PF5, PF7 AVR PORTF1, PORTF3, PORTF5, PORTF7 10, 12, 14, 16 PF0, PF2, PF4, PF6 AVR PORTF0, PORTF2, PORTF4, PORTF6 17, 19, 21, 23 PK1, PK3, PK5, PK7 AVR PORTK1, PORTK3, PORTK5, PORTK7 18, 20, 22, 24 PK0, PK2, PK4, PK6 25, 27, 29 PJ7, PJ5, PJ3 AVR PORTJ7, PORTJ5, PORTJ3 26, 28, 30 PJ6, PJ4, PJ2 AVR PORTJ6, PORTJ4, PORTJ2 RCON SangSangDom
2.4 ISP (In System Programming) 통신 MCU에 Program을 Write 할 수 있는 통신 단자로써 보드의 AVR에 Program을 Write 하여 사용 할 수 있다. 컴파일러를 통해 만들어진 HEX 파일이나 BIN 파일을 [PonyProg2000, ToastProg2005, ISP_PGM v3.0, Codevision 등]을 이용하여 MCU에 Program을 Write 할 수 있다. 보드의 MCU은 AVR2560으로 ToastProg2005 에서 Program을 Write 기능이 제공 되고 있다. Table 1-4 ISP Pinout Pin Number signal Description 1 VCC POWER 2 MISO Master Input/Slave Output 3 MOSI Master Output/Slave Input 4 SCK Serial Clock 5 GND Ground 6 RST Reset 2 4 6 1 3 5 2.5 Power 5V 표준 전압을 사용한다. Table 1-5 Power Pinout Pin Number signal Description 1 VCC POWER 2 GND Ground 1 2 SangSangDom
3. Schematics SangSangDom
SangSangDom
4. 하이퍼터미널 하이퍼터미널을 통하여 각 Channel의 통신을 확인 할 수 있다. 하이퍼터미널은 『시작 -> 프로그램 -> 보조프로그램 -> 통신하이퍼터미널』순으로 실행 할 수 있다. 이름(N)입력은 사용자가 원하는 이름을 입력 하고 첫 번째 아이콘을 선택한 다음 확인을 누르자. 연결에 사용할 모뎀(N)은 PC에 시리얼 포트가 1개 있다면 COM1 2개 있다면 시리얼 캐이블을 연결할 포트에 따라 COM1, COM2를 맞추어 선택 하면 된다. SangSangDom
포트 설정은 비트/초, 데이터 비트(D)패리티(P), 정지 비트(S), 흐름 제어(F)등 그림과 같이 설정 하면 된다. 모든 설정이 완료하면 다음과 같은 실행 화면이 나온다. 이 상태에서 키보드를 누르면 눌려진 Key 값에 따른 ASCII 코드값이 시리얼 포트를 통하여 PC 밖으로 송신 된다. 그리고 시리얼 포트를 통하여 입력된 데이터는 창에 표시된다. 그림 시리얼 통신을 통하여 a문자를 10번 수신한 결과이다. SangSangDom
5. C-Code 하이퍼터미널을 통하여 얻은 결과는 다음 C-Code로 확인 할 있으며, Channel1~Channel4 까지 모두 통신이 가능하다. -Serial_Test.c #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> ////////////////16MHz 클럭을 사용할때 보레이트///////////////////// // 2400, 2800, 9600, 14.4k, 19.2k, 28.8k, 38.4k, 57.6k, 76.8k, 115.2k, 230.4k, 250k, 500k, 1M, 2M // unsigned int baudrate[15]={ 832, 416, 207, 138, 103, 68, 51, 34, 25, 16, 8, 7, 3, 1, 0 }; unsigned char rx_data_flag0,rx_data_flag1,rx_data_flag2,rx_data_flag3; unsigned char temp0[4], temp1, temp2, temp3, CMD; unsigned char count; // received the number of data from PC void delay(unsigned int dcnt) { while(dcnt--); } void init_system(void) DDRE = 0xFE; //fnd_select serial0 PORTE = 0xFE; DDRH = 0xFE; //fnd_select serial2 PORTH = 0xFE; DDRD = 0xF0; //fnd_select serial1 PORTD = 0xFE; DDRJ = 0xFE; //fnd_select serial3 PORTJ = 0xFE; void AVR_init(void) UBRR0 = 16; // Baudrate 115.2k byte/sec UCSR0A = 0x02; // Asynchronous normal mode, double baudrate UCSR0B = 0x98; // 0x98 rx interrupt enable, 8 data, tx 0xD8, tx_empty 0xF8 UCSR0C = 0x06; // no parity, 1 stop, 8 data temp0[0] = UDR0; // dummy read void GM1_init(void) UBRR1 = 16; // Baudrate 115.2k byte/sec UCSR1A = 0x02; // Asynchronous normal mode, double baudrate UCSR1B = 0x98; // 0x98 rx interrupt enable, 8 data, tx 0xD8, tx_empty 0xF8 UCSR1C = 0x06; // no parity, 1 stop, 8 data temp1 = UDR1; // dummy read SangSangDom
SangSangDom void GM2_init(void) { UBRR2 = 16; // Baudrate 115.2k byte/sec UCSR2A = 0x02; // Asynchronous normal mode, double baudrate UCSR2B = 0x98; // 0x98 rx interrupt enable, 8 data, tx 0xD8, tx_empty 0xF8 UCSR2C = 0x06; // no parity, 1 stop, 8 data temp2 = UDR2; // dummy read } void Serial_Test(void) UBRR3 = 16; // Baudrate 115.2k byte/sec UCSR3A = 0x02; // Asynchronous normal mode, double baudrate UCSR3B = 0x98; // 0x98 rx interrupt enable, 8 data, tx 0xD8, tx_empty 0xF8 UCSR3C = 0x06; // no parity, 1 stop, 8 data temp3 = UDR3; // dummy read SIGNAL(SIG_USART0_RECV) // PC CMD = UDR0; rx_data_flag0 = 1; SIGNAL(SIG_USART1_RECV) temp1 = UDR1; rx_data_flag1 = 1; SIGNAL(SIG_USART2_RECV) temp2 = UDR2; rx_data_flag2 = 1; SIGNAL(SIG_USART3_RECV) temp3 = UDR3; rx_data_flag3 = 1; void serial_tx0(unsigned char tx_data0) while((UCSR0A&0x20) == 0x00); UDR0 = tx_data0; void serial_tx1(unsigned char tx_data1) while((UCSR1A&0x20) == 0x00); UDR1 = tx_data1; SangSangDom
SangSangDom void serial_tx2(unsigned char tx_data2) { while((UCSR2A&0x20) == 0x00); UDR2 = tx_data2; } void serial_tx3(unsigned char tx_data3) while((UCSR3A&0x20) == 0x00); UDR3 = tx_data3; int main(void) // I/O Port Init init_system(); // Seriasl Init AVR_init(); GM1_init(); GM2_init(); Serial_Test(); rx_data_flag0=0; rx_data_flag1=0; rx_data_flag2=0; rx_data_flag3=0; sei(); while(1) if(rx_data_flag0 == 1) //PC -> SYSTEM serial_tx0(CMD); rx_data_flag0 = 0; if(rx_data_flag1 == 1) serial_tx1(temp1); rx_data_flag1 = 0; if(rx_data_flag2 == 1) serial_tx2(temp2); rx_data_flag2 = 0; if(rx_data_flag3 == 1) serial_tx3(temp3); rx_data_flag3 = 0; return 0; SangSangDom
6. Tip SangSangDom -외부메모리 Write/Read unsigned char *xram = (unsigned char*)(0x2200); // 초기 주소 값 설정 하기 void main() { XMCRA = 0x83; //외부 메모리 섹터와 웨이트 사이클 설정 XMCRB = 0x00; //외부 메모리 Bus keeper disable, A8~A15 포트 설정 DDRA = 0xFF; //A 포트 사용 DDRC = 0xFF; //C 포트 사용 RAM_Write(); RAM_Read(); } void RAM_Write() //2200 번지 부터 0x30값을 1씩 증하 하면서 2210 번지까지 쓰기 unsigned int j; unsigned char data; for(j=0; j<10; j++) data = 0x30+j; *(xram+j) = data; void RAM_Read() //써온 데이터를 읽기 unsigned int i; for(i=0; i<10; i++) data = *(xram+i); SangSangDom