Interface誌のPIOの解説を読んだが、まったく理解できなかった。
しょうがないので、先人たちの知恵をGoogleで探してようやく少し理解できた。
ヒントはこのサイトにあった。
https://qiita.com/keyyum/items/aa171aa295b714bb8467
先ず私が誤解していたのが
OUT命令だった。
OUT pins, 2
てっきり一つの端子から、TX FIFOに入ったデータが2ビット分で出来るのかと思っていたが、間違いで、イメージとしては2つの端子に出力するコマンドらしい。
よって下記のように書くと OSRからデータを引っ張ってきてOSRから2ビット分を2つの端子に出力するという事のようだ。
loop: pull ; TX_FIFOからOSRへデータをPULL out pins, 2 ; OSRから2bit分出力ポートへ jmp loop ; 先頭に戻る
もう一つ勘違いしていたのが、上記の命令を行った後、ようはTX FIFOからデータをpullするとデータは空になると思っていたが、FIFOのデータは空にならなく、下記プログラムのようにFIFOを書き換えるまではキープされるようだ。
pio_sm_put_blocking( pio, sm, 0x0001 ); /* ( GPIO3, GPIO2 ) = ( L, H ) */
/* TX FIFOにデータを書き込み */ sleep_us( 1 ); /* 1us待機 */ pio_sm_put_blocking( pio, sm, 0x0002 ); /* ( GPIO3, GPIO2 ) = ( H, L ) */ /* TX FIFOにデータを書き込み */
ここまで理解するのに1週間が掛かった。
0 件のコメント:
コメントを投稿