/***********************************************************************/
/* 関数名 : 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コンフィギュレーションレジスタ書き込み */
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;
}
|