| 総合手引 | セクション 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.
| “ | "I liken starting one's computing career with Unix, say as an undergraduate, to being born in East Africa. It is intolerably hot, your body is covered with lice and flies, you are malnourished and you suffer from numerous curable diseases. But, as far as young East Africans can tell, this is simply the natural condition and they live within it. By the time they find out differently, it is too late. They already think that the writing of shell scripts is a natural act." | ” |
| — Ken Pier, Xerox PARC | ||