M16C/64A グループ マルチマスタI2Cバスインタフェース ストップ

お客様各位
カタログ等資料中の旧社名の扱いについて
2010 年 4 月 1 日を以って NEC エレクトロニクス株式会社及び株式会社ルネサステクノロジ
が合併し、両社の全ての事業が当社に承継されております。従いまして、本資料中には旧社
名での表記が残っておりますが、当社の資料として有効ですので、ご理解の程宜しくお願い
申し上げます。
ルネサスエレクトロニクス ホームページ(http://www.renesas.com)
2010 年 4 月 1 日
ルネサスエレクトロニクス株式会社
【発行】ルネサスエレクトロニクス株式会社(http://www.renesas.com)
【問い合わせ先】http://japan.renesas.com/inquiry
RENESAS TECHNICAL UPDATE TN-16C-A176A/J
発行日 : 2009年 07月15 日
RENESAS TECHNICAL UPDATE
〒 100-0004 東京都千代田区大手町 2-6-2日本ビル
株式会社 ルネサス テクノロジ
問合せ窓口 http://japan.renesas.com/inquiry
E-mail: [email protected]
製品分類 MPU&MCU
発行番号
TN-16C-A176A/J
Rev. 第 1 版
情
報
技術情報
分
類
M16C/65、M16C/64Aグループ
題
マルチマスタ I2C バスインタフェース
名
ストップコンディション生成時における注意事項
対象ロット等
適
用
M16C/65、M16C/64Aグループ
製
品
1.
-
関
連
資
料
注意事項
マルチマスタ I2C バスインタフェースにおいて、スレーブデバイスまたは他のマスタデバイスが SCLMM ライ
ンを "L" にドライブしているときにストップコンディションを生成する操作を行った場合、SCLMM ラインが開
放されていないにもかかわらず SDAMM ラインが開放され、正常なストップコンディションが生成されません。
他のデバイスがSCLMMラインを開放している場合
S00レジスタへの
ライト信号
SCLMMライン
セットアップ時間
tSU;DAT
SDAMMライン
他のデバイスがSCLMMラインを“L”にドライブしている場合 (異常発生条件)
S00レジスタへの
ライト信号
他のデバイスがここでSCLMMラインを開放
内部SCL信号
tSU;DAT
SCLMMライン
セットアップ時間
内部SDA信号
セットアップ時間
SDAMMライン
: 異常波形
: 本来生成すべき波形
図 1.
異常波形例
(c)2009.Renesas Technology Corp., All rights reserved.
Page 1 of 3
RENESAS TECHNICAL UPDATE
2.
発行日 : 2009年 07月15 日
TN-16C-A176A/J
対策
ストップコンディション生成時は、以下のフローに従って生成してください。
ストップコンディション生成
フラグレジスタをスタックに退避させて割り込み禁止( 注1)
P7_0端子 (SDAMM) の出力を強制的に“L”出力に変更
tSU;DAT待つ
P7_1端子 (SCLMM) の出力を強制的に“H (Hi-Z)”出力に変更
P7_1 = 1 ?
(SCLMMラインが“H”?)
Yes
No
SCLMMラインの立ち上がりで割り込み要求が発生するように
設定(割り込み禁止)
P7_1 = 1 ?
(SCLMMラインが“H”?)
Yes
No
SCL/SDA割り込み許可
セットアップ時間待つ
P7_0 = 1 (SDAMMライン“H”)
MMI2Cモジュールリセット
フラグレジスタの復帰
フラグレジスタの復帰
終了 (割り込み待ち)
終了
SCL/SDA割り込み
フラグレジスタをスタックに退避させて割り込み禁止( 注1)
セットアップ時間待つ
P7_0 = 1 (SDAMMライン“H”)
MMI2Cモジュールリセット
フラグレジスタの復帰
Return
図2.
注1. 多重割り込み禁止
ストップコンディション生成フロー
Page 2 of 3
RENESAS TECHNICAL UPDATE
発行日 : 2009年 07月15 日
TN-16C-A176A/J
/* Generate Stop Condition */
void MMIIC_STOP(){
asm(" pushc flg");
asm(" fclr i");
/******* STOP CONDITION ******/
p7_0
=
0;
//Drive SDAMM Line "L"
ped
=
1;
soft_wait(WAIT_TIME);
//Waiting for TSU;DAT
p7_1
=
1;
//Drive SCLMM Line "H"
pec
=
1;
if(p7_1 == 1){
soft_wait(SETUP_TIME);
reset_mmi2c();
ped
=
pec
=
}else{
sip
=
sis
=
scldaic =
0x00;
//Waiting for stop condition setup time
0;
0;
//SDAMM pin: SDAMM Output setting
//SCLMM pin: SCLMM Output setting
1;
//"H" edge setting
1;
//SCLMM enable
//SCLSDA interrupt ir bit clear
if(p7_1 == 1){
soft_wait(SETUP_TIME);
reset_mmi2c();
ped
=
pec
=
//Waiting for stop condition setup time
0;
0;
//SDAMM pin: SDAMM Output setting
//SCLMM pin: SCLMM Output setting
}else{
scldaic
|=
0x01;
//SCLSDA interrupt enable: SCLMM "H" edge
}
}
asm(" popc flg");
}
/* Software Wait Routine */
void soft_wait(unsigned int time){
while (time > 0){
time--;
}
}
/* Reset MMI2C and Pin Setting */
void reset_mmi2c(void){
p7_0
=
1;
ihr
=
1;
while ( ihr == 1 );
}
/* SDASCL interrupt Routine
void MMIIC_STOP_SDASCL(){
asm(" pushc flg");
asm(" fclr i");
soft_wait(SETUP_TIME);
reset_mmi2c();
ped
=
pec
=
scldaic =
0x00;
asm(" popc flg");
}
図 3.
//SDAMM "H" stop condition
// MMI2C module reset
// MMI2C module reset waiting
*/
//Waiting for stop condition setup time
0;
//SDAMM pin: SDAMM Output setting
0;
//SCLMM pin: SCLMM Output setting
//SCLSDA interrupt disable
参考プログラム
Page 3 of 3