INtime Tech

 

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


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

10¿ù 10ÀÏ···PCI º¸µå¸¦ °ËÃâÇÒ ¼ö ¾ø´Ù!?

¾î¶»°Ô Çß´Ü ¸»Àΰ¡?!! PciFindDevice() ¾î°¼­ °ËÃâÇÒ ¼ö ¾ø´Â °ÍÀÎÁö?

¿Ö?

º¸µå´Â Á¦´ë·Î »ðÀÔÇϰí Àִµ¥···. Å×½ºÆ®¸¦ À§ÇØ INtime À§Àúµå·Î ÀÚµ¿ »ý¼ºµÇ´Â À¯Æ¿¸®Æ¼ ÄÝ GetPciInterruptLevel()·Î ½ÃÇèÇØ º¸¾ÒÁö¸¸, °á°ú´Â ¸¶Âù°¡Áö¾ú´ø °ÍÀÔ´Ï´Ù..

ÀÌÇÏ´Â GetPciInterruptLevel()ÀÔ´Ï´Ù£º


/*****************************************************************************
* 
* FUNCTION: GetPciInterruptLevel
* 
* PARAMETERS: 1. PCI  Vendor ID 
*             2. PCI Device ID 
*  
* RETURNS: encode µÈ ÀÎÅÍ·´Æ® ·¹º§, ¶Ç´Â ½ÇÆÐ½Ã   0xffff 
* 
\*****************************************************************************/   
WORD ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡GetPciInterruptLevel(
   WORD                   wPciVendorId, 
   WORD                   wPciDeviceId)                     
{
   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 };
  PCIDEV	                     dev; 

  dev.wVendorId = wPciVendorId;
  dev.wDeviceId = wPciDeviceId;                      
  dev.wDeviceIndex= 0; ¡¡¡¡¡¡¡¡// óÀ½¿¡ °ËÃâµÈ µð¹ÙÀ̽º  
  if (!PciFindDevice(&dev))     
          return 0xFFFF; ¡¡¡¡¡¡// µð¹ÙÀ̽º´Â ¹ß°ßµÇÁö ¾Ê´Â´Ù 

  if (dev.byIntLine > 15) 
           return 0xFFFF; ¡¡¡¡¡¡// ÀÌ µð¹ÙÀ̽º¿¡´Â IRQ°¡ ¾ø´ÂÁö, ÀÎÁ¤¹ÞÁö ¸øÇÑ IRQÄ¡ÀÎ 
  return irq2level[dev.byIntLine];                      
} 
ÀÌ ÇÔ¼öÀÇ Á¦ÀÏ Àμö´Â º¥´õ ID, Á¦2 Àμö´Â µð¹ÙÀ̽º IDÀÔ´Ï´Ù. ³ª´Â ÀÌ ÇÔ¼ö¿¡ Á÷Á¢ º¥´õ ID, µð¹ÙÀ̽º ID¸¦ ÁöÁ¤Çß´ø£º

WORD intLevel; IntLevel = GetPciInterruptLevel( 1221, 8153 );


µµÁß °æ°ú

°á°ú 0 xffff°¡ ¹ÝȯµÇ¾ú½À´Ï´Ù. ¾î°¼­Àϱî¿ä?

(ȸ´ä) º¥´õ ID, µð¹ÙÀ̽º ID´Â ¿Ã¹Ù¸¦±î¿ä? CONTEC PCI ¹ö½º ´ëÀÀºñÀý¿¬Çü ´Ùä³Î ¾Æ³¯·Î±× ÀÔ·Â º¸µå¡¡AD12-16(PCI)ÀÇ º¥´õ ID´Â 0 x1221, µð¹ÙÀ̽º ID´Â 0 x8153¿¹¿ä.


±×·¯´Ï±î º¥´õ ID£º1221, µð¹ÙÀ̽º ID£º8153¿¡····(Àº)´Â!?!

¡ì¶Ç···¶Ç ÇØ ¹ö·È´Ù!!¡í


0x1221(16 Áø¼ö) = 4641(10 Áø¼ö) ¡¡³ªÀÇ ÁöÁ¤ÇÑ ¼öÄ¡£º1221(10 Áø¼ö)
0x8153(16 Áø¼ö) = 33017(10 Áø¼ö)¡¡³ªÀÇ ÁöÁ¤ÇÑ ¼öÄ¡£º8153(10 Áø¼ö)


¡¸ ¾ÆÁ÷ 10 Áø¼ö¿Í 16 Áø¼öÀÇ Â÷ÀÌ¿¡ ÀÚ¿¬¿¡ ´ëÀÀÇÒ ¼ö ¾ø´Â ³ªÀÇ ºÎÁÖÀÇ·Î ÀÇÇÑ ½Ç¼ö¿´½À´Ï´Ù···.¡¹


INtime À§ÀúµåÀÇ ¼¼Ä¡±â ó¸® ´ÙÀ̾ó·Î±×
¿©±â¼­ ÀÔ·ÂÇÑ °ªÀ¸·Î 10 Áø¼ö, 16 Áø¼ö¸¦ ÀǽÄÇÏÁö ¾Ê°í, º¥´õ ID(Vendor ID) 1221, µð¹ÙÀ̽º ID(Device ID) 8153À¸·Î ÀÔ·ÂÇØ ¹ö¸®°í ÀÖ¾ú°ÚÁö¿ä.
ÀÌ ÈÄ ¿Ã¹Ù¸£°Ô ÁöÁ¤Çϸé, ¿ÏÀüÈ÷ ¹®Á¦ ¾ø°Ô º¸µå¸¦ ÀνÄÇϰí ÀÖ´Â °ÍÀ» ¾Ë¾Ò½À´Ï´Ù.

ÀÚµ¿ »ý¼ºµÈ ¿ø½Ã ÄÚµå»ó¿¡¼­´Â£º

/*****************************************************************************
*
* FUNCTION:    nt1Init
*
* PARAMETERS:  ¾øÀ½
*
* RETURNS:     BOOL ó¸®ÀÇ ¼º°øÀ» ÀǹÌÇÕ´Ï´Ù
*
* DESCRIPTION: ÀÎÅÍ·´Æ®¸¦ Ãë±ÞÇÒ ¼ö ÀÖ´Â »óÅ·Π¼³Á¤ÇÕ´Ï´Ù
*                ÀÎÅÍ·´Æ® 󸮱â¿Í ³¢¾îµé¾î ½º·¹µå¸¦ »ç¿ëÇÕ´Ï´Ù
\*****************************************************************************/

BOOL Int1Init(void)
{
   wLevel		= GetPciInterruptLevel(0x1221,0x8153);
   if(0xFFFF == wLevel)                        ¿©±â¼­ ÁöÁ¤ÇØ ÀÖ´Â
          return FALSE;                        

   SetRtProcessMaxPriority(NULL_RTHANDLE, 0);

   return (CreateRtThread(0, Int1Thread, 4096, 0)
                           != BAD_RTHANDLE);
}

°á°ú

±×·¯¸é ¡¸ÀÎÅÍ·´Æ® ·¹º§¡¹·Î ÁöÁ¤ÇÏ´Â °Í "PCI based"¶õ?

(ȸ´ä)
PCI ¹ö½º µð¹ÙÀ̽ºÀÇ °æ¿ì, ±× µ¿ÀÛ ¸ðµå¿¡ ÀÇÇØ OS°¡ PCI ¹ö½ºÀÇ IRQ°¡ µ¿ÀûÀ¸·Î ¼³Á¤ÇÏ´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù. "PCI based"¿¡¼­´Â PCIÀÇ ÀÎÅÍ·´Æ® ·¹º§À» ÃëµæÇÏ´Â ÇÔ¼ö GetPciInterruptLevel()¸¦ »ç¿ëÇØ IRQ ·¹º§À» ÃëµæÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.



¡¸°ú¿¬···¡¹



HOME | INtime