|
INtime
Tech
¡¸INtime documentary¡¹~INtime ÃʽÉÀÚ
üÇè±â
 |
10¿ù 14ÀÏ···º£À̽º ÁÖ¼Ò°¡ ¾î±ß³´Ù°í! |
|
PCI µð¹ÙÀ̽ºÀÇ °ËÃâ ³í¸®ºÎ¿¡¼, GetPciInterruptLevel()¸¦ Ä«ÇÇÇÏ°í ¼öÁ¤ÇØ ÀÎÅÍ·´Æ® ·¹º§ ¿Ü¿¡ º£À̽º ÁÖ¼Ò¸¦
ÃëµæÇϵµ·Ï ÇÁ·Î±×·¥ ÇÑ
ÇÔ¼öÀÔ´Ï´Ù(FindAnalogBoard())
|
/***********************************************************************/
/* ÇÔ¼ö¸í £º FindAnalogBord ¡¡¡¡ */
/* ¼³¸í £º ¾Æ³¯·Î±× º¸µå °Ë»ö ¡¡¡¡¡¡ */
/* Àμö £º ¾øÀ½ ¡¡ */
/* ¹Ýȯ°ª £º Á¤»ó£ºTRUE¡¡¡¡¿¡·¯½Ã£ºFALSE */
/************************************************************************/
BOOL FindAnalogBord(void)
{
PCIDEV PciDevInfo; /* PCI Device Infomation*/
BYTE ret; /* PCI µð¹ÙÀ̽º °Ë»ö¿ë º¯¼ö*/
static const BYTE irq2level[] = /* ¼¼Ä¡±â ·¹º§*/
{
IRQ0_LEVEL, IRQ1_LEVEL, IRQ2_LEVEL, IRQ3_LEVEL,
IRQ4_LEVEL, IRQ5_LEVEL, IRQ6_LEVEL, IRQ7_LEVEL,
IRQ8_LEVEL, IRQ9_LEVEL, IRQ10_LEVEL, IRQ11_LEVEL,
IRQ12_LEVEL, IRQ13_LEVEL, IRQ14_LEVEL, IRQ15_LEVEL
};
strInfo.analogAdd = 0;
/* º¥´õ ID¿Í µð¹ÙÀ̽º ID¸¦ ´ëÀÔ*/
PciDevInfo.wVendorId = ANALOG_VENDORI...............(1)
PciDevInfo.wDeviceId = ANALOG_DEVICEI...............(2)
PciDevInfo.wDeviceIndex= 0;
/* +++ µð¹ÙÀ̽º °Ë»ö +++*/
// º¥´õ ID, µð¹ÙÀ̽º IDº¸´Ù PCI º¸µåÀÇ °Ë»öÀ» ½Ç½ÃÇÏ´Â
ret = PciFindDevice(&PciDevInfo...............(3)
/* +++ µð¹ÙÀ̽º °Ë»ö¿¡ ÇØ´çÇÏÁö ¾Ê¾Ò´ÂÁö || IRQ ÆÇÁ¤¡¡+++*/
if( (ret == FALSE) || (PciDevInfo.byIntLine > 15)...............(4)
{
/* µð¹ÙÀ̽º´Â ¹ß°ßµÇÁö ¾Ê±â ¶§¹®¿¡ ¿¡·¯ Äڵ带 µ¹·ÁÁÖ´Â*/
return FALSE;
}
/* PCI ÄÁÇDZַ¹ÀÌ¼Ç ·¹Áö½ºÅÍ ±âÀÔ */
PciSetConfigRegister(&PciDevInfo,0x04,T_BYTE,0x01);
/* ÁÖ¼Ò Ãëµæ */
strInfo.analogAdd = (WORD)PciDevInfo.dwBaseAddr[0...............(5)
printf("Analog Board Base Address=%4x\n",PciDevInfo.dwBaseAddr[0]);
// »õÄ¡±â ·¹º§À» ¼³Á¤ÇÏ´Â
strInfo.wIntLevel = irq2level[PciDevInfo.byIntLine..............(6)
printf("Interrupt Level=%4x\n",PciDevInfo.wIntLevel);
return TRUE;
}
|
| strInfoÀº ±Û·Î¹ú µ¥ÀÌÅÍ ±¸Á¶Ã¼
|
(1) º¥´õ ID¸¦ PCIDEV ±¸Á¶Ã¼¿¡ °Ý³³ (2) µð¹ÙÀ̽º ID¸¦ PCIDEV ±¸Á¶Ã¼¿¡ °Ý³³ (3)
PciFindDevice() ÄÝ (4) PCI µð¹ÙÀ̽ºÀÇ °ËÃâÀ» ÆÇº° (5) º£À̽º ÁÖ¼Ò¸¦ Ãëµæ (6) ¼¼Ä¡±â ·¹º§À»
Ãëµæ | |
| µµÁß °æ°ú |
|
»õ·Ó°Ô °ËÃâ ³í¸®ºÎ¸¦ ÀÌ ³í¸®·Î º¯°æÇØ ½ÇÇàÇØ º¸¾Ò´Âµ¥
Analog Board Base Address=C001 Interrupt
Level=0020
¿Í ÁÖ¼Ò°¡ ¹ÝȯµÇ¾ú½À´Ï´Ù.
¡ìÀ̰ÍÀ¸·Î º£À̽º
ÁÖ¼Ò¸¦ Àâ¾Ò°í, ÀÎÅÍ·´Æ® ·¹º§µµ ÃëµæÇÒ ¼ö ÀÖ¾ú´Ù¡í
¿ì¼±, ¿©±â±îÁö ¿ÔÀ¸¹Ç·Î ÇÑ ¹ø ¸Å´ÏÀú¿¡°Ô º¸°íÇϱâ·Î
Çß½À´Ï´Ù. ¸Å´ÏÀú¿¡°Ô ÇöÀçÀÇ »óȲÀ» ¼³¸íÇØ, ÇöÄڵ带 ½ÇÇàÇØ º¸À̸鷷·
¡¸Àú°Í?
º£À̽º ÁÖ¼Ò´Â À̰ÍÀ¸·Î ÁÁÀº °ÍÀÎÁö?¡¹
¡ìÀ̺Á
À̺Á, ´õ ÀÌ»óÀº ÇÒ ¼ö ¾øÀ» Á¤µµ·Î Á¦´ë·Î »ç¿ëÇÒ »ý°¢À̾ߡ···£¡£¡¡í
Á¶¿ëÈ÷ PCI ¹ö½º »ó¼¼Ã¥À» ²¨³»,
¡¸À̰Ϳ¡ ´ëÇØ ¸»ÇÏ´Â °ÍÀ» Àذí ÀÖ¾ú´Ù···£¡¡¹ ¡¸·······················.¡¹
¡ì³×~···¹«¾ù¿¡ ´ëÇØ···£¿¡í
¡¸º£À̽º ·¹Áö½ºÅÍ¿¡´Â I/O°ø°£Àΰ¡, ¸Þ¸ð¸® °ø°£Àΰ¡¸¦ ½Äº°ÇÏ´Â Ç÷¡±×(I/O°ø°£ ÀεðÄÉÀÌÅÍ(indicator))°¡
ÀÖ½À´Ï´Ù···.¡¹
¡¸
····¡¹ |
 |
| ¡¼I/O°ø°£¿ë º£À̽º·¾îµå·¹½º ·¹Áö½ºÅÍÀÇ °æ¿ì¡½ |
|

| | | |
|

|
°á°ú |
¡¸ADº¸µåÀÇ °æ¿ì, ¿©±â´Â I/O°ø°£À̱⠶§¹®¿¡ º£À̽º ÁÖ¼ÒÀÇ ¸»¹Ì ºñÆ®¿¡ 1ÀÌ ²÷°í ÀÖÀ»
°ÍÀÔ´Ï´Ù.¡¹
¡¸···°ú¿¬···±×·¡¼ C001°ú 1ÀÌ ¸»¹Ì ºñÆ®¿¡ 1ÀÌ ²÷°í ÀÖ´Â °ÍÀ̱º¿ä···±×¸®°í ±×·¯¸é ¾î¶»°Ô Çϸé ÁÁÀº
°ÍÀϱî¿ä?¡¹
¡¸´Ü¼øÇÏ°Ô ÃëµæÇÑ º£À̽º ÁÖ¼ÒÀÇ ¸»¹Ì 2ÀÚ¸®¼ö(ÀÌ °æ¿ì ¿¹¾à ºÎºÐµµ ºÒÅõ¸íÇϱâ
¶§¹®¿¡)¸¦ ¸¶½ºÅ© ÇÁ·Î¼¼½Ì ÇÒ ¹æÇâÀ¸·Î ÁÁÀº °ÍÀÌ ¾Æ´Õ´Ï±î?¡¹
¡¸°ú¿¬···±× ¸»Àº, ÀÌ ºñÆ®¸¦ 0À¸·Î Çϵµ·Ï(µíÀÌ)
ÇÏ·Á¸é···¡¹
¡ì·······¸¶½ºÅ©£º1111111111111100
À̰ÍÀº·····0xFFFC·····£¿¡í
strInfo.analogAdd = (WORD)
PciDevInfo.dwBaseAddr[0]¡¡& 0 xFFFC;
¡¸ºù°íÀÔ´Ï´Ù!¡¹
¡¸ÀÌ °ªÀ» ÃëµæÇÑ º£À̽º ÁÖ¼Ò¿ÍÀÇ"¾Øµå"¸¦ ÃëÇϸé ÁÁ½À´Ï´Ù····¿Í ±¸!¡¹
|
| ¸Þ¸ð¸® °ø°£¿ë º£À̽º ¾îµå·¹½º ·¹Áö½ºÅÍÀÇ °æ¿ì |
|
º£À̽º ¾îµå·¹½º ·¹Áö½ºÅÍÀÇ °æ¿ì, ¸Þ¸ð¸® °ø°£, I/O°ø°£ÀÎÁö¸¦ ½Äº°ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.
¸»¹Ì ºñÆ®°¡ 0ÀÇ °æ¿ì, ¸Þ¸ð¸® °ø°£À¸·Î¼ »ç¿ëµÇ°í
ÀÖ½À´Ï´Ù. ¸»¹Ì ºñÆ®°¡ 1ÀÇ °æ¿ì, I/O°ø°£À¸·Î¼ »ç¿ëµÇ°í ÀÖ½À´Ï´Ù.
|
|

|
| ¸Þ¸ð¸® °ø°£¿ë º£À̽º ÁÖ¼ÒÀÇ °æ¿ì´Â ¸»¹Ì ºñÆ®°¡ ¸Þ¸ð¸® °ø°£¿ë ÀεðÄÉÀÌÅÍ(indicator)À̸ç, ÀÌ °ªÀÌ 0ÀÌ
µË´Ï´Ù. | | |
HOME |
INtime |