wiringPiに関してドキュメントを一通り読みました。
翻訳した内容を、メモとして残します。
まずは、
wiringPi APIに関して
本家のざっと読みでしかないです。
https://projects.drogon.net/raspberry-pi/wiringpi/functions/■Setup Functions int wiringPiSetup(void)
int wiringPiSetupGpio(void)
int wiringPiSetupSys(void) Setup Functionsの一つは、プログラムの最初に呼ばなければいけません。
もし、
GPIOの初期化処理に失敗して戻り値-1が返された場合は、エラーナンバーより相談してください。
・int wiringPiSetup(void) これはwiringPi systemの初期化で、wiringPiピンナンバーを利用することを前提とします。
実際のBroadcom
GPIOピン番号を基礎とした、0~16の仮想ピンをマッピングしたものです
ピンページを確認してwiringPiピン配置と、Broadcom
GPIOの物理位置を見て下さい
wiringPiSetupGpio(void) これも上の関数と同じです。しかし、こちらはプログラムがBroadcom
GPIOのピン番号を直接呼び出すのを許します。
wiringPiSetupSys(void) これあ、wiringPiシステムを初期化しますが、 /sys/class/gpioインタフェースを使います。 むしろハードウェアの直接ダイレクトよりも
これはrootでなくてもCallすることができます
このモードのピン番号は、native Broadcom
GPIO番号です
Note:このモードでは、/sys/calss/gpioにてエクスポートされたピンだけを利用することができます
ピンをプログラムで呼び出す前に、事前にエクスポートしてください
シェルスクリプトで利用することができます
system()関数を使用しても使うことができます
また以下の関数のいくつかは、root権限でないと動きません。
General wiring functions ・void piMode(int pin,int mode) ピンのINPUT、OUTPUT、PWM_OUTPUTを設定します。
Note: wiringPi pin 1(BCM_
GPIO 18)は、PWM出力をサポートしています。
ピン番号は、ピンテーブルから取得される値です。
・void digitalWrite(int pin,int value) 引数pinのピンにHIGHかLOW(1か0)を設定します
・void digitalWriteByte(int value) 8つのGPIOに、8bitで設定した値を設定します
これは、8bitすべてを一回で制御するもっとも早い方法です
twiってなに?
・void pwmWrite(int pin , int value) PWMレジスタに値を書き込みます。0~1024の間をとります。
もう一度書きますが、PWMをサポートしているのは、pin1(BCM_GPIO18)だけです
・int digitalRead(int pin) 引数で与えられたpinの値を戻り値とし返します。
HighまたはLowのロジックレベルで戻します
・void pullUpDnControl(int pin,int pud) これは、引数のピンのプルアップ、プルダウンを設定します。
事前に該当のピンをINPUTに設定しておかないといけません
Arduinoとは違って、BCM2835は、プルアップ、プルダウン内部抵抗を両方持っています。
パラメータPDU_OFF(プルアップ/ダウンなし)、PUD_DOWN(グランド接地)、PUD_UP(3.3Vに釣る)
の値をとりえます
この関数は、Sys modeだと効果がありません。
プルアップ/プルダウンををアクティブにしたいのであれば、
プログラムを起動させる前に、スクリプトなどでGPIO設定を行ってください
PWM Control Sys mode時は、PWMコントロールはできません
・pwmSetMode(int mode) PWMは、"balanced"と、"mark:space"の2種類のモードがあります。
"mark:space"は、伝統的なモードですが、既定値は"balanced"です。
"PWM_MODE_BAL"と、"PWM_MODE_MS"を引数として与えることで、切り替えることができます
・pwmSetRange(unsigned int range) PWMジェネレータ内の範囲レジスタを設定します。
既定値は1024です。
# よくわからない
・pwmSetClock(int divisor) PWMクロックの除数を設定します。
Timing functions ・unsigned int millis(void) wiringPiSetup関数(のどれか)を呼んでからミリ秒を示す数値を返します。
49日毎に、32bit符号なしの値を返します
・void delay(unsigned int howLong) 引数howLongで与えられた数値のミリ秒分、処理をポーズします。
Linuxのマルチタスクの性質上、指定した値より長くなる可能性があります。
最大ディレイは、符号なし32bit整数の最大値から約49日です
・void delayMicroseconds(unsigned int howLong) 引数howLongで与えられた数値のマイクロ秒分、処理をポーズします。
Linuxのマルチタスクの性質上、指定した値より長くなる可能性があります。
最大ディレイは、符号なし32bit整数の最大値から約71分です
Program/Thread Priority ・int piHiPri(int priority) より優先度の高いプログラムをリアルタイムで動作させられるように、優先度をシフトできます。
優先度パラメータは、0(初期値)~99(最大)の間で設定できます
これは、プログラム自体を早くするものではないですが、タイムスライスで割り当てられる時間を多くします
優先度パラメータは相対的なものなので、他のプログラムの営業を受けます
戻り値が0の時は成功です。1はエラー
エラーナンバーが返されたら、慣例に従ってグローバル変数 errnoと相談してください
root権限にて動作している時だけ優先度を変更できます。
もしrootでないときに、この関数を呼ばれても何も起きません
Interrupt GPIO割り込みhandingパッチを当てられたカーネルで、プログラムに割り込み待ち処理が可能になります
割り込みを待つ間、プロセッサ―の処理を解放します。
GPIOの立ち上がり割り込み、立下りの両方で割り込みを設定することができます。
waitForInterrupt()関数は廃止されます。
より簡単で新しい、wiringPiLSR()関数を使ってください
・int waitForInterrupt(int pin,int timeOut) 関数が呼ばれると、割り込みイベントが起きるまで待ち、プログラムが停止状態になります。
timeOutパラメータのミリ秒分を設定することができます。また-1を設定することで、
永久に割り込みを待つこともできます
エラーが起きた場合は、-1が戻されます。errnoも適切に設定されます。
タイムアウトの時は0が返されます。割り込み成功した時は1が返されます。
waitForInterruptの関数を呼ぶ前に、GPIOの初期化を行ってください。
このgpioプログラムを行うための唯一の方法は、それぞれスクリプトか、System()関数です
GPIO 0の立下り割り込みを待ちたいのであれば、下のように設定してください
gpio edge 0 falling
プログラムを実行する前に
・int wiringPiISR(int pin,int edgeType,void (*function)(void)) この関数は、指定されたピンの割り込みを待ちます。
edgeTypeのパラメータは、INT_EDGE_FALLING,
INT_EDGE_RISING,
INT_EDGE_BOTH,
INT_EDGE_SETUP
???
ピンの番号は、共通モード( native wiringPi , BCM_GPIO, Sys )で供給されます。
ルートで動作させる必要も、動作モードをヘラ部必要はありません。
割り込みが入ると、この関数が呼ばれます。
多重割り込みの記述があるが、どういう意味かわからん
この関数は、高い優先度で動作し、メインプログラムと同時に実行されます。
グローバル変数や、オープンファイルハンドルのフルアクセスを持っています
詳細な使い方は、isr.cの例を見てください
Concurrent Processing(multi-threading) wiringPiは、Linux implementtation of Posix threadsへの簡単なインタフェースだけでなく、
mutexへのアクセスも実装しています。
これらの機能は、メインプログラム内の一つの処理として作成することができ、
これらの機能を使用して、安全に変数へ渡すことができます。
・int piThreadCreate(name) Misc.Functions ・piBoardRev(void) RaspberryPiのボードリビジョンを返す。1or2
・wpiPinToGpin(int wPiPin) wiringPiから割り当てられているBCM_GPIOピンの番号を戻す
ボードのリビジョンも考慮に入っています
・setPadDrive(int group,int value) 特定グループのピンのために、pad driverの強度を設定することができる。
3グループのピンと、ドライブ強度を0~7があります
詳細を知っているのでなければ、これを触らないでください
スポンサーサイト
- 2013/05/01(水) 15:11:24|
- Raspberry Pi
-
| トラックバック:0
-
| コメント:0