お客様各位 カタログ等資料中の旧社名の扱いについて 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
© Copyright 2024 ExpyDoc