ํฌ์ŠคํŠธ

๐ŸŒ‘ ๋งˆ์ดํฌ๋กœํ”„๋กœ์„ธ์„œ ๊ณผ๋ชฉ

๐Ÿ’ซ ๋งˆ์ดํฌ๋กœํ”„๋กœ์„ธ์„œ


Micro-Processor (์ž‘์€-์—ฐ์‚ฐ์žฅ์น˜)
ํ”„๋กœ์„ธ์„œ(CPU, GPU, โ€ฆ ์ผ๋ฐ˜์ ์œผ๋กœ CPU)์˜ ๊ธฐ๋Šฅ์„ ํ•œ ๊ฐœ ~ ๋ช‡ ๊ฐœ ์ด๋‚ด์˜ ์นฉ์œผ๋กœ ์ง‘์•ฝํ•œ ์ฒ˜๋ฆฌ๊ธฐ

๋ฉ”๋ชจ๋ฆฌ์™€ ์ฃผ๋ณ€ ์žฅ์น˜์™€์˜ ์™ธ๋ถ€ ์—ฐ๊ฒฐ์„ ์œ„ํ•œ ํ•€์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ : ์–ด๋“œ๋ ˆ์Šค ๋ฒ„์Šค, ๋ฐ์ดํ„ฐ ๋ฒ„์Šค, โ€ฆ
์ฃผ๋ณ€ ์žฅ์น˜ : ์ „์› ๊ณต๊ธ‰, ๋ฐœ์ง„๊ธฐ, โ€ฆ

๋ฐ์ดํ„ฐ ๋ฒ„์Šค ํฌ๊ธฐ, ์–ด๋“œ๋ ˆ์Šค ๋ฒ„์Šค ํฌ๊ธฐ, ์—ฐ์‚ฐ ๋ ˆ์ง€์Šคํ„ฐ ํฌ๊ธฐ, ๋ฒ”์šฉ ๋ ˆ์ง€์Šคํ„ฐ ์ˆ˜, ํด๋ก ์Šคํ”ผ๋“œ ๋“ฑ์œผ๋กœ ์„ฑ๋Šฅ์ด๋‚˜ ๊ทœ๋ชจ๊ฐ€ ๋ถ„๋ฅ˜๋œ๋‹ค.

๊ฐ•์˜์—์„œ๋Š” AVR2560์„ ๋‹ค๋ฃธ
AVR - Alf-Egil Bogen, Vergard Wollen, RISC

๐Ÿ’ซ ๋ฒ”์šฉ ์ž…/์ถœ๋ ฅ ํฌํŠธ ๋ ˆ์ง€์Šคํ„ฐ - General Purpose IO Port Register


๋ ˆ์ง€์Šคํ„ฐ๋Š” ๋ฐ”์ดํŠธ ๋‹จ์œ„, ๊ธฐ๋Šฅ์€ ๋น„ํŠธ ๋‹จ์œ„
AVR MCU ๋ชจ๋“  ๋ ˆ์ง€์Šคํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์•ฑ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋ฐฉ์‹ ์ ‘๊ทผ ๊ฐ€๋Šฅ, ์ผ๋ถ€๋Š” ๊ฒฉ๋ฆฌ ์ฝ๊ธฐ/์“ฐ๊ธฐ ์ ‘๊ทผ ๊ฐ€๋Šฅ

DDR : ๋ฐ์ดํ„ฐ ๋ฐฉํ–ฅ ์ง€์ • ๋ ˆ์ง€์Šคํ„ฐ
โ†’ ๊ฐ ํ•€์— ๋Œ€ํ•ด, ์ž…๋ ฅ(0)์œผ๋กœ ์“ธ์ง€ ์ถœ๋ ฅ(1)์œผ๋กœ ์“ธ์ง€ ์„ค์ •
โ†’ i.e. DDR == 0x01, 1ํ•€ ์ถœ๋ ฅ + 7ํ•€ ์ž…๋ ฅ

PORT : ์ถœ๋ ฅ ์šฉ์œผ๋กœ ์„ค์ •๋œ ํ•€์— ๋Œ€ํ•ด, ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๋Š”/์ž…๋ ฅํ•˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ
PIN : ์ž…๋ ฅ ์šฉ์œผ๋กœ ์„ค์ •๋œ ํ•€์— ๋Œ€ํ•ด, ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š”/์ถœ๋ ฅํ•˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ

  • ์ž…/์ถœ๋ ฅ ๋ ˆ์ง€์Šคํ„ฐ
    • A ~ L 11๊ฐœ (I ์ œ์™ธ)
    • PIN ์ˆ˜ : 11 * 8 = 88
    • ๊ฐ๊ฐ DDRA, PORTA, PINA ๋ช…์นญ
      • <avr/io.h> ์— ์ •์˜
  • ์—ฐ์‚ฐ
    • PORTF = 0xff : ๋ชจ๋‘ ์ถœ๋ ฅ์œผ๋กœ ์„ค์ •
    • PORTF = PORTF0x01 : ์ฒซ ํ•€๋งŒ ์ถœ๋ ฅ์œผ๋กœ ์„ค์ •, ๋‚˜๋จธ์ง€ ๊ธฐ์กด ๊ทธ๋Œ€๋กœ
    • PORTF = PROTF & 0xfe : ์ฒซ ํ•€๋งŒ ์ž…๋ ฅ์œผ๋กœ ์„ค์ •, ๋‚˜๋จธ์ง€ ๊ธฐ์กด ๊ทธ๋Œ€๋กœ
    • v = PINF & 0x01 : ๋งจ ์ฒซ ํ•€์˜ ์ž…๋ ฅ๊ฐ’๋งŒ ํ•„ํ„ฐ๋ง

๐Ÿ’ซ ํŠน์ˆ˜ ๊ธฐ๋Šฅ ๋ ˆ์ง€์Šคํ„ฐ - SFR - Special Function Register


๋ฒ”์šฉ ๋ ˆ์ง€์Šคํ„ฐ, ๋ฒ”์šฉ ์ž…/์ถœ๋ ฅ ๋ ˆ์ง€์Šคํ„ฐ โ†’ ๋ฐ์ดํ„ฐ ๋ณด๊ด€/์ „๋‹ฌ
ํŠน์ˆ˜ ๊ธฐ๋Šฅ ๋ ˆ์ง€์Šคํ„ฐ โ†’ ์„ค์ • : MCU ์ฃผ์š” ์žฅ์น˜๋“ค์˜ ๋™์ž‘ ๋ฐฉ์‹, ์ฃผ์š” ๋ถ€์šฐ์˜ ๊ตฌ์„ฑ ์š”์†Œ ํ˜•ํƒœ ์กฐ์ •

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ๋ ˆ์ง€์Šคํ„ฐ๋Š” ๋ฐ”์ดํŠธ ๋‹จ์œ„, ๊ธฐ๋Šฅ์€ ๋น„ํŠธ ๋‹จ์œ„
๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, AVR MCU ๋ชจ๋“  ๋ ˆ์ง€์Šคํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์•ฑ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋ฐฉ์‹ ์ ‘๊ทผ ๊ฐ€๋Šฅ, ์ผ๋ถ€๋Š” ๊ฒฉ๋ฆฌ ์ฝ๊ธฐ/์“ฐ๊ธฐ ์ ‘๊ทผ ๊ฐ€๋Šฅ

USART - Universal Synchronous and Asynchronous serial Receiver & transmitter
UDRn : USART Data Register

๐Ÿ’ซ 2์ฐจ์‹œ


7372800

๋ฒ”์šฉ ์ž…์ถœ๋ ฅ ํฌํŠธ

#include <avr/io.h>
์— ๋ฉ”๋ชจ๋ฆฌ ๋งต ๋Œ€์‘์ด ๋˜์–ด์ž‡๋‹ค

Like
โ†’ #define PORTE #(unsigned char)0x180

๋ ˆ์ง€์Šคํ„ฐ 3๊ฐœ
PORTL ์ด ์ค‘์‹ฌ?

PORTL ์ถœ๋ ฅ
PINL ์ž…๋ ฅ

DDRL = RORTL์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ ์ฃผ์†Œ?
๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ• ์ง€ ์ถœ๋ ฅํ• ์ง€ ์—ฌ๋ถ€ ๊ฒฐ์ •
Direction Register

DDRL = 0xff // 1 ์ถœ๋ ฅ
DDRL = 0x00 // 0 ์ž…๋ ฅ

GPIU?

@ 25p

๐Ÿ’ซ 3์ฐจ์‹œ


๐Ÿซง USART

Universal Synchronous and Asynchronous serial Receiver and Transmitter
Synchronous ๋ณด๋‹ค ์ฃผ๋กœ Asynchronous๋ฅผ ์”€

๐Ÿซง UDRn

USART Data register of the nth device

ํ•˜๋‚˜์˜ 8๋น„ํŠธ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ I/O์šฉ์œผ๋กœ ๊ณต์œ 
UDR0 = x;
x = UDR0;
I/O ๋™์ž‘์— ๋”ฐ๋ผ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ธ์‹
I/O ๋™์ž‘์„ ์œ„ํ•ด์„œ๋Š” ์žฅ์น˜(๋””๋ฐ”์ด์Šค) ์ดˆ๊ธฐํ™”๊ฐ€ ํ•„์š”

์ƒ๋Œ€๋ฐฉ์—์„œ ๋ณด๋‚ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜์—ˆ๋‹ค๊ฐ€ ์ฝ์€ ์ˆœ๊ฐ„ ์†Œ๋ฉธ
๋ณด๋‚ผ ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๋Š” ์ˆœ๊ฐ„ ์ „์†ก์ด ์‹œ์ž‘๋จ

๐Ÿซง UBRRnL, UBRRnH

USART Baud Rate Registers of the nth device
16๋น„ํŠธ ํ†ต์‹  ์†๋„ bps bit per second ์กฐ์ •

UBRRnL Low๋ฐ”์ดํŠธ
UBRRnH High๋ฐ”์ดํŠธ

UCSRnA
USART Control and Status Register A of the nth device
Bit 1 : U2Xn(Double the Transmission Speed of the nth device)
์„ค์ •๋œ ํ†ต์‹  ์†๋„์˜ 2๋ฐฐ ์†ก์ˆ˜์‹  ์—ฌ๋ถ€

UCSRnB
USART Control and Status Register B of the nth device
Bit 3 : TXENn(Transmitter Enable of the nth device)
์†ก์‹  ๊ธฐ๋Šฅ ํ™œ์„ฑํ™” ์—ฌ๋ถ€

๐Ÿซง ๋น„ํŠธ ์—ฐ์‚ฐ ๋งคํฌ๋กœ (bit on/off)

sbi(byte b, int n) : Set Bit
8๋น„ํŠธ ๋ณ€์ˆ˜ ๋ ˆ์ง€์Šคํ„ฐ b์˜ n๋ฒˆ ๋น„ํŠธ๋ฅผ 1๋กœ ๋ณ€๊ฒฝ (on)
I.E. sbi(UCSR0A, U2X0) : UCSR0A ๋ ˆ์ง€์Šคํ„ฐ์˜ U2XN(==1)๋ฒˆ ๋น„ํŠธ๋ฅผ 1๋กœ ๋ณ€๊ฒฝ

cbi(byte b, int n) : Clear Bit
8๋น„ํŠธ ๋ณ€์ˆ˜ ๋ ˆ์ง€์Šคํ„ฐ b์˜ n๋ฒˆ ๋น„ํŠธ๋ฅผ 0์œผ๋กœ ๋ณ€๊ฒฝ (off)
I.E. cbi(UCSR0B, TXEN0) : UCSR0B ๋ ˆ์ง€์Šคํ„ฐ์˜ TXEN0(==3)๋ฒˆ ๋น„ํŠธ๋ฅผ 0์œผ๋กœ ๋ณ€๊ฒฝ

@ ๋น„ํŠธ ๋ฒˆํ˜ธ๋Š” avr/io.h ์— ๋‹ค ์ •์˜๋˜์–ด ์žˆ์Œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <avr/io.h>
#include <compat/deprecated.h>

void uart_init()
{
	// 115.2Kbps
	UBRR0H = 0x00;
	UBRR0L = 0x07;

	// ํ†ต์‹  ์†๋„ 2๋ฐฐ
	sbi(UCSR0A, U2X0);

	// TX enable (Transmitter Enable, ์†ก์‹  ๊ธฐ๋Šฅ ํ™œ์„ฑํ™”)
	sbi(UCSR0B, TXEN0);
}

void uart_putchar(char ch)
{
	if (ch == '\n')
		uart_putchar('\r');

	UDR0 = ch;
}

USART, ์‹œ๋ฆฌ์–ผํ†ต์‹ 

@ ์ œ์–ด๋ฌธ์ž


ํ•จ์ˆ˜ ์„ ์–ธ(์—ฐ๊ฒฐ)์€ ํ—ค๋” ํŒŒ์ผ์„ ์ด์šฉํ•จ.
์†Œ์Šค ์ฝ”๋“œ๋Š” ๊ฐ€๊ธ‰์  ๊ธฐ๋Šฅ(ํ•จ์ˆ˜) ๋‹จ์œ„๋กœ ์ž‘๊ฒŒ ๋‚˜๋ˆ„๊ณ , ํŒŒ์ผ๋ช…์— ๊ธฐ๋Šฅ์˜ ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌํ•จ.
๋…๋ฆฝ๋œ ํŒŒ์ผ๊ฐ„์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ํ•จ์ˆ˜ ์„ ์–ธ์— ์œ ์˜ํ•ด์•ผ ํ•จ.

์ž„๋ฒ ๋””๋“œ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰์€ ์–ด๋–ค ๊ฒฝ์šฐ์—๋„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์„œ๋Š” ์•ˆ๋จ.

1
2
3
4
5
int main()
{
	while(1) ; // must not return
	return 0;
}

๐Ÿ’ซ _


@ U ์ค‘๊ฐ„๊ณ ์‚ฌ ์ถœ์ œ : ์ƒ์ˆ˜์„ ํŒŒ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ณ , ๊ทธ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์„ ์ ์œผ์‹œ์˜ค.
@ U ์ค‘๊ฐ„๊ณ ์‚ฌ ์ถœ์ œ : โ€˜DDRA, PORTA ~โ€™ ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ์•„๋Š”๋Œ€๋กœ ์ ์œผ์‹œ์˜ค.
@ U ์ค‘๊ฐ„๊ณ ์‚ฌ ์ถœ์ œ : โ€˜uart_initโ€™ ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ์•„๋Š”๋Œ€๋กœ ์ ์œผ์‹œ์˜ค.
@ U ์ค‘๊ฐ„๊ณ ์‚ฌ ์ถœ์ œ : ์ฝ”๋“œ ๋นˆ์นธ์„ ์™„์„ฑํ•˜์‹œ์˜ค, ํ”„๋กœ๊ทธ๋žจ์„ ์™„์„ฑํ•˜์‹œ์˜ค, Strtok

@ U ๊ธฐ๋ง๊ณ ์‚ฌ ์˜ˆ์ƒ : ๋™์  ์›น ํŽ˜์ด์ง€ Dynamic Web Page, ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ํ…์ŠคํŠธ ํŒŒ์ผ์ด ์•„๋‹ˆ๋ผ, .exe ํ˜•ํƒœ์˜ ์‹คํ–‰ ํŒŒ์ผ์„ ์‹คํ–‰์‹œ์ผœ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„ ๋„˜๊ฒจ์ฃผ๋Š” ๊ฒฝ์šฐ

@ U ๊ธฐ๋ง๊ณ ์‚ฌ ์˜ˆ์ƒ : IIS ๋“ฑ์˜ ์›น ์„œ๋ฒ„๋Š” ์š”์ฒญ๋œ URL์ด ์ง€์‹œํ•˜๋Š” ์‹คํ–‰ ํŒŒ์ผ์„ ์‹คํ–‰์‹œ์ผœ, ๊ทธ ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์ „๋‹ฌํ•จ.
@ U ๊ธฐ๋ง๊ณ ์‚ฌ ์˜ˆ์ƒ : ๋”ฐ๋ผ์„œ, ์›น ์„œ๋ฒ„์™€ ์‹คํ–‰ ํ”„๋กœ๊ทธ๋žจ์€ IPC (Inter-Process Communication) ์ˆ˜๋‹จ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›์•„์•ผ ํ•จ.
@ U ๊ธฐ๋ง๊ณ ์‚ฌ ์˜ˆ์ƒ : ์›น ์„œ๋ฒ„์™€ ์‹คํ–‰ ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์ด์˜ IPC ์ˆ˜๋‹จ์€ ๊ณตํ†ต์ ์œผ๋กœ ์ •์˜๋˜์–ด์•ผ๋งŒ ์›น ํ™˜๊ฒฝ์—์„œ ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Œ -> CGI (Commong Gateway Interface)
@ U ๊ธฐ๋ง๊ณ ์‚ฌ ์˜ˆ์ƒ : ์ž…๋ ฅ IPC ์ˆ˜๋‹จ์œผ๋กœ ํ‘œ์ค€ ์ž…๋ ฅ(stdin)๊ณผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋“ฑ ๋‘ ๊ฐ€์ง€๋ฅผ ์‚ฌ์šฉ
@ U ๊ธฐ๋ง๊ณ ์‚ฌ ์˜ˆ์ƒ : ์ถœ๋ ฅ IPC ์ˆ˜๋‹จ์œผ๋กœ ํ‘œ์ค€ ์ถœ๋ ฅ(stout)์„ ์‚ฌ์šฉํ•จ (printf())

@ U ๊ธฐ๋ง๊ณ ์‚ฌ ์˜ˆ์ƒ : GET ์ฟผ๋ฆฌ๋Š” CGI์—์„œ โ€˜QUERY_STRINGโ€™ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ, Windows๋Š” getEnvํ•จ์ˆ˜๋กœ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ ‘๊ทผ ๊ฐ€๋Šฅ
@ U ๊ธฐ๋ง๊ณ ์‚ฌ ์˜ˆ์ƒ : C, โ€˜\33โ€™ ๊ฐ™์ด ๋ฐฑ์Šฌ๋ž˜์‹œ ๋ถ™์ด๋ฉด 8์ง„์ˆ˜, โ€˜\33โ€™์€ ASCII๋กœ ESC

์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.