総合手引 | セクション 9 | English | オプション |
#include <sys/types.h>
#include <dev/ppbus/ppbconf.h>
#include <dev/ppbus/ppb_msq.h>
この文書の目的は以下を得るために、 開発者がマイクロシーケンサ機構を使用するように支援することです。
マイクロシーケンスを使用する前に、 ppc(4) マイクロシーケンサの実装および vpo(4) の中のこれをどのように使用するかの例を見ることが、奨励されています。
マスクマクロは、パラレルポートレジスタの個々の有効なビットのために 標準 ppbus インクルードファイルの中で定義されています。
ビット | 名前 | 解説 |
7 | nBUSY | パラレルポートの Busy 信号の反転 |
6 | nACK | パラレルポートの nAck 信号 |
5 | PERROR | パラレルポートの PERROR 信号 |
4 | SELECT | パラレルポートの Select 信号 |
3 | nFAULT | パラレルポートの nFault 信号 |
その他は予約済みで、読込み時の結果は未定義です。
ビット | 名前 | 解説 |
5 | PCD | 拡張モード時の方向ビット |
4 | IRQENABLE | 1 で nAck の立ち上りで割り込み有効 |
3 | SELECTIN | パラレルポートの nSelect 信号の反転を出力 |
2 | nINIT | パラレルポートの nInit 信号を出力 |
1 | AUTOFEED | パラレルポートの nAutoFd 信号の反転を出力 |
0 | STROBE | パラレルポートの nStrobe 信号の反転を出力 |
利用可能なマイクロシーケンスは以下のとおりです。
#define MS_OP_GET 0 /* get <ptr>, <len> */ #define MS_OP_PUT 1 /* put <ptr>, <len> */ #define MS_OP_RFETCH 2 /* rfetch <reg>, <mask>, <ptr> */ #define MS_OP_RSET 3 /* rset <reg>, <mask>, <mask> */ #define MS_OP_RASSERT 4 /* rassert <reg>, <mask> */ #define MS_OP_DELAY 5 /* delay <val> */ #define MS_OP_SET 6 /* set <val> */ #define MS_OP_DBRA 7 /* dbra <offset> */ #define MS_OP_BRSET 8 /* brset <mask>, <offset> */ #define MS_OP_BRCLEAR 9 /* brclear <mask>, <offset> */ #define MS_OP_RET 10 /* ret <retcode> */ #define MS_OP_C_CALL 11 /* c_call <function>, <parameter> */ #define MS_OP_PTR 12 /* ptr <pointer> */ #define MS_OP_ADELAY 13 /* adelay <val> */ #define MS_OP_BRSTAT 14 /* brstat <mask>, <mask>, <offset> */ #define MS_OP_SUBRET 15 /* subret <code> */ #define MS_OP_CALL 16 /* call <microsequence> */ #define MS_OP_RASSERT_P 17 /* rassert_p <iter>, <reg> */ #define MS_OP_RFETCH_P 18 /* rfetch_p <iter>, <reg>, <mask> */ #define MS_OP_TRIG 19 /* trigger <reg>, <len>, <array> */
このデータは全てではない幾つかのマイクロインストラクションによって 変更されます。
パラメータ:
定義済みマクロ: MS_RFETCH(reg,mask,ptr)
パラメータ:
定義済みマクロ: MS_RSET(reg,assert,clear)
パラメータ:
定義済みマクロ: MS_RASSERT(reg,byte)
パラメータ:
定義済みマクロ: MS_DELAY(delay)
パラメータ:
定義済みマクロ: MS_SET(accum)
パラメータ:
定義済みマクロ: MS_DBRA(offset)
パラメータ:
定義済みマクロ: MS_BRSET(mask,offset)
パラメータ:
定義済みマクロ: MS_BRCLEAR(mask,offset)
パラメータ:
定義済みマクロ: MS_RET(code)
パラメータ:
C 関数は int(*)(void *p, char *ptr) と宣言されることになっています。 ptr パラメータは現在走査されているバッファの中の現在位置です。
定義済みマクロ: MS_C_CALL(func,param)
パラメータ:
定義済みマクロ: MS_PTR(ptr)
パラメータ:
定義済みマクロ: MS_ADELAY(delay)
パラメータ:
定義済みマクロ: MS_BRSTAT(asserted_bits,clear_bits,offset)
パラメータはありません。
定義済みマクロ: MS_SUBRET()
パラメータ:
定義済みマクロ: MS_CALL(microseq)
パラメータ:
定義済みマクロ: MS_RASSERT_P(iter,reg)
パラメータ:
定義済みマクロ: MS_RFETCH_P(iter,reg,mask)
パラメータ:
定義済みマクロ: MS_TRIG(reg,len,array)
union ppb_insarg { int i; char c; void *p; int (* f)(void *, char *); };struct ppb_microseq { int opcode; /* マイクロインストラクション opcode */ union ppb_insarg arg[PPB_MS_MAXARGS]; /* 引数 */ };
struct ppb_microseq select_microseq[] = {/* パラメータリスト */ #define SELECT_TARGET MS_PARAM(0, 1, MS_TYP_INT) #define SELECT_INITIATOR MS_PARAM(3, 1, MS_TYP_INT)
/* 出力するための選択コマンドの送信 */ MS_DASS(MS_UNKNOWN), MS_CASS(H_nAUTO | H_nSELIN | H_INIT | H_STROBE), MS_CASS( H_AUTO | H_nSELIN | H_INIT | H_STROBE), MS_DASS(MS_UNKNOWN), MS_CASS( H_AUTO | H_nSELIN | H_nINIT | H_STROBE),
/* 出力の準備ができるまで待ちます */ MS_SET(VP0_SELTMO), /* loop: */ MS_BRSET(H_ACK, 2 /* ready */), MS_DBRA(-2 /* loop */), /* error: */ MS_RET(1), /* ready: */ MS_RET(0) };
ここで、幾つかのパラメータが未定義でマイクロシーケンスの実行の前に 満たされなければなりません。 個々のマイクロシーケンスを初期化するために、ppb_MS_init_msq() 関数を 以下のように使用するべきです。
ppb_MS_init_msq(select_microseq, 2, SELECT_TARGET, 1 << target, SELECT_INITIATOR, 1 << initiator);
それからマイクロシーケンスを実行します。
ポートのトリガ時は、許可されている最大の遅延は 255 マイクロ秒です。
MICROSEQ (9) | June 6, 1998 |
総合手引 | セクション 9 | English | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.
“ | How do you pronounce UNIX ? You Nix ! | ” |