I2C hang recover function added

Dependencies:   UniGraphic mbed vt100

In this version, check_i2c_pins function was added in edge_mgr.cpp.

プログラムの起動時、I2Cモジュールを初期化する前に、I2Cに使用するピンの電位を確認し
もし一方でも Low に張り付いていた場合、SCL を GPIO 出力に設定して 
所定回数 (I2C_UNLOCK_TRIAL_CYCLE) 反転させることにより、疑似リセットクロックを生成します。

その後は、通常の起動手順に復帰し、以降はこれまでと同様の動作をします。

Committer:
gaku_miyagawa
Date:
Mon Jun 18 02:55:38 2018 +0000
Revision:
2:de22987be9ba
Parent:
0:d895cd1cd897
SBU SPECIAL

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:d895cd1cd897 1 #include "mbed.h"
Rhyme 0:d895cd1cd897 2 #include "string.h"
Rhyme 0:d895cd1cd897 3 #include "vt100.h"
Rhyme 0:d895cd1cd897 4 #include "edge_time.h"
Rhyme 0:d895cd1cd897 5 #include "edge_pin.h"
Rhyme 0:d895cd1cd897 6 #include "edge_reset_mgr.h"
Rhyme 0:d895cd1cd897 7 #include "afLib.h"
Rhyme 0:d895cd1cd897 8 #include "pending.h"
Rhyme 0:d895cd1cd897 9 #include "msg_types.h"
Rhyme 0:d895cd1cd897 10 #include "mbedSPI.h"
Rhyme 0:d895cd1cd897 11 #include "af_mgr.h"
Rhyme 0:d895cd1cd897 12
Rhyme 0:d895cd1cd897 13 afLib *afero = 0 ;
Rhyme 0:d895cd1cd897 14 pending_class *pending = 0 ;
Rhyme 0:d895cd1cd897 15 InterruptIn *afero_int = 0 ;
Rhyme 0:d895cd1cd897 16 mbedSPI *afero_spi = 0 ;
Rhyme 0:d895cd1cd897 17 DigitalOut *afero_reset ;
Rhyme 0:d895cd1cd897 18 bool gLinked = false ;
Rhyme 0:d895cd1cd897 19 bool gConnected = false ;
Rhyme 0:d895cd1cd897 20
Rhyme 0:d895cd1cd897 21 void afero_isr(void)
Rhyme 0:d895cd1cd897 22 {
Rhyme 0:d895cd1cd897 23 afero->mcuISR() ;
Rhyme 0:d895cd1cd897 24 }
Rhyme 0:d895cd1cd897 25
Rhyme 0:d895cd1cd897 26 void init_aflib(void)
Rhyme 0:d895cd1cd897 27 {
Rhyme 0:d895cd1cd897 28 afero_reset = new DigitalOut(PIN_ASR_RESET, 1) ; /* create as deasserted */
Rhyme 0:d895cd1cd897 29 afero_spi = new mbedSPI(PIN_MOSI, PIN_MISO, PIN_SCK, PIN_CS) ;
Rhyme 0:d895cd1cd897 30
Rhyme 0:d895cd1cd897 31 reset_watch_dog() ;
Rhyme 0:d895cd1cd897 32 afero = new afLib(
Rhyme 0:d895cd1cd897 33 PIN_INTR,
Rhyme 0:d895cd1cd897 34 afero_isr,
Rhyme 0:d895cd1cd897 35 attributeChangeRequest,
Rhyme 0:d895cd1cd897 36 attributeUpdatedReport,
Rhyme 0:d895cd1cd897 37 afero_spi ) ;
Rhyme 0:d895cd1cd897 38 reset_watch_dog() ;
Rhyme 0:d895cd1cd897 39 wait(0.1) ;
Rhyme 0:d895cd1cd897 40 *afero_reset = 0 ;
Rhyme 0:d895cd1cd897 41 wait(0.5) ; /* required 250ms ~ time for reset */
Rhyme 0:d895cd1cd897 42 *afero_reset = 1 ;
Rhyme 0:d895cd1cd897 43 reset_watch_dog() ;
Rhyme 0:d895cd1cd897 44 wait(0.5) ;
Rhyme 0:d895cd1cd897 45 reset_watch_dog() ;
Rhyme 0:d895cd1cd897 46 }