81 /******************************************************************************/ 82 /* スレーブアドレスの設定 */ 83 /*****************************************

Similar documents
目次 1 I2Cとは 13 結線写真 2 センサの多くがI2Cに対応 14 WHO_AM_I 3 マイコンでのI2C通信例 15 I2C読込みプログラム 4 とは 16 I2C読込みスクリプト概要① 5 タイミングパラメータ 17 I2C読込みスクリプト概要② 6 書込み 18 センサ読込みプログラ

スライド 1

< D A0>

RL78開発環境移行ガイド R8C/M16C, H8S/H8SXからRL78への移行(統合開発環境編)(High-performance Embedded Workshop→CS+)

スライド 1

Nios II - PIO を使用した I2C-Bus (2ワイヤ)マスタの実装

// USB_CNC_Machine リモート PIO 端末プログラムのメイン関数およびユーザアプリ部 // 編集作成 by Takehiko Inoue /*********** メイン関数 ***************************/ #pragma code

Microsoft PowerPoint - RL78G14_動画マニュアル_タイマRD.ppt [互換モード]

GR-SAKURA-SAのサンプルソフト説明

スライド 1

スライド 1

I2C2 シングルマスタ受信 (I2C バスEEPROM のリード)

/* モジュールストップ解除 */ SYSTEM.MSTPCRA.BIT.MSTPA24 = 0; /* MSTPA24(S12ADA 制御部 ) クロック供給開始 */ SYSTEM.MSTPCRA.BIT.MSTPA17 = 0; /* MSTPA17(S12ADA0) クロック供給開始 */

IICシングルマスタ送受信制御例 (EEPROM ライト・リード)

スライド 1

Java演習(4) -- 変数と型 --

はじめに 製作するシステム 外部へデータ保存 製作手順 全体回路図 ソフトウエアの作成 次へのステップ 付録 I2C インターフェースを利用して外付けのEEPRO Mへデータ保存を行います データを保存する方法にはいくつかあります 代表的な例を挙げます 保存媒体 応答速度 通信方法 必要端子 プログ

2.RL78 での割り込み処理 ( 割り込み受け付け ) マスクが解除された (xxmk ビットが 0 の ) 割り込み要求信号は 2 つの用途で使用されます 一つ目は,CPU のスタンバイ状態の解除です この動作は, 割り込み優先順位とは全く無関係で, マスクされていない (xxmk=0 の )

MODBUS ユーザーズマニュアル 페이지 1 / 23

8 if switch for while do while 2

内容 1. 仕様 動作確認条件 ハードウェア説明 使用端子一覧 ソフトウェア説明 動作概要 ファイル構成 オプション設定メモリ 定数一覧 変数一

Relay Socket for Industrial Relay                    1/2

Microsoft Word - RTC㇢ㅊㅪㇱㅼㇷㅧㅳㅞㅉㅥ㇢ㅫ

I. Backus-Naur BNF : N N 0 N N N N N N 0, 1 BNF N N 0 11 (parse tree) 11 (1) (2) (3) (4) II. 0(0 101)* (

I ASCII ( ) NUL 16 DLE SP P p 1 SOH 17 DC1! 1 A Q a q STX 2 18 DC2 " 2 B R b

(Microsoft Word -

スライド 1

r07.dvi

アナログ・接点変換器

ohp07.dvi

SiTCP ユーティリティユーザガイド 2014 年 6 月 18 日 0.73 版 Bee Beans Technologies 1

SOPC Builder ペリフェラル 簡易ユーザ・ガイド - PIO (Parallel I/O)

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

ex04_2012.ppt

RXファミリ アプリケーションノート I2C バスインタフェース (RIIC) モジュール Firmware Integration Technology

スライド 1

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

-2 外からみたプロセッサ GND VCC CLK A0 A1 A2 A3 A4 A A6 A7 A8 A9 A10 A11 A12 A13 A14 A1 A16 A17 A18 A19 D0 D1 D2 D3 D4 D D6 D7 D8 D9 D10 D11 D12 D13 D14 D1 MEMR

I. Backus-Naur BNF S + S S * S S x S +, *, x BNF S (parse tree) : * x + x x S * S x + S S S x x (1) * x x * x (2) * + x x x (3) + x * x + x x (4) * *

QuartusII SOPC_Builderで利用できるGPIF-AVALONブリッジとは?

USB_IR_Remote_Controller_Advance_Library 取扱説明書 2015/8/21 Assembly Desk USB_IR_Remote_Controller_Advance_Library を使用すると 弊社製 USB IR Remote controller Ad

‚æ4›ñ

MPL115A

I2Cコントローラ、ハード・プロセッサ・システム(HPS)のテクニカル・リファレンス・マニュアル(TRM)

DUSx200 シリーズコントローラ I2C インターフェース仕様書

Microsoft PowerPoint - 15Game.ppt

PSoC5LP で USBMIDI 2015/5/23 第 2 回 PSoC まつり (Sat) 於 本サイプレス本社 ( 中野 ) PSoC5LP で USBMIDI ectoyfan ectoyfan アラフィフ ( 電 回路玩具ファン ) Electronic Circui

tuat1.dvi

Microsoft Word - FCTT_CS_Mod( )Jver1.doc

Jan/25/2019 errata_c17m11_10 S1C17 マニュアル正誤表 項目 リセット保持時間 対象マニュアル発行 No. 項目ページ S1C17M10 テクニカルマニュアル システムリセットコントローラ (SRC) 特性 19-3 S1C17M20/M

やさしいJavaプログラミング -Great Ideas for Java Programming サンプルPDF

割り込み 今までのプログラムは 順番にそって命令を実行していくのみ それはそれで良いが 不便な場合もある 例えば 時間のかかる周辺機器を使う場合 その周辺機器が動作を終了するまで CPU は待たなければいけない 方法 1( ポーリング ) 一定時間毎に 周辺機器の動作が終了したか調べる 終了していれ

スライド 1

割り込み 今までのプログラムは 順番にそって命令を実行していくのみ それはそれで良いが 不便な場合もある 例えば 時間のかかる周辺機器を使う場合 その周辺機器が動作を終了するまで CPU は待たなければいけない 方法 1( ポーリング ) 一定時間毎に 周辺機器の動作が終了したか調べる 終了していれ

Microsoft Word - SU1204教本(Driver)原稿.docx

Microsoft PowerPoint - フェリカ通信仕様書_

RH850の割り込み/例外実現方法 CC-RHアプリケーションガイド

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

ヤマハDante機器と他社AES67機器の接続ガイド

ターゲット項目の設定について

Java updated

目次 1 本アプリケーションノートの目的 送信手順 基本的な送信方法 キャリアセンスなし送信 キャリアセンスあり送信 ACK 期待送信 フレームメモリへのデータの設定 INFO

プロセス間通信

inst.c

QuartusII SOPC_Builderで利用できるGPIF-AVALONブリッジとは?

slide5.pptx

Microsoft PowerPoint - 14Chap17.ppt

FSC FSC-110 通信仕様書 (CC-Link 通信プロトコル )

SP-1221 LIN I/F 基板 ユーザーズマニュアル 作成日 :2017 年 10 月 17 日

:30 12:00 I. I VI II. III. IV. a d V. VI

USB_IR_Remote_Controller_Advance_Library 取扱説明書 2016/06/23 R03 Assembly Desk USB_IR_Remote_Controller_Advance_Library を使用すると 弊社製 USB IR Remote controll

スライド 1

Prog1_10th

内容 1. APX-3302 の特長 APX-3312 から APX-3302 へ変更するためには 差分詳細 ハードウェア ハードウェア性能および仕様 ソフトウェア仕様および制限 Ini ファイルの設

TFTP serverの実装

Taro-最大値探索法の開発(公開版

:30 12:00 I. I VI II. III. IV. a d V. VI

K227 Java 2

Microsoft Word - SU1203教本(Sens)原稿.docx

untitled

ETCB Manual

AquesTalk プログラミングガイド

=

Cコンパイラパッケージお知らせ

AN-1077: ADXL345 Quick Start Guide

fuga scanf("%lf%*c",&fuga); 改行文字を読み捨てる 10 進数の整数 おまじない取り込んだ値を代入する変数 scanf( %d%*c,&hoge); キーボードから取り込め という命令 1: scanf 1 1: int double scanf %d %lf printf

INDEX 1 必要なものを準備しよう 各部の名称を確認しよう 電源を入れよう スイッチで LED を光らせよう BiZduino で Wi-Fi 通信しよう RTC を使ってみよう 参考資料 7 困ったら... 21

マイコンプログラミング講座

NI P1200 Release Notes Cover

Taro-リストⅢ(公開版).jtd

PowerPoint プレゼンテーション

PLCシリアル通信 MODBUS通信 データ送信/受信プログラム例

SystemC言語概論

スライド 1

解きながら学ぶJava入門編

AquesTalk Win Manual

PowerPoint Presentation

Microsoft PowerPoint - RX62N動画マニュアルDMAC.ppt [互換モード]

MSP430 4 線式 SPI マルチスレーブ ライブラリメッセージマネージャ編 version /3/10 PIC 山内一男 この資料は 複数 IOの管理方式 v1.0 4 線式 SPIマルチスレーブ ライブラリとデモシステム をベースにした続編にあたります 本書は マスターとマル

解きながら学ぶC++入門編

Transcription:

1 /******************************************************************************/ 2 /* IIC(Inter IC Bus) の制御 */ 3 /******************************************************************************/ 4 /* 割り込みは不使用 */ 5 6 #include <machine.h> 7 #include <stdlib.h> 8 #include "typedefine.h" 9 #include "iodefine.h" 10 11 /******************************************************************************/ 12 /* ICCR1のCKS2~CKS0にセットするコード ****************************************/ 13 /* φ=20mhz */ 14 #define RATE_714 (0) /* φ/ 28 = 714kHz */ 15 #define RATE_500 (1) /* φ/ 40 = 500kHz */ 16 #define RATE_417 (2) /* φ/ 48 = 417kHz */ 17 #define RATE_313 (3) /* φ/ 64 = 313kHz */ 18 #define RATE_250 (4) /* φ/ 80 = 250kHz */ 19 #define RATE_200 (5) /* φ/100 = 200kHz */ 20 #define RATE_179 (6) /* φ/112 = 179kHz */ 21 #define RATE_156 (7) /* φ/128 = 156kHz */ 22 #define RATE_357 (8) /* φ/ 56 = 357kHz */ 23 //#define RATE_250 (9) /* φ/ 80 = 250kHz */ 24 #define RATE_208 (10) /* φ/ 96 = 208kHz */ 25 //#define RATE_156 (11) /* φ/128 = 156kHz */ 26 #define RATE_125 (12) /* φ/160 = 125kHz */ 27 #define RATE_100 (13) /* φ/200 = 100kHz */ 28 #define RATE_89 (14) /* φ/224 = 89.3kHz */ 29 #define RATE_78 (15) /* φ/256 = 78.1kHz */ 30 31 #define RATE_USE RATE_250 /* 使用する転送速度 */ 32 33 /******************************************************************************/ 34 35 #define READ_MODE (0) 36 #define WRITE_MODE (1) 37 #define TRYMAX_IIC (3) 38 39 /******************************************************************************/ 40 /* ソフトウェアタイマの時間 */ 41 42 #define WAIT_100mS (80000) /* 約 100mS */ 43 #define WAIT_50mS (40000) /* 約 50mS */ 44 #define WAIT_10mS ( 8000) /* 約 10mS */ 45 #define WAIT_1mS ( 800) /* 約 1mS */ 46 #define WAIT_500uS ( 400) /* 約 500uS */ 47 #define WAIT_200uS ( 160) /* 約 200uS */ 48 #define WAIT_100uS ( 80) /* 約 100uS */ 49 50 /******************************************************************************/ 51 #pragma abs8(byslaveid) 52 static BYTE byslaveid; /* 相手 ( スレーブ ) のアドレス */ 53 54 55 #pragma section 56 /******************************************************************************/ 57 /* IICインタフェース初期化 */ 58 /******************************************************************************/ 59 /* 備考 : H8/3694では P57,P56はICCR1のICE=1でSCL,SDA 端子になる */ 60 61 void Init_IIC2(void) 62 { 63 /* IICリセット */ 64 IIC2.ICCR2.BIT.IICRST = 1; 65 IIC2.ICCR2.BIT.IICRST = 0; 66 /* 送受信モード, 転送速度設定 */ 67 IIC2.ICCR1.BYTE = 0x80 RATE_USE; /* ICE=1: バスイネーブル RCVD=0: 受信継続 MST=0,TRS=0: スレーブ受 信モード CKS=4: 転送クロック (RATE_USE) */ 68 /* 転送モード設定 */ 69 IIC2.ICMR.BYTE = 0x30; /* MLS=0:MSBファースト WAIT=0:DATAとACK 連続転送 BCWP=BC2~BC0 の書き込み可 BC2~BC0:9ビット転送 */ 70 IIC2.ICMR.BIT.BCWP = 1; /* BCWP=BC2~BC0の書き込み禁止 */ 71 /* 割り込みモード設定 */ 72 IIC2.ICIER.BYTE = 0x00; /* TIE=0: 送信割り込み禁止 TEIE=0: 送信終了割り込み禁止 RIE=0: 受 信割り込み禁止 NAKIE=0:NAK 受信割り込み禁止 */ 73 /* STIE=0: 停止条件検出割り込み禁止 ACKE=0: アクノリッジを無視す る */ 74 /* 全ステータスクリア */ 75 if(iic2.icsr.byte); /* ICSR 読み込み */ 76 IIC2.ICSR.BYTE = 0x00; /* ACKB=0, 全ステータスビットクリア */ 77 /* 転送フォーマット選択 */ 78 IIC2.SAR.BYTE = 0x00; /* 自局アドレス =0x00 FS=0:IICフォーマット選択 */ 79 } 80

81 /******************************************************************************/ 82 /* スレーブアドレスの設定 */ 83 /******************************************************************************/ 84 85 void SetSlaveAddr_IIC2(BYTE byslaveaddr) 86 { 87 /* ( 相手 ) スレーブアドレス保存 */ 88 byslaveid = byslaveaddr; 89 } 90 91 /******************************************************************************/ 92 /* IICインタフェースによる送受信 ( 割り込み不使用 ) */ 93 /******************************************************************************/ 94 95 /* スタートコンディション+スレーブアドレス **********************************/ 96 97 static BOOL Start_IIC2(BYTE byfirst, BYTE bywrite) 98 { 99 WORD wwaitcnt; 100 BOOL bresult; 101 BYTE byaddr,bytry; 102 103 /* 最初のみバスの開放を待つ (BUSYなら待つ) */ 104 if(byfirst!= 0){ 105 bytry = 20; 106 wwaitcnt = WAIT_10mS; 107 while(iic2.iccr2.bit.bbsy!= 0){ 108 if(--wwaitcnt == 0){ 109 if(--bytry == 0){ 110 return FALSE; 111 } 112 wwaitcnt = WAIT_10mS; 113 } 114 } 115 } 116 117 /* R/Wを加えたスレーブアドレス作成 */ 118 byaddr = byslaveid; 119 if(bywrite == READ_MODE) 120 byaddr = 0x01; 121 /* スレーブアドレス送信 */ 122 bresult = FALSE; 123 bytry = 0; 124 do{ 125 /* マスター送信モード指定 */ 126 IIC2.ICCR1.BYTE = 0xB0 RATE_USE; /* ICE=1: バスイネーブル RCVD=0: 受信継続 MST=1,TRS=1: マ スター送信モード CKS=4: 転送クロック (250kbps) */ 127 /* 開始条件発行 */ 128 IIC2.ICCR2.BYTE = 0xBD; /* BBSY=1,SCP=0: 開始条件発行 SDAO=1,SDAOP=1:SDA 出力制御 なし IICRST=0:IICリセット無効 */ 129 /* 送信エンプティを待つ */ 130 wwaitcnt = WAIT_500uS; 131 while(iic2.icsr.bit.tdre == 0){ 132 if(--wwaitcnt == 0) 133 return FALSE; 134 } 135 /* スレーブアドレス送信 */ 136 IIC2.ICDRT = byaddr; 137 /* 送信終了を待つ */ 138 wwaitcnt = WAIT_500uS; 139 while(iic2.icsr.bit.tend == 0){ 140 if(--wwaitcnt == 0) 141 goto _RETRY; 142 } 143 /* ACK'0' 受信をチェック */ 144 if(iic2.icier.bit.ackbr == 0){ 145 bresult = TRUE; 146 break; 147 } 148 149 _RETRY: 150 wwaitcnt = WAIT_1mS; 151 while(--wwaitcnt!= 0); 152 }while(++bytry < 10); 153 154 return bresult; 155 } 156 157 /* ストップコンディション ****************************************************/ 158 /* 備考 : RTS 命令で10ステートかかるので RTC-8564NBのtBUF(1.3uS) は確保される */ 159 160 static BOOL Stop_IIC2(void) 161 { 162 WORD wwaitcnt;

163 BOOL bresult; 164 165 /* 停止条件検出フラグクリア */ 166 IIC2.ICSR.BIT.STOP = 0; 167 /* 停止条件発行 */ 168 IIC2.ICCR2.BYTE = 0x3D; /* BBSY=0,SCP=0: 停止条件発行 SDAO=1,SDAOP=1:SDA 出力制御 なし IICRST=0:IICリセット無効 */ 169 /* 停止条件の検出を待つ */ 170 bresult = TRUE; 171 wwaitcnt = WAIT_500uS; 172 while(iic2.icsr.bit.stop == 0){ 173 if(--wwaitcnt == 0){ 174 bresult = FALSE; 175 break; 176 } 177 } 178 /* 送信終了フラグをクリア */ 179 IIC2.ICSR.BIT.TEND = 0; 180 /* スレーブ受信モードに設定 */ 181 IIC2.ICCR1.BYTE = 0x80 RATE_USE; /* ICE=1: バスイネーブル RCVD=0: 受信継続 MST=0,TRS=0: ス レーブ受信モード CKS=4: 転送クロック (250Kbps) */ 182 183 return bresult; 184 } 185 186 187 /* データブロック送信 ********************************************************/ 188 189 static BOOL SendBlock_IIC2(WORD wsize, const BYTE *pbydata) 190 { 191 WORD wwaitcnt; 192 193 while(wsize > 1){ 194 /* データ送信 */ 195 IIC2.ICDRT = *(pbydata++); 196 --wsize; 197 /* 送信エンプティを待つ */ 198 wwaitcnt = WAIT_500uS; 199 while(iic2.icsr.bit.tdre == 0){ 200 if(--wwaitcnt == 0) 201 return FALSE; 202 } 203 } 204 /* 最終データ送信 */ 205 IIC2.ICDRT = *pbydata; 206 // --wsize; 207 /* 送信終了を待つ */ 208 wwaitcnt = WAIT_500uS; 209 while(iic2.icsr.bit.tend == 0){ 210 if(--wwaitcnt == 0) 211 return FALSE; 212 } 213 /* ACK'0' 受信をチェック */ 214 if(iic2.icier.bit.ackbr == 1){ 215 return FALSE; 216 } 217 218 return TRUE; 219 } 220 221 /* データブロック受信 *******************************************************/ 222 223 static BOOL RecvBlock_IIC2(WORD wsize, BYTE *pbybuff) 224 { 225 WORD wwaitcnt; 226 BYTE bydummy; 227 BYTE byccr; 228 229 /* 0バイト受信は無効 */ 230 if(wsize == 0) return FALSE; 231 232 /* 割り込みマスク */ 233 byccr = get_ccr(); 234 set_imask_ccr(1); 235 /* トランスミットエンドフラグをクリア */ 236 IIC2.ICSR.BIT.TEND = 0; 237 /* マスター受信モード指定 */ 238 IIC2.ICCR1.BYTE = 0xA0 RATE_USE; /* ICE=1: バスイネーブル RCVD=0: 受信継続 MST=1,TRS=0: マ スター受信モード CKS=4: 転送クロック (250kbps) */ 239 /* トランスミットデータエンプティフラグをクリア */ 240 IIC2.ICSR.BIT.TDRE = 0; 241 /* 1バイトのみの受信では最初が最後となる */ 242 if(wsize == 1){ 243 /* ACKデータに '1' を設定 */

244 IIC2.ICIER.BIT.ACKBT = 1; 245 /* 受信ディセーブル */ 246 IIC2.ICCR1.BIT.RCVD = 1; 247 } 248 else{ 249 /* ACKデータに '0' を設定 */ 250 IIC2.ICIER.BIT.ACKBT = 0; 251 /* 受信イネーブル */ 252 IIC2.ICCR1.BIT.RCVD = 0; 253 } 254 /* 受信データ読み込み ( 最初のデータはダミー ) */ 255 bydummy = IIC2.ICDRR; 256 /* 割り込みマスク復帰 */ 257 set_ccr(byccr); 258 259 /* 最初の受信データを待つ */ 260 wwaitcnt = WAIT_1mS; 261 while(iic2.icsr.bit.rdrf == 0){ 262 if(--wwaitcnt == 0) 263 return FALSE; 264 } 265 266 /* 最後以外の受信データを読み込み */ 267 while(wsize > 1){ 268 /* 最後 -1 番目の受信 */ 269 if(wsize == 2){ 270 /* ACKデータに '1' を設定 */ 271 IIC2.ICIER.BIT.ACKBT = 1; 272 /* 受信ディセーブル */ 273 IIC2.ICCR1.BIT.RCVD = 1; 274 } 275 /* 受信データ読み込み */ 276 *(pbybuff++) = IIC2.ICDRR; 277 --wsize; 278 /* データ受信を待つ */ 279 wwaitcnt = WAIT_500uS; 280 while(iic2.icsr.bit.rdrf == 0){ 281 if(--wwaitcnt == 0) 282 return FALSE; 283 } 284 285 } 286 287 /* 最後の受信データを読み込み */ 288 *(pbybuff++) = IIC2.ICDRR; 289 // --wsize; 290 291 return TRUE; 292 } 293 294 295 /******************************************************************************/ 296 /* 1バイトデータリード */ 297 /******************************************************************************/ 298 299 /* 1バイトのアドレス指定 (RTC 用 ) ********************************************/ 300 301 BOOL ReadByte_A8_IIC2(BYTE byrdaddr, BYTE *prxbuff) 302 { 303 int ntrycntr; 304 BOOL bresult; 305 306 bresult = FALSE; 307 ntrycntr = 0; 308 do{ 309 /* スタートコンディション */ 310 if(start_iic2(1, WRITE_MODE)){ 311 /* ターゲットアドレス送信 */ 312 if(sendblock_iic2(1, &byrdaddr)){ 313 /* スタートコンディション再開 */ 314 if(start_iic2(0, READ_MODE)){ 315 /* データ受信 */ 316 if(recvblock_iic2(1, prxbuff)){ 317 bresult = TRUE; 318 break; 319 } 320 } 321 } 322 } 323 }while(++ntrycntr < TRYMAX_IIC); 324 /* ストップコンディション */ 325 Stop_IIC2(); 326 327 return bresult;

328 } 329 330 /* 2バイトのアドレス指定 (EEPROM 用 ) *****************************************/ 331 332 BOOL ReadByte_A16_IIC2(WORD wrdaddr, BYTE *prxbuff) 333 { 334 int ntrycntr; 335 BOOL bresult; 336 BYTE byaddrh,byaddrl; 337 338 /* 16bitアドレスを8bitずつにする */ 339 byaddrl = (BYTE)wRdAddr; 340 byaddrh = (BYTE)(wRdAddr >> 8); 341 /* 読み込みシーケンス */ 342 bresult = FALSE; 343 ntrycntr = 0; 344 do{ 345 /* スタートコンディション */ 346 if(start_iic2(1, WRITE_MODE)){ 347 /* ターゲットアドレス送信 (High) */ 348 if(sendblock_iic2(1, &byaddrh)){ 349 /* ターゲットアドレス送信 (Low) */ 350 if(sendblock_iic2(1, &byaddrl)){ 351 /* スタートコンディション再開 */ 352 if(start_iic2(0, READ_MODE)){ 353 /* データ受信 */ 354 if(recvblock_iic2(1, prxbuff)){ 355 bresult = TRUE; 356 break; 357 } 358 } 359 } 360 } 361 } 362 }while(++ntrycntr < TRYMAX_IIC); 363 /* ストップコンディション */ 364 Stop_IIC2(); 365 366 return bresult; 367 } 368 369 /******************************************************************************/ 370 /* ページデータリード */ 371 /******************************************************************************/ 372 373 /* 1バイトのアドレス指定 (RTC 用 ) ********************************************/ 374 375 BOOL ReadPage_A8_IIC2(BYTE byrdaddr, WORD wsize, BYTE *prxbuff) 376 { 377 int ntrycntr; 378 BOOL bresult; 379 380 bresult = FALSE; 381 ntrycntr = 0; 382 do{ 383 /* スタートコンディション */ 384 if(start_iic2(1, WRITE_MODE)){ 385 /* ターゲットアドレス送信 */ 386 if(sendblock_iic2(1, &byrdaddr)){ 387 /* スタートコンディション再開 */ 388 if(start_iic2(0, READ_MODE)){ 389 /* データ受信 */ 390 if(recvblock_iic2(wsize, prxbuff)){ 391 bresult = TRUE; 392 break; 393 } 394 } 395 } 396 } 397 }while(++ntrycntr < TRYMAX_IIC); 398 /* ストップコンディション */ 399 Stop_IIC2(); 400 401 return bresult; 402 } 403 404 /* 2バイトのアドレス指定 (EEPROM 用 ) *****************************************/ 405 406 BOOL ReadPage_A16_IIC2(WORD wrdaddr, WORD wsize, BYTE *prxbuff) 407 { 408 int ntrycntr; 409 BOOL bresult; 410 BYTE byaddrh,byaddrl; 411

412 /* 16bitアドレスを8bitずつにする */ 413 byaddrl = (BYTE)wRdAddr; 414 byaddrh = (BYTE)(wRdAddr >> 8); 415 /* 読み込みシーケンス */ 416 bresult = FALSE; 417 ntrycntr = 0; 418 do{ 419 /* スタートコンディション */ 420 if(start_iic2(1, WRITE_MODE)){ 421 /* ターゲットアドレス送信 (High) */ 422 if(sendblock_iic2(1, &byaddrh)){ 423 /* ターゲットアドレス送信 (Low) */ 424 if(sendblock_iic2(1, &byaddrl)){ 425 /* スタートコンディション再開 */ 426 if(start_iic2(0, READ_MODE)){ 427 /* データ受信 */ 428 if(recvblock_iic2(wsize, prxbuff)){ 429 bresult = TRUE; 430 break; 431 } 432 } 433 } 434 } 435 } 436 }while(++ntrycntr < TRYMAX_IIC); 437 /* ストップコンディション */ 438 Stop_IIC2(); 439 440 return bresult; 441 } 442 443 /******************************************************************************/ 444 /* 1バイトデータライト */ 445 /******************************************************************************/ 446 447 /* 1バイトのアドレス指定 (RTC 用 ) ********************************************/ 448 449 BOOL WriteByte_A8_IIC2(BYTE bywraddr, const BYTE *prxbuff) 450 { 451 int ntrycntr; 452 BOOL bresult; 453 454 bresult = FALSE; 455 ntrycntr = 0; 456 do{ 457 /* スタートコンディション */ 458 if(start_iic2(1, WRITE_MODE)){ 459 /* ターゲットアドレス送信 */ 460 if(sendblock_iic2(1, &bywraddr)){ 461 /* データ送信 */ 462 if(sendblock_iic2(1, prxbuff)){ 463 bresult = TRUE; 464 break; 465 } 466 } 467 } 468 }while(++ntrycntr < TRYMAX_IIC); 469 /* ストップコンディション */ 470 Stop_IIC2(); 471 472 return bresult; 473 } 474 475 /* 2バイトのアドレス指定 (EEPROM 用 ) *****************************************/ 476 477 BOOL WriteByte_A16_IIC2(WORD wwraddr, const BYTE *prxbuff) 478 { 479 int ntrycntr; 480 BOOL bresult; 481 BYTE byaddrh,byaddrl; 482 483 /* 16bitアドレスを8bitずつにする */ 484 byaddrl = (BYTE)wWrAddr; 485 byaddrh = (BYTE)(wWrAddr >> 8); 486 /* 書き込みシーケンス開始 */ 487 bresult = FALSE; 488 ntrycntr = 0; 489 do{ 490 /* スタートコンディション */ 491 if(start_iic2(1, WRITE_MODE)){ 492 /* ターゲットアドレス送信 (High) */ 493 if(sendblock_iic2(1, &byaddrh)){ 494 /* ターゲットアドレス送信 (Low) */ 495 if(sendblock_iic2(1, &byaddrl)){

496 /* データ送信 */ 497 if(sendblock_iic2(1, prxbuff)){ 498 bresult = TRUE; 499 break; 500 } 501 } 502 } 503 } 504 }while(++ntrycntr < TRYMAX_IIC); 505 /* ストップコンディション */ 506 Stop_IIC2(); 507 508 return bresult; 509 } 510 511 512 /******************************************************************************/ 513 /* ページデータライト */ 514 /******************************************************************************/ 515 516 /* 1バイトのアドレス指定 (RTC 用 ) ********************************************/ 517 518 BOOL WritePage_A8_IIC2(BYTE bywraddr, WORD wsize, const BYTE *prxbuff) 519 { 520 int ntrycntr; 521 BOOL bresult; 522 523 bresult = FALSE; 524 ntrycntr = 0; 525 do{ 526 /* スタートコンディション */ 527 if(start_iic2(1, WRITE_MODE)){ 528 /* ターゲットアドレス送信 */ 529 if(sendblock_iic2(1, &bywraddr)){ 530 /* データ送信 */ 531 if(sendblock_iic2(wsize, prxbuff)){ 532 bresult = TRUE; 533 break; 534 } 535 } 536 } 537 }while(++ntrycntr < TRYMAX_IIC); 538 /* ストップコンディション */ 539 Stop_IIC2(); 540 541 return bresult; 542 } 543 544 /* 2バイトのアドレス指定 (EEPROM 用 ) *****************************************/ 545 546 BOOL WritePage_A16_IIC2(WORD wwraddr, WORD wsize, const BYTE *prxbuff) 547 { 548 int ntrycntr; 549 BOOL bresult; 550 BYTE byaddrh,byaddrl; 551 552 /* 16bitアドレスを8bitずつにする */ 553 byaddrl = (BYTE)wWrAddr; 554 byaddrh = (BYTE)(wWrAddr >> 8); 555 /* 書き込みシーケンス開始 */ 556 bresult = FALSE; 557 ntrycntr = 0; 558 do{ 559 /* スタートコンディション */ 560 if(start_iic2(1, WRITE_MODE)){ 561 /* ターゲットアドレス送信 (High) */ 562 if(sendblock_iic2(1, &byaddrh)){ 563 /* ターゲットアドレス送信 (Low) */ 564 if(sendblock_iic2(1, &byaddrl)){ 565 /* データ送信 */ 566 if(sendblock_iic2(wsize, prxbuff)){ 567 bresult = TRUE; 568 break; 569 } 570 } 571 } 572 } 573 }while(++ntrycntr < TRYMAX_IIC); 574 /* ストップコンディション */ 575 Stop_IIC2(); 576 577 return bresult; 578 } 579