ネームスペース twi


説明

twiネームスペース

TWI関連の資源を格納する名前空間。


関数

void init (unsigned int sclkMHz)
 TWI初期化関数
void start (void)
 TWIスタート関数
bool ISR (void)
 割込みハンドラ
void readAsync (unsigned char address, unsigned char data[], unsigned int count, void(*callback)(bool))
 TWIデバイスからの非同期書読み込み
void writeAsyncSub (unsigned char address, const unsigned char data[], unsigned int count, void(*callback)(bool))
 writeAsyncの下請け関数
void writeAsync (unsigned char address, const unsigned char data[], unsigned int count, void(*callback)(bool))
 TWIデバイスへの非同期書きこみ
void writeReadAsync (unsigned char wAddress, const unsigned char wData[], unsigned int wCount, unsigned char rAddress, const unsigned char rData[], unsigned int rCount, void(*callback)(bool))
 TWIデバイスへの非同期書き込み/読み込み

変数

unsigned char * dataPtr
 データ転送バッファ・アドレス
unsigned char * nextPtr
 Repeated Start後に使うバッファ・アドレス
unsigned char nextAddress = 0
 Repeated Start後のデバイス・アドレス
unsigned int transferedCount
 転送済みバイト数
unsigned int countToBeTransfer
 転送するバイト数
unsigned int nextTransfer
 Repeated Start後の転送バイト数
bool rcv
 受信フラグ
void(*) userCallBack (bool)
 コールバック関数


関数

void twi::init ( unsigned int  sclkMHz  ) 

TWI初期化関数

引数:
sclkMHz ADSP-BF537のSCLK周波数をMHz単位で指定する。133MHzのときには、133を指定する。
この関数は、ADSP-BF537の内蔵TWIを初期化する。最初にsclkパラメータを 元にプリスケーラーを設定する。次にデバイダを設定して、TWIのビット クロックを10kHzにする。

TWIはマスターに設定する。割込みは、データ送受信のほか、送受信完了(MCOMP)割込みも 許可する。

twi.cpp69 行で定義されています。

参照元 main().

00070     {
00071         *pTWI_CONTROL = TWI_ENA | (sclkMHz / 10);     // TWI内部クロックを10MHzに設定
00072         *pTWI_CLKDIV = CLKHI(50) | CLKLOW(50);        // Hihg/Low期間を250クロックに設定。およそ20kHzクロック
00073         *pTWI_FIFO_CTL = XMTFLUSH | RCVFLUSH;         // FIFOをフラッシュ
00074                 // 注意: 8bitデータ転送の場合、FIFOの設定は必ずXMTINTLEN=1, RCVINTLEN=0と
00075                 // すること。この場合、送信はFIFOが空なら割り込み、受信はFIFOが空で
00076                 // ないなら割り込みがかかる。この設定では送信FIFOのアンダーラン余裕が
00077                 // 減るが、repeated startの条件(最後の送信割り込みでDCNT=0のときMDIR反転)
00078                 // を満たすためには仕方がない。アンダーラン余裕は減ったといっても1byte送信
00079                 // 時間分の余裕はある。400kbpsのとき、これは20uSである。
00080         *pTWI_FIFO_CTL = XMTINTLEN;                   // 受信:1バイトでもデータがあれば割り込み。送信:バッファが空なら割り込み
00081         *pTWI_SLAVE_CTL = 0;                          // スレーブ機能をディセーブル
00082         *pSIC_IMASK |= IRQ_TWI;
00083     }

bool twi::ISR ( void   ) 

割込みハンドラ

戻り値:
割込みがTWI由来のものであった場合には真を、そうでない場合には偽を返す。
TWIに関連する割り込みをすべて処理する。、

twi.cpp89 行で定義されています。

参照先 countToBeTransferdataPtrnextAddressnextPtrnextTransferrcvreadAsync()transferedCountuserCallBack.

参照元 cec::ivg8().

00090     {
00091         unsigned int istat;
00092         
00093         if ( *pSIC_ISR & IRQ_TWI ){                         // TWI割り込みか
00094             istat = *pTWI_INT_STAT;                         // 割込み状況の取得
00095             if ( istat & XMTSERV ) {                        // 送信割り込みか
00096                 if ( countToBeTransfer == transferedCount ){// 全部送信したか
00097                     *pTWI_INT_MASK &= ~XMTSERV;             // 送信割り込み禁止
00098                     if ( nextAddress )                      // これはrepeated Startを使うか
00099                        *pTWI_MASTER_CTL |= MDIR;            // 転送方向を受信に
00100                 }
00101                 else {                                      // まだ送信が終わっていない
00102                     *pTWI_XMT_DATA8 = *(dataPtr++);         // 1バイト転送
00103                     transferedCount ++;                     // 転送バイト数更新
00104                 }
00105                 *pTWI_INT_STAT = XMTSERV;                   // 送信割り込みクリア
00106             }
00107             else if ( istat & RCVSERV ) {                   // 受信割り込みか
00108                 *(dataPtr++) = *pTWI_RCV_DATA8;             // 1バイト転送
00109                 *pTWI_INT_STAT = RCVSERV;                   // 受信割り込みクリア
00110                 transferedCount ++;                         // 転送バイト数更新
00111             }
00112             else if ( istat & MCOMP ){                      // データ転送完了か
00113                 *pTWI_INT_STAT = MCOMP;                     // 割込みクリア
00114                 *pTWI_INT_MASK &= ~(RCVSERV|XMTSERV|MCOMP); // 割り込みを禁止にする
00115                 if ( rcv ){                                 // 受信か
00116                     if ( *pTWI_FIFO_STAT & RCVSTAT ) {      // FIFOにデータが残っているか
00117                         *(dataPtr++) = *pTWI_RCV_DATA8;     // 最後の受信バイトを取得する
00118                         transferedCount ++;                 // 転送バイト数更新
00119                     }
00120                     if ( userCallBack )                     // 受信コールバックは必要か
00121                         userCallBack(true);                 // コールバック呼び出し
00122                 }
00123                 else{                                       // 送信終了
00124                     if ( nextAddress )                      // repoeated Startを使っているか
00125                         readAsync( nextAddress, nextPtr, nextTransfer, userCallBack );
00126                     else if ( userCallBack )                // 送信コールバックは必要か
00127                         userCallBack(false);                // コールバック呼び出し
00128                 }
00129             }
00130             ssync();
00131             return true;                                    // 割込み処理を行ったことを知らせる
00132         }                                                   // TWI割り込み処理終わり
00133         else
00134             return false;                                   // 割込み処理を行わなかった
00135     }

void twi::readAsync ( unsigned char  address,
unsigned char  data[],
unsigned int  count,
void(*)(bool)  callback 
)

TWIデバイスからの非同期書読み込み

引数:
address 読み込みを行うデバイスの7bit TWIアドレス。
data 読み込むデータの受信バッファ
count 読み込むデータ数。単位はバイト。
callback 受信完了割り込み時に呼び出されるコールバック関数。NULLを指定すると何も呼び出されない。
指定されたデバイスからの読み込みを行う。この関数は、デバイスへの読み込みを 内蔵TWIに指示すると、直ちに呼び出し元に戻る。デバイスへの読みこみが完了すると パラメータで指定したcallback関数が呼び出される。callback関数が呼ばれるまで、 呼び出し側はdata[]の内容を読み出してはならない。

twi.cpp137 行で定義されています。

参照先 countToBeTransferdataPtrnextAddressrcvtransferedCountuserCallBack.

参照元 ISR().

00143     {
00144         rcv = true;                         // 受信
00145         nextAddress = 0;                    // Repeated Startを使わない。
00146         countToBeTransfer = count;          // 受信するデータ数
00147         dataPtr = (unsigned char *)data;    // バッファ・ポインタをセット
00148         userCallBack = callback;            // コールバック関数をセット
00149         *pTWI_INT_MASK = 0;                 // 割り込みを一時禁止
00150         *pTWI_MASTER_ADDR = address;        // 7bit アドレスを設定
00151         transferedCount = 0;                // 受信済みデータ数
00152         *pTWI_MASTER_CTL = MEN | MDIR | DCNT & ( count << 6 ); // マスターモード、受信、アドレス設定
00153         *pTWI_INT_MASK = RCVSERV | MCOMP;   // 割込みマスク設定
00154     } 

void twi::start ( void   ) 

TWIスタート関数

この関数はダミー

twi.cpp85 行で定義されています。

参照元 main().

00086     {
00087     }

void twi::writeAsync ( unsigned char  address,
const unsigned char  data[],
unsigned int  count,
void(*)(bool)  callback 
)

TWIデバイスへの非同期書きこみ

引数:
address 書き込みを行うデバイスの7bit TWIアドレス。
data 書き込むデータの配列
count 書きこみデータ数。単位はバイト。
callback 送信完了割り込み時に呼び出されるコールバック関数。NULLを指定すると何も呼び出されない。
指定されたデバイスへの書き込みを行う。この関数は、デバイスへの書き込みを 内蔵TWIに指示すると、直ちに呼び出し元に戻る。デバイスへの書きこみが完了すると パラメータで指定したcallback関数が呼び出される。callback関数が呼ばれるまで、 呼び出し側はdata[]の内容を変更してはならない。

twi.cpp191 行で定義されています。

参照先 nextAddresswriteAsyncSub().

参照元 ad7998::start().

00197     {
00198         nextAddress = 0;                    // Repeated Startを使わない。
00199         *pTWI_MASTER_CTL = 0;               // Repeated Startを使わない
00200                                             // 主処理
00201         writeAsyncSub( address, data, count, callback );
00202     }

void twi::writeAsyncSub ( unsigned char  address,
const unsigned char  data[],
unsigned int  count,
void(*)(bool)  callback 
)

writeAsyncの下請け関数

引数:
address 書き込みを行うデバイスの7bit TWIアドレス。
data 書き込むデータの配列
count 書きこみデータ数。単位はバイト。
callback 送信完了割り込み時に呼び出されるコールバック関数。NULLを指定すると何も呼び出されない。
I2C送信の処理実体。 twi::writeAsynctwi::writeReadAsyncは、 repeated Startに関する設定を行った後、残りの処理をこの関数に 丸投げする。

writeAsync関数は、I2Cデバイスアドレスを設定後、最初の1バイトを FIFOに書き込んでから送信をイネーブルにする。

twi.cpp170 行で定義されています。

参照先 countToBeTransferdataPtrrcvtransferedCountuserCallBack.

参照元 writeAsync()writeReadAsync().

00176     {
00177         rcv = false;                        // 送信
00178         countToBeTransfer = count;          // 送信するデータ数
00179         dataPtr = (unsigned char *)data;    // バッファ・ポインタをセット
00180         userCallBack = callback;            // コールバック関数をセット
00181         *pTWI_INT_MASK = 0;                 // 割り込みを一時禁止
00182         *pTWI_MASTER_ADDR = address;        // 7bit アドレスを設定
00183         *pTWI_XMT_DATA8 = *(dataPtr++);     // 最初の1バイトを転送
00184         transferedCount = 1;                // 送信済みデータ数
00185   
00186         *pTWI_MASTER_CTL |= MEN | DCNT & ( count << 6 ); // マスターモード、送信、アドレス設定
00187         *pTWI_INT_MASK = XMTSERV | MCOMP;   // 割込みマスク設定
00188     }

void twi::writeReadAsync ( unsigned char  wAddress,
const unsigned char  wData[],
unsigned int  wCount,
unsigned char  rAddress,
const unsigned char  rData[],
unsigned int  rCount,
void(*)(bool)  callback 
)

TWIデバイスへの非同期書き込み/読み込み

引数:
wAddress 書き込みを行うデバイスの7bit TWIアドレス。
wData 書き込むデータの配列
wCount 書きこみデータ数。単位はバイト。
rAddress 読み込みを行うデバイスの7bit TWIアドレス。
rData 読み込むデータの受信バッファ
rCount 読み込むデータ数。単位はバイト。
callback 送信完了割り込み時に呼び出されるコールバック関数。NULLを指定すると何も呼び出されない。
指定されたデバイスへの書き込みを行う。この関数は、デバイスへの書き込みを 内蔵TWIに指示すると、直ちに呼び出し元に戻る。デバイスへの書きこみが完了すると ただちに読み出しを行う。読み出しが終了したら。 パラメータで指定したcallback関数が呼び出される。callback関数が呼ばれるまで、 呼び出し側はdata[]の内容を変更してはならない。

twi.cpp204 行で定義されています。

参照先 nextAddressnextPtrnextTransferwriteAsyncSub().

参照元 ad7998::callBack().

00213     {
00214         nextTransfer = rCount;              // Repeated Start後の受信データ数
00215         nextPtr = (unsigned char *)rData;   // Repeated Start後の受信バッファ
00216         nextAddress = rAddress;             // Repeated Start後の受信デバイスアドレス
00217         *pTWI_MASTER_CTL = RSTART;          // Repeated Startを使う
00218                                             // 主処理
00219         writeAsyncSub( wAddress, wData, wCount, callback );
00220     }


変数

unsigned int twi::countToBeTransfer

転送するバイト数

進行中の送信、あるいは受信における総転送バイト数。

twi.cpp48 行で定義されています。

参照元 ISR()readAsync()writeAsyncSub().

unsigned char* twi::dataPtr

データ転送バッファ・アドレス

次に送信するデータのアドレス、あるいは受信データを格納するバッファのアドレス。

twi.cpp21 行で定義されています。

参照元 ISR()readAsync()writeAsyncSub().

unsigned char twi::nextAddress = 0

Repeated Start後のデバイス・アドレス

現在の転送の終了後にRepeated Startを行う場合は、次の転送を行うTWIデバイスの アドレスをこの変数に格納する。Repeated Startを行うか否かの判断にも使うので Repeated Startを使わない場合は必ず0にセットする。

twi.cpp36 行で定義されています。

参照元 ISR()readAsync()writeAsync()writeReadAsync().

unsigned char* twi::nextPtr

Repeated Start後に使うバッファ・アドレス

現在の転送の終了後にRepeated Startを行う場合は、次の転送を行うバッファの アドレスをこの変数に格納する。

twi.cpp28 行で定義されています。

参照元 ISR()writeReadAsync().

unsigned int twi::nextTransfer

Repeated Start後の転送バイト数

現在の転送の終了後にRepeated Startを行う場合は、 次の転送での送信、あるいは受信における総転送バイト数。

twi.cpp55 行で定義されています。

参照元 ISR()writeReadAsync().

bool twi::rcv

受信フラグ

現在の転送が受信ならば真、送信ならば偽

twi.cpp61 行で定義されています。

参照元 ISR()readAsync()writeAsyncSub().

unsigned int twi::transferedCount

転送済みバイト数

進行中の送信、あるいは受信データ数を数える。

twi.cpp42 行で定義されています。

参照元 ISR()readAsync()writeAsyncSub().

void( * ) twi::userCallBack(bool)

コールバック関数

現在の転送が受信ならば真、送信ならば偽

twi.cpp67 行で定義されています。

参照元 ISR()readAsync()writeAsyncSub().


AudioFrameWorkに対してMon Apr 9 16:33:24 2007に生成されました。  doxygen 1.5.1-p1