|
INtime
Tech
INtime Top
°í¼Ó
ADº¯È¯ È®Àå º¸µåÀÇ ÀÌ¿ë
1.¸ñÀû
¿©±â¿¡¼´Â INtime ¾îÇø®ÄÉÀ̼ǿ¡¼, DMA ±â´ÉÀ» žÀçÇÑ Ãʰí¼Ó ADº¯È¯ PCI º¸µåÀÇ »ç¿ë¿¹¸¦ ÇØ¼³Çϰí ÀÖ½À´Ï´Ù.
2.º¸µå °³¿ä
ÀÌÇÏÀÇ PCI È®Àå º¸µå¸¦ ¿¹¿¡ ÇØ¼³Çϰí ÀÖ½À´Ï´Ù.
¸ÞÀÌÄ¿ ÁÖ½Äȸ»ç ÀÎÅÍÆäÀ̽º
Á¦Ç°¹øÈ£ PCI-3525
±â´É °³¿ä
PCI ¹ö½º¿¡ ÁذÅÇÑ Ãʰí¼Ó 12ºñÆ® ADº¯È¯/I/O¹æ½Ä 12ºñÆ® DAº¯È¯ º¸µåÀÔ´Ï´Ù.
2 ä³Î µ¿½Ã ÀÔ·ÂÀ¸·Î
ÃÖ°í 10 MHz »ùÇøµÀÌ °¡´ÉÇÕ´Ï´Ù.PCI bus master ¹æ½ÄÀÇ ¹ö½ºÆ® Àü¼Û°ú ½ºÄ³ÅͰ³ÀÚ ¹æ½ÄÀ» ¼Æ÷Æ®ÇØ, °í¼ÓÀÌ°í ´ë¿ë·®ÀÇ DMA
Àü¼ÛÀÌ °¡´ÉÇÕ´Ï´Ù.
3.ÇÁ·Î±×·¡¹Ö ÇØ¼³
3.1.ÇÁ·Î±×·¥ °³¿ä
PCI-3525¸¦ »ç¿ëÇϴµ¥ÀÇ Æ÷ÀÎÆ®·Î¼ ½ºÄ³ÅÍ ±â´ÉÀÌ ÀÖ½À´Ï´Ù.
½ºÄ³ÅͿʹ DMA ¹öÆÛ ÁÖ¼Ò¸¦ FIFO
¹æ½ÄÀ¸·Î º¸À¯ÇØ, »ùÇøµÀÌ °³½ÃµÇ¸é µî·ÏÇÑ DMA ¹öÆÛ¿¡ µ¥ÀÌÅͰ¡ Àü¼Û µÇ´Â ±¸Á¶ÀÔ´Ï´Ù.¿©±â¿¡¼´Â, ½ºÄ³ÅÍ ±â´ÉÀ» »ì¸° DMA µ¥ÀÌÅÍ Àü¼Û¿¡
ÀÇÇÑ AD»ùÇøµ ¹æ¹ýÀ» ¼³¸íÇÕ´Ï´Ù.
3.1.1.ÇÁ·Î±×·¥ ¼ø¼ Ç÷οì

3.1.2. ADC º¸µåÀÇ ÁÖµÈ ±â´É
¼³Á¤Ä¡ÀÇ ÀÚ¼¼ÇÑ °ÍÀº º¸µå ¸ÞÀÌÄ¿ ȨÆäÀÌÁö¿¡¼ °ø°³µÇ°í ÀÖ´Â ¡¸PCI-3525 I/O°ø°³ Àڷ᡹¸¦ ºÁ
ÁÖ¼¼¿ä.
1) »ùÇøµ Á¶°Ç ¼³Á¤(»ùÇøµÀÇ °³½Ã ¹æ¹ýÀÇ ÀüÀ¸·Î ¼³Á¤ÇÏ´Â)
- ¨è ADº¯È¯ °³½Ã/Á¾·á Æ®¸®°Å ¼³Á¤(º£À̽º ÁÖ¼Ò£«0 x06)
±â´É£º»ùÇøµ °³½Ã Á¶°Ç ¼³Á¤/Á¾·á Á¶°Ç ¼³Á¤À» ½Ç½ÃÇÕ´Ï´Ù.
ÇÔ¼ö£ºoutbyte( dwBaseAddr + 0x06, 0x90 );¡¡¡¡// »ùÇøµ °³½Ã Á¶°Ç ¼³Á¤À» AD¼ÒÇÁÆ®¿þ¾î
// ½ºÅ¸Æ®, Á¾·á Á¶°Ç ¼³Á¤À» ADÁöÁ¤ °Ç¼ö Á¾·á·Î
// ¼³Á¤ÇÏ´Â ¿¹ÀÔ´Ï´Ù.
¡Ø»ùÇøµ Á¾·á Á¶°Ç¿¡¼ ¡¸ADÁöÁ¤ °Ç¼ö Á¾·á¡¹¸¦ ¼³Á¤ÇßÀ» °æ¿ì, ÀÌÈÄ¿¡ ±âÀçÇÏ´Â ¡¸ADº¯È¯ ÁöÁ¤ °Ç¼ö/ADº¯È¯
Æ÷½ºÆ®Æ®¸®°Å °Ç¼ö ¼³Á¤¡¹ À¸·Î ¼³Á¤ ÇÑ °Ç¼ö ºÐÀÇ »ùÇøµÀÌ ¿Ï·áÇÑ ½ÃÁ¡¿¡¼ Á¾·á°¡ µË´Ï´Ù.
- ¨é ADº¯È¯ ÀÔ·Â »ç¾ç ¼³Á¤(º£À̽º ÁÖ¼Ò£«0 x07)
±â´É£ºÀÔ·Â ¸ðµå ¼³Á¤(Åë»ó/¹è¼Ó) ¹× »ùÇøµ Ä¿¸àµå ¼³Á¤(ADC¿¡ÀÇ Å¬¶ô °ø±Þ À¯¹«)
À» ½Ç½ÃÇÕ´Ï´Ù.
ÇÔ¼ö£ºoutbyte( dwBaseAddr + 0x07, 0x40 );¡¡¡¡// ÀÔ·Â ¸ðµå ¼³Á¤À» Åë»ó ¸ðµå, »ùÇøµ
// Ä¿¸àµå¸¦ Ŭ¶ô °ø±ÞÇÏ´Â °ÍÀ¸·Î ¼³Á¤ÇÏ´Â ¿¹ÀÔ´Ï´Ù.
¡Ø»ùÇøµ Ä¿¸àµå´Â ¡¸Å¬¶ô °ø±ÞÇÑ´Ù¡¹¸¦ ¼³Á¤ÇØ ÁÖ¼¼¿ä.¡¸Å¬¶ô °ø±ÞÇÏÁö ¾Ê´Â´Ù¡¹·Î Çϸé, DMA Àü¼ÛÀ» ÇÏÁö
¾Ê½À´Ï´Ù.¶Ç, ¼³Á¤ ÈÄ´Â 1 msecÀÇ ¿þÀÌÆ®¸¦ µÎ°í ³ª¼ ´ÙÀ½ÀÇ ¼³Á¤À» ½Ç½ÃÇØ ÁÖ¼¼¿ä.
- ¨ì AD»ùÇøµ Ŭ¶ô/ÀÎÅ͹ú ŸÀÌ¸Ó ¼³Á¤(º£À̽º ÁÖ¼Ò£«0 x0C~0 x0E)
±â´É£ºAD»ùÇøµ Ŭ¶ô ¼³Á¤ ¹× ÀÎÅ͹ú ŸÀÌ¸Ó ¼³Á¤À» ½Ç½ÃÇÕ´Ï´Ù.
ÇÔ¼ö£ºouthword( dwBaseAddr + 0x0C, 0x0002 );¡¡¡¡// AD»ùÇøµ Ŭ¶ôÀ» 10 MHz·Î ¼³Á¤
// ÇÏ´Â ¿¹ÀÔ´Ï´Ù.
|
SET[15..0]
|
»ùÇøµ Á֯ļö(Hz)
|
ÁÖ±â(s)
|
|
0002h
|
10M
|
100n
|
|
0003h
|
6.667M
|
150n
|
|
0004h
|
5M
|
200n
|
|
0005h
|
4M
|
250n
|
|
0014h
|
1M
|
1¥ì
|
|
00C8h
|
100k
|
10¥ì
|
|
07D0h
|
10k
|
100¥ì
|
|
4E20h
|
1k
|
1m
|
|
FFFFh
|
302.2
|
3.27675m
|
¡ØAD»ùÇøµ Ŭ¶ôÀº, »ó±â·Î ±âÀçÇÑ ¡¸ADº¯È¯ ¸ðµå¡¹°¡ ³»Àå Ŭ¶ôÀÇ °æ¿ì¿¡
À¯È¿ÇÕ´Ï´Ù.
- ¨í ADº¯È¯ ÁöÁ¤ °Ç¼ö/ADº¯È¯ Æ÷½ºÆ®Æ®¸®°Å °Ç¼ö ¼³Á¤(º£À̽º ÁÖ¼Ò£«0 x10~0 x12)
±â´É£º»ùÇøµ °Ç¼ö ¼³Á¤À» ½Ç½ÃÇÕ´Ï´Ù.
ÇÔ¼ö£ºoutbyte( dwBaseAddr + 0x10, 100 );¡¡¡¡// »ùÇøµ °Ç¼ö¸¦ 101°ÇÀ¸·Î ¼³Á¤ÇÏ´Â ¿¹ÀÔ´Ï´Ù.
outbyte( dwBaseAddr + 0x11, 0 );
outbyte( dwBaseAddr + 0x12, 0 );
¡Ø¡¸PCI-3525
I/O°ø°³ Àڷ᡹¿¡¼´Â, ¼³Á¤Ä¡°¡ 0ÀÇ °æ¿ìÀÇ °Ç¼ö°¡ 0°ÇÀÌ µÇ°í ÀÖ½À´Ï´Ù¸¸ 1°ÇÀÇ ½Ç¼öÀÔ´Ï´Ù.
2) DMA ÀÌ¿ë Á¶°Ç ¼³Á¤
DMA¸¦ ÀÌ¿ëÇϰí, ADµ¥ÀÌÅ͸¦ ÃëµæÇÏ·Á¸é , DMA¿ë ¹öÆÛÀÇ ¼±µÎ ÁÖ¼Ò¿Í ¹öÆÛ »çÀÌÁ ½ºÄ³ÅÍ·Î ºÒ¸®´Â
·¹Áö½ºÅÍ¿¡ µî·ÏÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ´Ã»ó ½ºÄ³ÅÍ´Â, DMA¿ë ¹öÆÛ¸¦ ÃÖ´ë 64°³±îÁö µî·Ï °¡´ÉÇϰí, AD»ùÇøµÁß¿¡ ½ºÄ³ÅÍ¿¡ µî·ÏµÈ DMA¿ë ¹öÆÛ¸¦
Ãß°¡µî·Ï °¡´ÉÇÕ´Ï´Ù.(DMA ½ºÄ³ÅÍ Àüȯ Interrupt·Î Ãß°¡µî·Ï ÇÕ´Ï´Ù.)
- ¨ç ADº¯È¯ DMA º£À̽º ÁÖ¼Ò(º£À̽º ÁÖ¼Ò£«0 x24~0 x27)
±â´É£º½ºÄ³ÅÍ¿¡ DMA ¹öÆÛÀÇ ¹°¸® ÁÖ¼Ò ¼³Á¤À» ½Ç½ÃÇÕ´Ï´Ù.
ÇÔ¼ö£ºoutword((WORD)( dwBaseAddr + 0x24), dwPhyAddr );¡¡¡¡// DMA ¹öÆÛÀÇ ¹°¸® ÁÖ¼Ò¸¦
// ¼³Á¤ÇÏ´Â ¿¹ÀÔ´Ï´Ù.
¡Ø½ºÄ³ÅÍ¿¡ ¼³Á¤ÇÏ´Â DMA ¹öÆÛ´Â 4ÀÇ ¹è¼öÀÏ Çʿ䰡 ÀÖ½À´Ï´Ù.
À̰ÍÀº, 1 CHºÐÀÇ DMA ¹öÆÛ¿¡ Àü¼Û µÇ´Â
»çÀÌÁî´Â 2 ByteÀÔ´Ï´Ù¸¸, PCI-3525ÀÇ »ç¾ç¿¡ ÀÇÇØ 1ȸÀÇ µ¥ÀÌÅÍ Àü¼ÛÀ¸·Î CH1/2µ¿½Ã¿¡ Àü¼Û µÇ±â
¶§¹® ÀÔ´Ï´Ù.
- ¨è ADº¯È¯ DMA ¾×¼¼½º Ä«¿îÆ® ¼¼Æ®(º£À̽º ÁÖ¼Ò£«0 x2C~0 x2D)
±â´É£º½ºÄ³ÅÍ¿¡ ¼³Á¤ÇÑ DMA ¹öÆÛÀÇ Àü¼Û »çÀÌÁî ¼³Á¤À» ½Ç½ÃÇÕ´Ï´Ù.
ÇÔ¼ö£ºouthword((WORD)( dwBaseAddr + 0x2C), 32768 - 1 );¡¡¡¡// DMA ¹öÆÛÀÇ Àü¼Û »çÀÌÁî¿¡ 32767Byte ¸¦
// ¼³Á¤ÇÏ´Â ¿¹ÀÔ´Ï´Ù.
¡ØDMA ¹öÆÛÀÇ Àü¼Û »çÀÌÁ ¼³Á¤ÇÒ ¶§´Â, ½ºÄ³ÅÍ¿¡ ¼³Á¤ÇÑ DMA ¹öÆÛ »çÀÌÁî ¹«´Ì 1À» »« °ªÀ»
¼³Á¤ÇÕ´Ï´Ù. À̰ÍÀº, ÇÏÀ§ 2 Bit¸¦ ¼³Á¤ÇÒ ¼ö ¾ø±â ¶§¹®¿¡ Àü¼Û »çÀÌÁî´Â 4ÀÇ ¹è¼ö-1ÀÌ µË´Ï´Ù.
- ¨é ADº¯È¯ DMA ÀÎÅÍ·´Æ®(º£À̽º ÁÖ¼Ò£«0 x31)
±â´É£ºDMA ¹öÆÛ µ¥ÀÌÅÍ Àü¼Û½ÃÀÇ Interrupt ¹ß»ý¼ö ¹× ½ºÄ³ÅÍ Àüȯ½Ã Interrupt ¹ß»ý¼öÀÇ ¼³Á¤À» ½Ç½ÃÇÕ´Ï´Ù.
ÇÔ¼ö£ºoutbyte( dwBaseAddr + 0x31, 0x0F );¡¡¡¡// DMA ¹öÆÛ µ¥ÀÌÅÍ Àü¼Û½ÃÀÇ ÀÎÅÍ·´Æ® ¹ß»ý¼ö¸¦ 32768 Dword,
// ½ºÄ³ÅÍ Interrupt ¹ß»ý¼ö¸¦ 4·Î ¼³Á¤ÇÏ´Â ¿¹ÀÔ´Ï´Ù.
¡ØDMA ¹öÆÛ µ¥ÀÌÅÍ Àü¼Û½ÃÀÇ ÀÎÅÍ·´Æ® ¹ß»ý¼ö¸¦ 32768(¼³Á¤ °¡´ÉÇÑ ÃÖ´ë¼ö)ÀÎ ÀÌÀ¯´Â, ÀûÀº °ªÀ» ¼³Á¤Çϸé
Interrupt°¡ ¿¬¼ÓÇØ µé¾î°¡±â À§ÇØ ÃÖ´ë¼ö¸¦ ¼³Á¤ÇØ ÀÖ½À´Ï´Ù.¶Ç, ÀÌ »ùÇÿ¡¼´Â DMA ¹öÆÛ µ¥ÀÌÅÍ Àü¼Û½ÃÀÇ Interrupt´Â »ç¿ëÇÏÁö
¾Ê½À´Ï´Ù.
- a) DMA µ¥ÀÌÅÍ Àü¼Û Interrupt¹ß»ý¼ö´Â, DMA ¹öÆÛ¿¡ ´ëÇØ »ùÇøµ µ¥ÀÌÅͰ¡ ¸î°³ Àü¼Û µÇ¾úÀ» ¶§¿¡ ÀÎÅÍ·´Æ®¸¦ ¹ß»ýÇұ
°áÁ¤ÇÕ´Ï´Ù.

b) DMA ½ºÄ³ÅÍ ÀüÈ¯ÇØ Interrupt ¹ß»ý¼ö´Â, ½ºÄ³ÅÍ·Î ¼³Á¤µÇ¾î ÀÖ´Â DMA ¹öÆÛ¼ö°¡ ¸î°³·ÎºÎÅÍ ¸î°³¿¡ º¯ÈÇßÀ» ¶§¿¡ Interrupt¸¦ ¹ß»ý½Ãų±î¸¦
°áÁ¤ÇÕ´Ï´Ù. ¾Æ·¡¿Í °°Àº ¿¹´Â, ½ºÄ³ÅÍ·Î ¼³Á¤µÇ¾î ÀÖ´Â DMA ¹öÆÛ¼ö°¡ 5¿¡¼ 4¿¡ º¯ÈÇßÀ» ¶§¿¡ Interrupt°¡ ¹ß»ýÇÕ´Ï´Ù.

¨ê ¹ö½ºÆ®Àå ¼³Á¤(º£À̽º ÁÖ¼Ò£«0 x32)±â´É£ºDMA ¹öÆÛ¿¡ÀÇ µ¥ÀÌÅÍ Àü¼Û ´ÜÀ§ÀÇ ¼³Á¤À» ½Ç½ÃÇÕ´Ï´Ù.
ÇÔ¼ö£ºoutbyte( dwBaseAddr + 0x32, 0x01 );¡¡¡¡// µ¥ÀÌÅÍ Àü¼Û ´ÜÀ§¿¡ 1À» ¼³Á¤ÇÏ´Â ¿¹ÀÔ´Ï´Ù.
¡Ø¸®¾óŸÀÓ¼ºÀ» ¿Ã¸®·Á¸é 1À» ¼³Á¤ÇÕ´Ï´Ù.
3) ¿ÜºÎ ½ÅÈ£ ÀÔ·Â Á¶°Ç ¼³Á¤
CN3, CN4ÀÇ ¿¬°á±â¸¦ »ç¿ëÇØ ¿ÜºÎ·ÎºÎÅÍÀÇ ½ÅÈ£¸¦ °³½Ã Á¶°ÇÀ̳ª »ùÇøµ Ŭ¶ôÀ¸·Î¼ ÀÔ·Â
°¡´ÉÇÕ´Ï´Ù.
- ¨ç ADº¯È¯ ¿ÜºÎ Æ®¸®°Å °³½Ã/Á¾·á Á¶°Ç(º£À̽º ÁÖ¼Ò£«0 x18)
±â´É£º¿ÜºÎ Æ®¸®°ÅÀÇ °³½Ã ¹× Á¾·á Á¶°ÇÀÇ ¼³Á¤À» ½Ç½ÃÇÕ´Ï´Ù.
ÇÔ¼ö£ºoutbyte( dwBaseAddr + 0x18, 0x01 );¡¡¡¡// °³½Ã Á¶°ÇÀ» ÀÏ¾î¼ °ËÃâ, Á¾·á Á¶°ÇÀ»
// ¹«È¿·Î ¼³Á¤ÇÏ´Â ¿¹ÀÔ´Ï´Ù.
¡Ø¾Æ·¡¿Í °°Àº ¿ÜºÎ ½ÅÈ£±Ø¼º ¼³Á¤¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä.
- ¨è ¿ÜºÎ ½ÅÈ£±Ø¼º(º£À̽º ÁÖ¼Ò£«0 x19)
±â´É£º¿ÜºÎ Æ®¸®°Å ¹× ¿ÜºÎ ÀÎÅÍ·´Æ® ¹× external clockÀÇ ±Ø¼ºÀÇ ¼³Á¤À» ½Ç½ÃÇÕ´Ï´Ù.
ÇÔ¼ö£ºoutbyte( dwBaseAddr + 0x19, 0x01 );¡¡¡¡// ¿ÜºÎ Æ®¸®°Å¸¦ »ó½Â ¸ð¼¸® À¯È¿Çϰí
// ¼³Á¤ÇÏ´Â ¿¹ÀÔ´Ï´Ù.
¡ØADº¯È¯ ¿ÜºÎ Æ®¸®°Å °³½Ã/Á¾·á Á¶°Ç ¼³Á¤¿¡¼ ¡¸¿ÜºÎ Æ®¸®°ÅÀÇ Ã¹ ½ÃÀÛ °ËÃâÀ» À¯È¿¡¹·Î ÇßÀ» °æ¿ì,
EXTRG IN±Ø¼º ¼³Á¤À» ¡¸»ó½Â ¸ð¼¸® À¯È¿¡¹·Î ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ¹Ý´ë·Î ADº¯È¯ ¿ÜºÎ Æ®¸®°Å °³½Ã/Á¾·á Á¶°Ç ¼³Á¤¿¡¼ ¡¸¿ÜºÎ Æ®¸®°ÅÀÇ ¼
³»·Á°¨ °ËÃâÀ» À¯È¿¡¹·Î ÇßÀ» °æ¿ì, EXTRG IN±Ø¼º ¼³Á¤À» ¡¸Çϰ ¸ð¼¸® À¯È¿¡¹·Î ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.
- ¨é CN3 ¿ÜºÎ Á¦¾î ½ÅÈ£ ¼±ÅÃ(º£À̽º ÁÖ¼Ò£«0 x1A)
±â´É£ºCN3ÀÇ ¿ÜºÎ Á¦¾î ½ÅÈ£ÀÇ ¼³Á¤À» ½Ç½ÃÇÕ´Ï´Ù.
ÇÔ¼ö£ºoutbyte( dwBaseAddr + 0x1A, 0x01 ); // ¿ÜºÎ Æ®¸®°Å ÀÔ·ÂÀ¸·Î ¼³Á¤ÇÏ´Â ¿¹ÀÔ´Ï´Ù.
¡Ø¼³Á¤ ÈÄ´Â 1 msecÀÇ ¿þÀÌÆ®¸¦ µÎ°í ³ª¼ ´ÙÀ½ÀÇ ¼³Á¤À» ½Ç½ÃÇØ ÁÖ¼¼¿ä.CN4·Î ¼³Á¤ÇØ ÀÖ´Â °ÍÀº ¼³Á¤ÇÒ
¼ö ¾ø½À´Ï´Ù.
- ¨ê CN4 ¿ÜºÎ Á¦¾î ½ÅÈ£ ¼±ÅÃ(º£À̽º ÁÖ¼Ò£«0 x1B)
±â´É£ºCN4ÀÇ ¿ÜºÎ Á¦¾î ½ÅÈ£ÀÇ ¼³Á¤À» ½Ç½ÃÇÕ´Ï´Ù.
ÇÔ¼ö£ºoutbyte( dwBaseAddr + 0x1A, 0x03 ); // external clock ÀÔ·ÂÀ¸·Î ¼³Á¤ÇÏ´Â ¿¹ÀÔ´Ï´Ù.
¡Ø¼³Á¤ ÈÄ´Â 1 msecÀÇ ¿þÀÌÆ®¸¦ µÎ°í ³ª¼ ´ÙÀ½ÀÇ ¼³Á¤À» ½Ç½ÃÇØ ÁÖ¼¼¿ä.CN3·Î ¼³Á¤ÇØ ÀÖ´Â °ÍÀº ¼³Á¤ÇÒ
¼ö ¾ø½À´Ï´Ù.
3.2.ÃʱâÈ Ã³¸®
PCI-3525¿¡¼ DMA Àü¼Û¿¡ ÀÇÇÑ AD»ùÇøµÀ» °³½ÃÇϱâ±îÁö, ¹Ì¸® PCI-3525¿¡ ´ëÇØ ¼³Á¤À» ½Ç½ÃÇÒ
Çʿ䰡 ÀÖ½À´Ï´Ù. ¼ø¼¸¦ »ùÇà ÇÁ·Î±×·¥¿¡ ÀÇÇØ ÀÌÇÏ¿¡ ±âÀçÇÕ´Ï´Ù.
3.2.1. º¸µå Á¤º¸ÀÇ Ãëµæ
PCI-3525ÀÇ Á¦¾î Á¤º¸(I/OÆ÷Æ® º£À̽º ÁÖ¼Ò, IRQ ¹øÈ£)µîÀ» PCI ÄÁÇDZ׷¹ÀÌ¼Ç ·¹Áö½ºÅÍ·Î
ºÎÅÍ ÃëµæÇÕ´Ï´Ù. º¸µå Á¤º¸ÀÇ Ãëµæ ¹æ¹ýÀ» ¾Æ·¡¿¡ ±âÀçÇÕ´Ï´Ù.
¡ØPCI º¸µå·ÎºÎÅÍÀÇ Á¤º¸ Ãëµæ¿¹(ÇÔ¼ö À̹ÌÁö)
PCIDEV dev;
dev.wVendorId = 0x1147; // º¥´õ IDÀÇ ¼³Á¤
dev.wDeviceId = 0x0DC5; // µð¹ÙÀ̽º IDÀÇ ¼³Á¤
dev.wDeviceIndex = 0; // ÃÖÃÊ·Î ¹ß°ßµÈ µð¹ÙÀ̽º¸¦ ÃëµæÇÏ´Â °æ¿ìÀÇ ÁöÁ¤
if (PciFindDevice(&dev) == FALSE) // PCI ÄÁÇDZַ¹ÀÌ¼Ç Á¤º¸ÀÇ Ãëµæ(IRQ, I/Oº£À̽º ÁÖ¼Òµî )
return ( -1 ); // ÁöÁ¤ µð¹ÙÀ̽º°¡ ¹ß°ßµÇÁö ¾Ê±â ¶§¹®¿¡ ¿¡·¯¸¦ µ¹·ÁÁÝ´Ï´Ù.
// ÀÎÅÍ·´Æ® ·¹º§(IRQ)ÀÇ Ãëµæ
if ((dev.byIntLine == 0) || (dev.byIntLine == 255))
return 0xFFFF;¡¡¡¡ // ÀÌ µð¹ÙÀ̽º¿¡´Â IRQ°¡ ¾ø´ÂÁö, ÀÎÁ¤¹ÞÁö ¸øÇÑ IRQÄ¡À̱⠶§¹®¿¡ ¿¡·¯¸¦ µ¹·ÁÁÝ´Ï´Ù.
byInt = dev.byIntLine;
// ÀÎÅÍ·´Æ® ·¹º§ÀÇ »êÃâ
wIntLevel = (byInt < 8) ? (byInt * 16 + 8) : ((1 + byInt / 8) * 16 + (byInt % 8));
// I/Oº£À̽º ÁÖ¼ÒÀÇ Ãëµæ
dwBaseAddr = (WORD) dev.dwBaseAddr[0] & 0xfffc;¡¡¡¡¡¡¡¡// ÃëµæÇÑ 0¹øÂ°ÀÇ º£À̽º ÁÖ¼Ò°¡ AD¿ëÀ¸·Î
// µË´Ï´Ù.
|
ÁÖÀÇÁ¡£ºINtime2.23 ȯ°æ¿¡¼ ÀÎÅÍ·´Æ®¸¦ »ç¿ëÇÏ´Â °æ¿ì´Â,
SetRtProcessMaxPriority() ½Ã½ºÅÛ ÄÝÀ» »ç¿ëÇØ, ÇÁ·Î¼¼½ºÀÇ ÃÖ´ë priority¸¦ 0À¸·Î ¼³Á¤ÇÒ Çʿ䰡
ÀÖ½À´Ï´Ù.
3.2.2. ADC º¸µåÀÇ ÃʱâÈ
ADC º¸µåÀÇ ÃʱâÈ ¼ø¼¸¦ »ùÇà ÇÁ·Î±×·¥À¸·Î ±âÀçÇÕ´Ï´Ù.
¼³Á¤ »ó¼¼ÇÏ°Ô °ü°èÇØ¼´Â, º¸µå ¸ÞÀÌÄ¿º¸´Ù Ȩ
ÆäÀÌÁö¿¡¼ °ø°³µÇ°í ÀÖ´Â ¡¸PCI-3525 I/O°ø°³ Àڷ᡹¸¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä.
// ÀÎÅÍ·´Æ® ¸¶½ºÅ©(0 x3Ch~0x3Dh)
outhword((WORD)( dwBaseAddr + 0x3C), 0x0000); // ADC ÀüÇÒÆ÷ÇÔ ±ÝÁö
// ADº¯È¯ Ä¿¸àµå(0x04h)
outbyte( dwBaseAddr + 0x04, 0x01 ); // ADº¯È¯ ½ºÅé(°Á¦ Á¾·á)
// ADº¯È¯ DMA Ä¿¸àµå(0x30h)
outbyte( dwBaseAddr + 0x30, 0x02 ); // DMA Àü¼Û Á¤Áö
// ADº¯È¯ ÀÔ·Â »ç¾ç ¼³Á¤(0x07h)
outbyte( dwBaseAddr + 0x07, 0x40 ); // ¡ØDMA Àü¼Û½Ã´Â ¹Ýµå½Ã¡°bit6=1¡±
knRtSleep(UsecsToKticks(1));
// ADº¯È¯ ÀÔ·Â ·¹ÀÎÁö Ch1(0x08h)
outbyte( dwBaseAddr + 0x08, 0x00 ); // 0x00£º±5V ÀÔ·Â ·¹ÀÎÁö
// ADº¯È¯ ÀÔ·Â ·¹ÀÎÁö Ch1(0x09h)
outbyte( dwBaseAddr + 0x09, 0x00 ); // (Àü¼ú)
// ADº¯È¯ ¿ÜºÎ Æ®¸®°Å °³½Ã/Á¾·á Á¶°Ç(0x18h)
outbyte( dwBaseAddr + 0x18, 0x01 ); // 0x00£º¿ÜºÎ Æ®¸®°Å °³½Ã Á¶°Ç ù ½ÃÀÛ ÁöÁ¤
// ¿ÜºÎ ½ÅÈ£±Ø¼º(0x19h)
outbyte( dwBaseAddr + 0x19, 0x00 ); // 0x00£º¿ÜºÎ ½ÅÈ£´Â ¸ðµÎ Çϰ ¸ð¼¸® À¯È¿
// CN3 ¿ÜºÎ Á¦¾î ½ÅÈ£ ¼±ÅÃ(0x1Ah)
outbyte( dwBaseAddr + 0x1A, 0x01 ); // 0x01£ºCN3¿¡ ¿ÜºÎ Æ®¸®°Å¸¦ ÀÔ·ÂÇÑ´Ù
knRtSleep(UsecsToKticks(1));
// CN4 ¿ÜºÎ Á¦¾î ½ÅÈ£ ¼±ÅÃ(0x1Bh)
outbyte( dwBaseAddr + 0x1B, 0x03 ); // 0x03£ºCN4¿¡ external clock¸¦ ÀÔ·ÂÇÑ´Ù
knRtSleep(UsecsToKticks(1));
// µ¿±âÈ ¼³Á¤(0x1Eh)
outbyte( dwBaseAddr + 0x1E, 0x00 ); // 0x00£ºº¹¼öÀÇ º¸µå·Î µ¿±âÈÇÏÁö ¾Ê´Â´Ù
// DMA ÀÎÅÍ·´Æ®(0x31h)
outbyte( dwBaseAddr + 0x31, 0x0f ); // 0x0f£ºDMA Àü¼ÛÇÒÀÔ£º32768 DWORD ´ÜÀ§, ½ºÄ³ÅÍ ÀüȯÇÒÀÔ£º4
// DMA Àü¼Û ¹ö½ºÆ®Àå ¼³Á¤(0x32h)
outbyte( dwBaseAddr + 0x32, 0x01 ); // ¸®¾óŸÀÓ¼ºÀ» Áß½ÃÇØ 1 »ùÇøµ¸¶´Ù DMA Àü¼ÛÀ» ½Ç½ÃÇÏ´Â ¼³Á¤
|
3.3.DMA Àü¼Û ¹öÆÛÀÇ ½ºÄ³ÅÍ µî·Ï
DMA¿ë ¹öÆÛ ¹°¸® ÁÖ¼Ò Ãëµæ°ú ½ºÄ³ÅÍ µî·Ï¿¹
// DMA Àü¼Û¿ë ¹öÆÛÀÇ È®º¸
if((pDMAMem = AllocateRtMemory(0x40000)) == NULL) // DMA¿ë ¹öÆÛ »ý¼º
SuspendError("E$M_DMA", "%ld", 0x40000); // ¿¡·¯À̱⠶§¹®¿¡, Interrupt ½º·¹µå¸¦ ÁßÁö
// ¹°¸® ÁÖ¼Ò Ãëµæ
if((dwPhyAddr = GetRtPhysicalAddress(pDMAMem, 0x40000, 0)) == BAD_PHYSICAL_ADDRESS)
SuspendError("E$P_DMA", "%ld", 0x40000); // ¿¡·¯À̱⠶§¹®¿¡, Interrupt, ½º·¹µå¸¦ ÁßÁö
// ADº¯È¯ DMA Ä¿¸àµå(0x30h)
outbyte( dwBaseAddr + 0x30, 0x40 ); // ½ºÄ³ÅÍ FIFO Ŭ¸®¾î
// ADº¯È¯ DMA Ä¿¸àµå(0x30h)
outbyte( dwBaseAddr + 0x30, 0x80 ); // ADµ¥ÀÌÅÍ ¹öÆÛ Ŭ¸®¾î
dwAddr = dwPhyAddr;
for(wCnt = 0;wCnt < 6;wCnt ++)
{
outword((WORD)( dwBaseAddr + 0x24), dwAddr); // DMA º£À̽º ÁÖ¼Ò
outhword((WORD)( dwBaseAddr + 0x2C), 0x8000 - 1); // ¡¸DMA¿ë ¹öÆÛ »çÀÌÁ£1À» ¼¼Æ®
dwAddr += 0x8000; // ´ÙÀ½ÀÇ ¹°¸®ÁÖ¼Ò
}
|

Interrupt ½º·¹µå¿¡¼ ÀÎÅÍ·´Æ® ´ë±â¿¡ µé¾î°¡±â Àü¿¡ ½ºÄ³ÅÍ¿¡ DMA ¹öÆÛÀÇ µî·ÏÀ» ½Ç½ÃÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ¿©±â¿¡¼´Â, DMA ¹öÆÛÀÇ ½ºÄ³ÅÍ¿¡ÀÇ
µî·Ï¿¡ ´ëÇØ ¼³¸íÇÕ´Ï´Ù. ÇÁ·Î±×·¥¿¹´Â¡¸3.3.DMA Àü¼Û ¹öÆÛÀÇ ½ºÄ³ÅÍ µî·Ï¡¹À» ÂüÁ¶ÇØ ÁÖ¼¼¿ä.
- ¨ç DMA ¹öÆÛÀÇ »ý¼º PCI-3525´Â 1ȸÀÇ »ùÇøµ¿¡ ´ëÇØ 4 ByteºÐ DMA ¹öÆÛ¿¡ Àü¼Û µË´Ï´Ù. 1°³ÀÇ CHÀ̸é 2
ByteÀÔ´Ï´Ù¸¸, PCI-3525ÀÇ »ç¾çÀÌ CH1/2µ¿½Ã¿¡ Àü¼Û µÇ±â À§ÇØ Àü¼Û »çÀÌÁî°¡ ¹è°¡ µË´Ï´Ù.
±× ¶§¹®¿¡, DMA ¹öÆÛ »çÀÌÁî´Â 4
Byte °æ°è°¡ ¾Æ´Ï¸é ¾ÈµË´Ï´Ù.
- ¨è DMA ¹öÆÛÀÇ ¹°¸® ÁÖ¼Ò Ãëµæ DMA ¹öÆÛ ÁÖ¼Ò¸¦ ½ºÄ³ÅÍ¿¡ µî·ÏÇÏ´Â °æ¿ì, PCI-3525´Â INtime·Î »ý¼ºÇÑ DMA ¹öÆÛÀÇ °¡»ó
ÁÖ¼Ò¸¦ ÂüÁ¶ÇÒ ¼ö ÇÒ ¼ö ¾ø±â ¶§¹®¿¡, °¡»ó ÁÖ¼Ò¿¡ ²ö±¸¹°¸® ÁÖ¼Ò¸¦ ÃëµæÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.
- ¨é ½ºÄ³ÅÍÀÇ µî·Ï »ó±â·Î ÃëµæÇÑ DMA ¹öÆÛÀÇ ¹°¸® ÁÖ¼Ò¸¦ ½ºÄ³ÅÍ¿¡ µî·ÏÇÕ´Ï´Ù.
ÀÌ ¶§, DMA ¹öÆÛ »çÀÌÁîÀÇ µî·Ïµµ µ¿½Ã¿¡
½Ç½ÃÇÕ´Ï´Ù. DMA ¹öÆÛ »çÀÌÁî¿¡ µî·ÏÇÏ´Â °ªÀº, DMA ¹öÆÛ »çÀÌÁî·ÎºÎÅÍ 1À» »« °ªÀÌ µË´Ï´Ù.
¶Ç, ½ºÄ³ÅÍ µî·ÏÀü¿¡´Â ½ºÄ³ÅÍ FIFO,
ADµ¥ÀÌÅÍ ¹öÆÛÀÇ Å¬¸®¾î¸¦ ½Ç½ÃÇÕ´Ï´Ù.
2) ÀÎÅÍ·´Æ® 󸮱â
¿©±â¿¡¼´Â ½ºÄ³ÅÍÀÇ Ãß°¡µî·ÏÀÌ ¸ÞÀÎÀÌ µË´Ï´Ù. ó¸®ÀÇ ¿¹¸¦ ÀÌÇÏ¿¡ ±âÀçÇÕ´Ï´Ù.
¡ØÀÎÅÍ·´Æ® 󸮱â ó¸®ÀÇ ¿¹(ÇÔ¼ö À̹ÌÁö)
_ _INTERRUPT void IntHandler( WORD wCSRA, WORD wLevel, PVOID pv)
{
__SHARED_INTERRUPT_PROLOG();
// ÀÎÅÍ·´Æ® ½ºÅÂÅͽº Àбâ
wIntrStatus[byWriteP] = inhword( dwBaseAddr + 0x38 );
// ÇöÀçÀÇ ½ºÄ³ÅÍ µî·Ï¼ö¸¦ Ãëµæ
wSktCnt = inhword( dwBaseAddr + 0x3A ) & 0x3F;
// AD DMA ½ºÄ³ÅÍ ÀÎÅÍ·´Æ®(½ºÄ³ÅͰ¡ ½ºÄ³Å¸ ÀÎÅÍ·´Æ® ¼³Á¤Ä¡·Î ¹Ù²î¾úÀ» ¶§¿¡ ¹ß»ý)
if(((wIntrStatus[byWriteP] & 0x0400) == 0x0400) || (wSktCnt < 5)){
for(wCnt = wSktCnt;wCnt < 5;wCnt ++){
// DMA º£À̽º ÁÖ¼Ò
outword((WORD)(dwBaseAddr + 0x24), dwAddr);
// DMA ¾×¼¼½º Ä«¿îÆ®¡¡DMA Àü¼Û ¹ÙÀÌÆ®¼ö-1À» ¼¼Æ®
outhword((WORD)(dwBaseAddr + 0x2C), 0x8000 - 1);
dwAddr += 0x8000; // Â÷ÀÇ ¹°¸® ÁÖ¼Ò
if (dwAddr > BUF_MAX_SIZE)
dwAddr = BUF_TOP_ADDR; // ¹öÆÛ ÁÖ¼Ò¸¦ ¼±µÎ¿¡ µÇµ¹¸°´Ù
}
if(wIntrStatus[byWriteP] == 0x0000)
wIntrStatus[byWriteP] = 0x0400;
}
// DMA Àü¼Û »çÀÌÁ Ãëµæ
dwDMATransSize[byWriteP] = inword( (WORD)(dwBaseAddr + 0x20) );
byWriteP ++;
SignalRtInterruptThread(wLevel);
__SHARED_INTERRUPT_RETURN();
} // end of IntHandler()
|
3) Interrupt ½º·¹µå
¿©±â¿¡¼´Â, ÇØ´çÀÇ Interrupt Çڵ鷯·Î ÃëµæÇÏ´Â Interrupt ½ºÅ×ÀÌÅÍ)¿¡ ´ëÀÀÇϴ ó¸®¸¦ ½Ç½ÃÇÕ´Ï´Ù.
¡ØInterrupt ½º·¹µå ó¸®ÀÇ ¿¹
// ÃʱâÈ Ã³¸®·Î¼ ÀÌÇϸ¦ ½Ç½ÃÇÕ´Ï´Ù.
// ¨ç DMA ¹öÆÛ¸¦ ½ºÄ³ÅÍ¿¡ µî·Ï(¡¸3.3.DMA Àü¼Û ¹öÆÛÀÇ ½ºÄ³ÅÍ µî·Ï¡¹À» ÂüÁ¶)
// ¨è Interrupt Çڵ鷯¿Í Interrupt ½º·¹µå°£ÀÇ °øÅë º¯¼öµîÀÇ ÃʱâÈ
byReadP = 0; // Interrupt ½ºÅÂÅͽº °Ý³³ ¹öÆÛÀϾîµéÀÓ À§Ä¡ Ŭ¸®¾î¿¹
byWriteP = 0; // ¡±±âÀç À§Ä¡ Ŭ¸®¾î¿¹
// ¨é ÀÎÅÍ·´Æ® Çڵ鷯ÀÇ µî·Ï(ÀÚ¼¼ÇÑ °ÍÀº, º°µµ ÀÎÅÍ·´Æ® ó¸® »ùÇà ÂüÁ¶)
wLevel = SetRtInterruptHandlerEx( (WORD)(wLevel | SHARED_LEVEL), 255, IntHandler, NULL);
for(;;) {
if (!WaitForRtInterrupt(wLevel, WAIT_FOREVER))
Fail("Cannot wait for interrupt signal for Pci(1147,0DC5)");¡¡¡¡// ¿¡·¯À̱⠶§¹®¿¡ Á¾·á
// ÀÎÅÍ·´Æ® ¸¶½ºÅ© Ãëµæ
wIntSts = wIntrStatus[byReadP];
// AD»ùÇøµ °³½Ã Interrupt½Ã
if((wIntSts & 0x0002) == 0x0002){
// AD»ùÇøµ °³½Ã ó¸®
}
// AD DMA ½ºÄ³ÅÍ ÀüÈ¯ÇØ Interrupt(½ºÄ³ÅͰ¡ ½ºÄ³Å¸ ÀüÈ¯ÇØ Interrupt¼ö·Î ¹Ù²î¾úÀ» ¶§¿¡ ¹ß»ý)
// ¶Ç´Â, AD DMA Àü¼Û ¿Ï·á Interrupt½Ã(»ùÇøµ µ¥ÀÌÅͰ¡ ¸ðµÎ DMA ¹öÆÛ¿¡ Àü¼Û µÇ¾úÀ» ¶§)
if((wIntSts & 0x0500) != 0x000){
// DMA ¹öÆÛ µ¥ÀÌÅÍÀÇ ÅðÇÇ, Àü¼ÛµîÀ» ½Ç½ÃÇÑ´Ù.
}
// AD DMA Àü¼Û ¿Ï·á ÀÎÅÍ·´Æ®½Ã(»ùÇøµ µ¥ÀÌÅͰ¡ ¸ðµÎ DMA ¹öÆÛ¿¡ Àü¼Û µÇ¾úÀ» ¶§)
if((wIntSts & 0x0100) == 0x0100){
// ´ÙÀ½ »ùÇøµ ÁغñµîÀ» ½Ç½ÃÇÑ´Ù.
}
// AD»ùÇà ¿À¹ö ·± Interrupt½Ã
if((wIntSts & 0x0200) == 0x0200){
// Áß´Ü Ã³¸®
// Interrupt ¸¶½ºÅ©(0 x3C~0x3D)
outhword((WORD)( dwBaseAddr + 0x3C), 0x0000); // ADC ÀüÇÒÆ÷ÇÔ ±ÝÁö
// ADº¯È¯ Ä¿¸àµå(0x04)
outbyte( dwBaseAddr + 0x04, 0x01 ); // ADº¯È¯ ½ºÅé(°Á¦ Á¾·á)
// ADº¯È¯ DMA Ä¿¸àµå(0x30)
outbyte( dwBaseAddr + 0x30, 0x02 ); // DMA Àü¼Û Á¤Áö
}
byReadP ++; // Interrupt Çڵ鷯¿¡ ÀÇÇØ ½ºÅà µÇ´Â Interrupt ½ºÅÂÅͽº °Ý³³ ¹öÆÛÀÇ ÀϾîµéÀÓ À§Ä¡¸¦ ¾÷
}
|
4) DMA ¹öÆÛ µ¥ÀÌÅÍÀÇ ÃßÃâ
DMA ¹öÆÛ·Î ÁöÁ¤ µ¥ÀÌÅÍ »çÀÌÁîºÐ °Ý³³µÈ ÈÄ, ¹Ì¸® »ý¼ºÇØ µÐ »ùÇøµ µ¥ÀÌÅÍ °Ý³³¿ë ¹öÆÛ¿¡ DMA ¹öÆÛ·ÎºÎÅÍ µ¥ÀÌÅ͸¦ ÃßÃâÇØ, DMA
¹öÆÛÀÇ µ¥ÀÌÅ͸¦ ÀçÂ÷ DMA ¹öÆÛ¸¦ ½ºÄ³ÅÍ¿¡ µî·ÏÇÏ´Â ¿¹ÀÔ´Ï´Ù. ¿©±â¿¡¼´Â, DMA ¹öÆÛ¸¦ ¸µ ¹öÆÛ·Î¼ »ç¿ëÇϰí ÀÖ½À´Ï´Ù.

3.8.¹Ýº¹ÀÇ ¹æ¹ý
»ùÇøµÀ» °³½ÃÇØ, ÁöÁ¤ÇÑ °Ç¼ö ºÐÀÇ »ùÇøµÀÌ ¿Ï·á ÈÄ¿¡ ÀçÂ÷ »ùÇøµÀ» °³½ÃÇÒ ¶§ ¹æ¹ýÀ» ÀÌÇÏ¿¡ ±âÀçÇÕ´Ï´Ù.
1) DMA Àü¼Û ¿Ï·á Interrupt ¼ö½Å½Ã
ÁöÁ¤ °Ç¼ö ºÐÀÇ »ùÇøµÀÌ ¿Ï·áÇϸé, DMA Àü¼Û ¿Ï·á ÀÎÅÍ·´Æ®°¡ µé¾î°©´Ï´Ù.±× ¶§¿¡ ½ºÄ³ÅÍÀÇ Àç¼³Á¤À» ½Ç½ÃÇÕ´Ï´Ù.½ºÄ³ÅÍÀç¼³Á¤ÀÇ ¿¹¸¦ ÀÌÇÏ¿¡
±âÀçÇÕ´Ï´Ù.
¡Ø½ºÄ³ÅÍÀç¼³Á¤ÀÇ ¿¹
// ÀÎÅÍ·´Æ® ¸¶½ºÅ©(0 x3C~0x3D)
outhword((WORD)( dwBaseAddr + 0x3C), 0x0000); // ADC ÀüÇÒÆ÷ÇÔ ±ÝÁö
¿©±â¿¡¼´Â, ½ºÄ³ÅÍÀç¼³Á¤(¡¸3.3.DMA Àü¼Û ¹öÆÛÀÇ ½ºÄ³ÅÍ µî·Ï¡¹À» ÂüÁ¶)¸¦ ½Ç½ÃÇÕ´Ï´Ù.
// ÀÎÅÍ·´Æ® ¸¶½ºÅ©(0 x3C~0x3D)
outhword((WORD)( dwBaseAddr + 0x3C), 0x8F77);¡¡// ÀÎÅÍ·´Æ® À¯È¿
|
2) ¼ÒÇÁÆ®¿þ¾î Æ®¸®°Å½Ã
½ºÄ³ÅÍÀÇ Àç¼³Á¤ ÈÄ¿¡, ¡¸3.6.»ùÇøµÀÇ °³½Ã ¹æ¹ý¡¹À¸·Î ±âÀçÇÑ ¼ø¼¸¦ ½ÇÇàÇϸé ÀçÂ÷ »ùÇøµÀÌ °³½ÃµË´Ï´Ù.
3) ¿ÜºÎ Æ®¸®°Å½Ã
½ºÄ³ÅÍÀÇ Àç¼³Á¤ ÈÄ¿¡, ¡¸3.6.»ùÇøµÀÇ °³½Ã ¹æ¹ý¡¹À¸·Î ±âÀçÇÑ ¼ø¼¸¦ ½ÇÇàÇÑ ÈÄ, ¿ÜºÎ Æ®¸®°Å¸¦ °ËÃâÇÑ Å¸Àֿ̹¡ »ùÇøµÀÌ
°³½ÃµË´Ï´Ù.
¡Ø¸®Æ®¸®°ÅÀÇ ÀÌ¿ë
¿ÜºÎ Æ®¸®°Å¿¡¼´Â, ¸®Æ®¸®°Å¿¡ ÀÇÇØ ¿¬¼ÓÇØ »ùÇøµÀ» °³½Ã½Ãų ¼ö ÀÖ½À´Ï´Ù.
¸®Æ®¸®°Å¶õ, ÃÖÃÊ·Î ±âº»ÀÇ ¼³Á¤À» ½Ç½ÃÇØ µÎ¸é, ÀÌÈÄ´Â ¿ÜºÎ
Æ®¸®°Å¸¸À¸·Î »ùÇøµÀÌ °³½ÃµÇ´Â ±â´ÉÀÔ´Ï´Ù. ±âº»ÀÇ ¼³Á¤À̶õ, ÃʱâȺ¸´Ù·ÎºÎÅÍ ¼ÒÇÁÆ®¿þ¾î Æ®¸®°Å ¹ßÇà±îÁöÀÇ Ã³¸®·Î, ¿ÜºÎ Æ®¸®°Å ¼³Á¤À» ÇßÀ»
°æ¿ìÀÔ´Ï´Ù. ¸®Æ®¸®°Å ÀÌ¿ëÀÇ ÁÖÀÇÁ¡À¸·Î¼´Â, ½ºÄ³Å͸¦ Ŭ¸®¾î ÇØ ¹ö¸®¸é ¸®Æ®¸®°Å¿¡ ÀÇÇÑ
»ùÇøµÀÌ °³½ÃµÇÁö ¾Ê´Â °ÍÀÔ´Ï´Ù. µû¶ó¼, º»Çؼ³ÀÇ ¿¹¿¡¼´Â ½ºÄ³Å͸¦ Ŭ¸®¾î Çϱâ À§ÇØ ¸®Æ®¸®°Å´Â »ç¿ë ÇÒ ¼ö
¾ø½À´Ï´Ù. |