|
カテゴリ:NXT
最近やっとPSoCのI2Cスレーブの使い方がわかったので
NXTに繋いでいることにします まず、チップレベルデザインでプロジェクトを作成します ターゲットのICはCY8C27443にします User ModulesからDigital Comm→I2CHWをドラッグして配置します PSoCにはいくつかI2Cのモジュールがありますが、 スレーブで使えるのはこのI2CHWだけです このモジュールはPSoC内のハードウェアによって処理され その分使用出来るピンが限られています 配置するとどのオペレーションを使用するか聞いてきますので SlaveOperationを選択します 配置したI2CHWのパネルから Slave_addrを1 I2C Clockを50K Standard I2C PinをP[1]5-P[1]7 と設定します 次にmain.cを開きます プログラムはこんな感じ #include <m8c.h> // part specific constants and macros #include "PSoCAPI.h" // PSoC API definitions for all User Modules char readBuf[1] = {0}; char writeBuf[1] = {0}; void main(void) { BYTE status; //初期化処理 I2CHW_1_Start(); I2CHW_1_EnableSlave(); //送信、受信バッファを先頭に戻す I2CHW_1_InitRamRead(readBuf, sizeof(readBuf)); I2CHW_1_InitWrite(writeBuf, sizeof(writeBuf)); //割り込み有効 M8C_EnableGInt; I2CHW_1_EnableInt(); while(1) { //I2Cの受信確認 status = I2CHW_1_bReadI2CStatus(); //マスタからの書き込みが完了していたら if( status & I2CHW_WR_COMPLETE ) { //ステータスクリア I2CHW_1_ClrWrStatus(); //受信バッファを先頭に戻す I2CHW_1_InitWrite(writeBuf, sizeof(writeBuf)); //送信バッファを先頭に戻す I2CHW_1_InitRamRead(readBuf, sizeof(readBuf)); //超音波センサーリードコマンド確認 if (writeBuf[0] == 0x42) { //送信データを設定 readBuf[0] = 3; //ここでNXTに返却する値を決める } //受信バッファをクリア writeBuf[0] = 0; } } } (あいかわらずタブが反映されませんが^^;) 基本はハードが処理してくれますので タイミングに合わせて受信バッファを確認し 送信バッファに返却値を入れるだけです ただし、送信バッファに返却値を入れるのに時間が掛かると バッファの次の値が送信されてしまいます (今回はバッファが1バイトなので前回の値が返るだけですが) ![]() お気に入りの記事を「いいね!」で応援しよう
Last updated
2010.09.20 11:33:00
[NXT] カテゴリの最新記事
|