INtime Tech

 

¡¸INtime documentary¡¹~INtime ÃʽÉÀÚ Ã¼Çè±â


PCI º¸µå¸¦ °ËÃâÇØ¶ó!!

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