2

私の質問は、この関数 XGpio_SetDataDirection が C で行うことです。たとえば、 XGpio_SetDataDirection (&gp_out, 1, 0x00) ?

4

2 に答える 2

2

Microblaze ドライバーの API ドキュメントをデザインから直接検索/生成できます。たとえば、Xilinx Platform Studio で Microblaze コアを右クリックすると、メニュー項目 [Driver] / [View API Documentation] が表示されます。そこからxgpioドライバーに移動すると、次のXGpio_SetDataDirectionように表示されます。

void XGpio_SetDataDirection (XGpio *      InstancePtr,
                             unsigned     Channel,
                             u32          DirectionMask
                            )     

指定した GPIO チャネルのすべてのディスクリート信号の入出力方向を設定します。

パラメーター:

  • InstancePtr 作業対象の XGpio インスタンスへのポインタです。
  • Channel 操作する GPIO (1 または 2) のチャネルが含まれます。
  • DirectionMask どの離散が入力でどれが出力であるかを指定するビットマスクです。0 に設定されたビットは出力であり、1 に設定されたビットは入力です。

戻り値: なし。

注: この関数を 1 以外のチャネルで使用する場合、ハードウェアはデュアル チャネル用に構築する必要があります。そうでない場合、この関数はアサートします。

したがって、あなたのケースXGpio_SetDataDirection (&gp_out, 1, 0x00)では、Microblaze CPU コアの出力として GPIO ポート (LED を使用) を設定します。

于 2013-06-06T16:42:49.340 に答える
0

ライブラリ関数です。これは xgpio.c ファイルで確認できます。この男の定義は次のとおりです。

  void XGpio_SetDataDirection(XGpio *InstancePtr, unsigned Channel,
                u32 DirectionMask)
{
    Xil_AssertVoid(InstancePtr != NULL);
    Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
    Xil_AssertVoid((Channel == 1) ||
             ((Channel == 2) && (InstancePtr->IsDual == TRUE)));

    XGpio_WriteReg(InstancePtr->BaseAddress,
            ((Channel - 1) * XGPIO_CHAN_OFFSET) + XGPIO_TRI_OFFSET,
            DirectionMask);
}
于 2021-10-01T14:32:31.287 に答える