|
INtime
Tech
INtime Top
H6-2. ÀÎÅÍ·´Æ®
󸮱â¿Í ÀÎÅÍ·´Æ® ½º·¹µå
ÀÎÅÍ·´Æ® Çڵ鷯¿¡ ´ëÇØ
INtimeÀÇ ÀÎÅÍ·´Æ® 󸮴Â, ¿ÜºÎ·Î ºÎÅÍÀÇ ³¢¾îµå´Â ½ÅÈ£ ÀԷ¿¡ ´ëÀÀÇØ, Áï¼®¿¡¼ 󸮸¦ ½Ç½ÃÇÏ´Â ¡¸ÀÎÅÍ·´Æ®
󸮱⡹¶ó°í, Çڵ鷯·ÎºÎÅÍ ½ÅÈ£¸¦ º¸³»Áö´Â °ÍÀ¸·Î ±âµ¿ÇØ INtime APIµîÀÌ »ç¿ë °¡´ÉÇÏ´Ù ¡¸ÀÎÅÍ·´Æ® ½º·¹µå¡¹ÀÇ 2°³¿¡ ÀÇÇØ¼
±¸¼ºµË´Ï´Ù. ÀÎÅÍ·´Æ® ½º·¹µå´Â ±âµ¿ Á÷ÈÄ, ½º·¹µå·Î ´ë±âÇÏ´Â ÀÎÅÍ·´Æ® ·¹º§µî°ú ÇÔ²², ±âµ¿ ¹æ¾Æ¼è°¡ µÇ´Â ÀÎÅÍ·´Æ® 󸮱⸦
µî·ÏÇÕ´Ï´Ù(SetRtInterruptHandler). ÀÎÅÍ·´Æ® ½º·¹µå´Â ½º·¹µå¸£ÇÁ ó¸® Áß¿¡¼, Çڵ鷯·Î ºÎÅÍÀÇ ½Ã±×³Î ´ë±â
ó¸®(WaitForRtInterrupt)¸¦ ½Ç½ÃÇÕ´Ï´Ù.
1. CreateRtThread ±×¸®°í ½º·¹µå¸¦ ±âµ¿(ÈÄ¿¡ ÀÎÅÍ·´Æ® ½º·¹µå°¡
µÈ´Ù)
2. »ý¼ºÇÑ ½º·¹µå¿¡ ´ëÇØSetRtInterruptHandler¿¡ ÀÇÇØ
ÀÎÅÍ·´Æ® 󸮱⠵î·Ï
3. µ¿½Ã¿¡ ±× ½º·¹µå´Â ÀÎÅÍ·´Æ® ½º·¹µå°¡ µÈ´Ù
4. ÀÎÅÍ·´Æ® ½º·¹µå´ÂWaitForRtInterruptÀ» ÄÝ ÇØ ÀÎÅÍ·´Æ® ¹ß»ýÀ»
±â´Ù¸°´Ù
5. ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÏ´Â ´ë·Î ÀÎÅÍ·´Æ® 󸮱Ⱑ ÄÝ µÇ´Â
6. ÀÎÅÍ·´Æ® Á¾·á ó¸®
±× 1£ºÇڵ鷯·ÎSignalEndOfRtInterruptÄÝ=ÀÎÅÍ·´Æ® 󸮱â
ó¸® Á¾·á
±× 2£ºÇڵ鷯·ÎSignalRtInterruptThread=ÀÎÅÍ·´Æ® 󸮱â
ó¸® Á¾·á£«ÀÎÅÍ·´Æ® ½º·¹µå´ÂWaitForRtInterruptÀ¸·ÎºÎÅÍ
º¹±Í
ÀÎÅÍ·´Æ® 󸮱â
¾Æ·¡¿¡ ÀÎÅÍ·´Æ® 󸮱⠿¹¸¦ ³ªÅ¸³À´Ï´Ù.
ÀÎÅÍ·´Æ® 󸮱âÁß¿¡ ±â¼úÇÒ ¼ö ÀÖ´Â °ÍÀº ÇÑÁ¤µÇ¾î ÀÖ½À´Ï´Ù.
INtime
API´Â ÀÎÅÍ·´Æ® 󸮱⳻¿¡¼ ÄÝ ÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÎÅÍ·´Æ® 󸮱⳻¿¡¼ ÄÝ °¡´ÉÇÑ °ÍÀº ÀÌÇÏ¿Í °°Àº °ÍÀ¸·Î ÇÑÁ¤µË´Ï´Ù£º
EnterRtInterrupt...ÄÝ¿øÇÁ·Î¼¼½ºÀÇ µ¥ÀÌÅÍ
¼¼±×¸ÕÆ®¸¦ ·ÎµåÇØ, ÇÁ·Î¼¼½º°¡ °¡Áö´Â Á¤Àû µ¥ÀÌÅÍ¿¡ÀÇ ¾×¼¼½º¸¦ °¡´ÉÇÏ°Ô ÇÕ´Ï´Ù.
SignalRtInterruptThread...ÀÎÅÍ·´Æ®
Á¾·á(EOI) ½Ã±×³ÎÀ» Çϵå¿þ¾î¿¡ ¼Û½ÅÇØ, ÁöÁ¤ÇÑ ·¹º§¿¡ °ü·ÃÇÏ´Â ÀÎÅÍ·´Æ® ½º·¹µå¸¦ ±âµ¿ÇÕ´Ï´Ù.
GetRtInterruptLevel...ÀÎÅÍ·´Æ®ÀÇ ¹ß»ýÇϰí ÀÖ´Â
encode ·¹º§Ä¡ÀÇ Ãëµæ
SignalEndOfRtInterrupt...EOI ½Ã±×³ÎÀ»
Çϵå¿þ¾î¿¡ ¼Û½ÅÇÕ´Ï´Ù.
__INTERRUPT void Int1Handler(void)
{
__INTERRUPT_PROLOG();
EnterRtInterrupt(LEVEL);
// ½ÅÈ£ 1 Ãâ·Â
outbyte( LPTPORT ,0x01 );
SignalRtInterruptThread(LEVEL);
__INTERRUPT_RETURN();
}
ÀÎÅÍ·´Æ® ½º·¹µå
¾Æ·¡¿¡ ÀÎÅÍ·´Æ® ½º·¹µå¿¹¸¦ ³ªÅ¸³À´Ï´Ù.
ÀÎÅÍ·´Æ® ½º·¹µå´Â ½º½º·ÎÀÇ ±âµ¿ ¹æ¾Æ¼è°¡ µÇ´Â ÀÎÅÍ·´Æ® 󸮱⸦ µî·ÏÇØ,
ó¸®Áß Çڵ鷯·ÎºÎÅÍÀÇ ½Ã±×³ÎÀ» ´ë±âÇÕ´Ï´Ù. ÀÎÅÍ·´Æ® ½º·¹µå¿¡ ´ëÇØ¼´Â, INtime API¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
Çڵ鷯·ÎºÎÅÍ ±âµ¿ ½Ã±×³ÎÀ»
¹ÞÀº ÀÎÅÍ·´Æ® ½º·¹µå³»¿¡¼ API¸¦ »ç¿ëÇÑ Ã³¸®¸¦ ½Ç½ÃÇϵµ·Ï ÇØ ÁÖ¼¼¿ä.
void Int1Thread(void)
{
if (!SetRtInterruptHandler(LEVEL, 1, Int1Handler))
Fail("Cannot set interrupt task for IRQ7");
while (1)
{
if (!WaitForRtInterrupt(LEVEL, WAIT_FOREVER))
Fail("Cannot wait for interrupt signal for IRQ7");
// ½ÅÈ£ 2 Ãâ·Â
outbyte( LPTPORT ,0x02 );
}
}
ÀÎÅÍ·´Æ® ½º·¹µåÇÁ¶óÀÌ¿À¸®Æ¼¿¡ ´ëÇØ
ÀÎÅÍ·´Æ® ½º·¹µåÀÇ priorityÄ¡´Â »ç¿ëÇÏ´Â ÀÎÅÍ·´Æ® ÄÜÆ®·Ñ·¯¿¡ ÀÇÇØ ´Ù¸¨´Ï´Ù.
PIC ¸ðµå(Á¾·¡0-15±îÁöÀÇ
IRQ ±¸¼º)ÀÇ °æ¿ì °íÁ¤ÀÌ µÇ¾î, APIC ¸ðµå(APIC¸¦ »ç¿ëÇÑ ¸ðµå)ÀÇ °æ¿ì, °¡º¯ÀÌ µË´Ï´Ù.
PIC ¸ðµå
SetRtInterruptHandler() ÄÝ¿¡ ÀÇÇØ ÀÎÅÍ·´Æ® ½º·¹µå·Î¼ »ý¼ºµÇ´Â °æ¿ì, INtime Ä¿³ÎÀº
ÀÎÅÍ·´Æ® ·¹º§¿¡ µû¶ó priority¸¦ ¼³Á¤ÇÕ´Ï´Ù. ÀÌÇÏÀÇ Ç¥´Â PIC ¸ðµå½ÃÀÇ encode ·¹º§(SetRtInterruptHandler()
ÄÝÀÇ ÆÄ¶ó¹ÌÅÍ wLevel), ¸¶½ºÅÍ·½½·¹À̺ê ÀÎÅÍ·´Æ® ·¹º§, IDT ½½·Ô°ú °ü·ÃÇÏ´Â ÀÎÅÍ·´Æ® ½º·¹µåÀÇ priorityÀÇ °ü°è¸¦ ³ªÅ¸³½
°ÍÀÔ´Ï´Ù£º
|
IRQ
|
PIC Level Master/Slave
|
INtime Encoding
|
IDT Slot
|
Interrupt Thread Priority
|
|
0
|
M0
|
08H
|
48
|
18
|
|
1
|
M1
|
18H
|
49
|
34
|
|
3
|
M3
|
38H
|
51
|
66
|
|
4
|
M4
|
48H
|
52
|
82
|
|
5
|
M5
|
58H
|
53
|
98
|
|
6
|
M6
|
68H
|
54
|
114
|
|
7
|
M7
|
78H
|
55
|
130
|
|
8
|
S0
|
20H
|
56
|
36
|
|
9
|
S1
|
21H
|
57
|
38
|
|
10
|
S2
|
22H
|
58
|
40
|
|
11
|
S3
|
23H
|
59
|
42
|
|
12
|
S4
|
24H
|
60
|
44
|
|
13
|
S5
|
25H
|
61
|
46
|
|
14
|
S6
|
26H
|
62
|
48
|
|
15
|
S7
|
27H
|
63
|
50
|
APIC ¸ðµå
APIC ¸ðµåÀÇ °æ¿ì, º¤ÅÍÄ¡°¡ ºñ½Ò Á¤µµ ³ôÀº priority·Î ¼³Á¤µË´Ï´Ù.
¹«¾ùº¸´Ù ³ôÀº priority·Î
¼³Á¤µÇ¾î ÀÖ´Â °ÍÀÌ RTŬ¶ôÀÔ´Ï´Ù. ÀÌ ±¸Á¶´Â PIC ¸ðµå¿Í´Â ¿ÏÀüÈ÷ °Å²Ù·Î µË´Ï´Ù. INtime¿¡ ÀÇÇÑ ÀÎÅÍ·´Æ® ÃʱâȽÿ¡´Â APICÀÇ IRQ´Â
°íÁ¤ÀÇ º¤Å͸¦ °¡ÁöÁö ¾Ê½À´Ï´Ù. APIC ÀÎÅÍ·´Æ®ÀÇ ÃʱâȽÿ¡´Â ´ÙÀ½ÀÇ ºóº¤Å͸¦ ÇÒ´çÇÒ ¼ö ÀÖ½À´Ï´Ù.
PCI ÀÎÅÍ·´Æ®´Â ³ôÀº priority·ÎºÎÅÍ
ÇÒ´çÀ» °³½ÃÇØ, ±× °ªÀ» ³»·Á¼ °©´Ï´Ù. ISA ÀÎÅÍ·´Æ®´Â ³·Àº priority·ÎºÎÅÍ ÇÒ´çÀ» °³½ÃÇØ, ±× °ªÀ» ¿Ã·Á¼ °©´Ï´Ù. INtime
Ä¿³ÎÀÇ ±âµ¿½Ã¿¡ ÀÖ¾î¼ÀÇ APICÀÇ ÀÎÅÍ·´Æ® Å×À̺íÀº ÀÌÇÏ¿Í °°ÀÌ µË´Ï´Ù£º
|
IRQ
|
Vector
|
Thread Priority
|
|
Free
|
0xf0
|
130
|
|
Free
|
0xf1
|
114
|
|
Free
|
0xf2
|
98
|
|
Free
|
0xf3
|
83
|
|
Free
|
0xf4
|
67
|
|
Free
|
0xf5
|
51
|
|
Free
|
0xf6
|
50
|
|
Free
|
0xf7
|
48
|
|
Free
|
0xf8
|
46
|
|
Free
|
0xf9
|
44
|
|
Free
|
0xfa
|
42
|
|
Free
|
0xfb
|
40
|
|
Free
|
0xfc
|
38
|
|
Free
|
0xfd
|
36
|
|
Free
|
0xfe
|
34
|
|
IRQ0
|
0xff
|
18
|
ÀÎÅÍ·´Æ® ÀÀ´ä·ÀÎÅÍ·´Æ® 󸮱ⷽº·¹µå Àüȯ ½Ã°£ ÃøÁ¤ÀÎÅÍ·´Æ® ½Ã±×³Î ¹ß»ý ÈÄ, Çڵ鷯°¡ ±âµ¿ÇØ, Çڵ鷯·ÎºÎÅÍ ½º·¹µå°¡ ±âµ¿µË´Ï´Ù.
¿©±â¿¡¼´Â °¢°¢ °É¸®´Â ó¸® ½Ã°£À»
ÃøÁ¤ÇÑ °á°ú¸¦ °ÔÀçÇÕ´Ï´Ù.
|
OS
|
INtime2.10J + Windows 2000
|
|
CPU
|
Pentium 800MHz
|
|
MEMORY
|
128MB
|
|
IRQ
|
7(ISA:ÆÐ·¯·²)
|
°èÃø µ¿ÀÛ
ÆÐ·¯·²
Æ÷Æ®¿¡´Â ¿ÜºÎ·ÎºÎÅÍÀÇ ÀÎÅÍ·´Æ® ½ÅÈ£¸¦ Á¤±âÀûÀ¸·Î ÀÔ·ÂÇÕ´Ï´Ù.
ÆÐ·¯·²
Æ÷Æ® ÁÖ¼Ò¿¡ ÀÖ¾î¼ÀÇ Á¦1ºñÆ®¸¦ Çڵ鷯 ºñÆ®, Á¦2ºñÆ®¸¦ ½º·¹µåºøÆ®·Î ÇØ, °¢°¢ Çڵ鷯³», ½º·¹µå³»¿¡¼ °¢ ºñÆ®¸¦ ON·Î ÇÕ´Ï´Ù.
°¢
ºñÆ®´Â logic analyzer¿¡ Á¢¼ÓµÇ¾î Àü±â½ÅÈ£ ÃøÁ¤À» ½Ç½ÃÇØ, ¸ñ½Ã, snapshot¿¡¼ ±× °èÃøÄ¡¸¦ ¼öÁýÇß½À´Ï´Ù.
ÆÐ·¯·²
I/OÁö¿¬À» 2.4 us¿Í »óÁ¤ÇØ °èÃøÄ¡¸¦ °¡°øÀÌ ³¡³ »óÅÂ.¾à 50ȸÀÇ ¸ñ½Ã °èÃø¿¡ ÀÇÇÑ´Ù.
ˤ,
¡¸ÀÎÅÍ·´Æ® 󸮱⡹ ¡¸ÀÎÅÍ·´Æ® ½º·¹µå¡¹·Î °¢°¢ ¼Ò°³Çϰí ÀÖ´Â ¿ø½Ã ÄÚµå´Â ÀÌ °èÃø¿¡ »ç¿ëµÈ °ÍÀÔ´Ï´Ù.
ÃøÁ¤ °á°ú 
|