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) 反転させることにより、疑似リセットクロックを生成します。
その後は、通常の起動手順に復帰し、以降はこれまでと同様の動作をします。
edge_utils/edge_chart.cpp@0:d895cd1cd897, 2018-04-03 (annotated)
- Committer:
- Rhyme
- Date:
- Tue Apr 03 08:30:29 2018 +0000
- Revision:
- 0:d895cd1cd897
Initial I2C Pin force reset function added
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Rhyme | 0:d895cd1cd897 | 1 | #include "mbed.h" |
Rhyme | 0:d895cd1cd897 | 2 | #include "edge_mgr.h" |
Rhyme | 0:d895cd1cd897 | 3 | #include "edge_reset_mgr.h" |
Rhyme | 0:d895cd1cd897 | 4 | #include "edge_chart.h" |
Rhyme | 0:d895cd1cd897 | 5 | #if 0 |
Rhyme | 0:d895cd1cd897 | 6 | typedef struct _edge_chart_st { |
Rhyme | 0:d895cd1cd897 | 7 | char *name ; |
Rhyme | 0:d895cd1cd897 | 8 | int left ; |
Rhyme | 0:d895cd1cd897 | 9 | int top ; |
Rhyme | 0:d895cd1cd897 | 10 | int width ; |
Rhyme | 0:d895cd1cd897 | 11 | int height ; |
Rhyme | 0:d895cd1cd897 | 12 | int index ; |
Rhyme | 0:d895cd1cd897 | 13 | int min ; |
Rhyme | 0:d895cd1cd897 | 14 | int max ; |
Rhyme | 0:d895cd1cd897 | 15 | } edge_chart_type ; |
Rhyme | 0:d895cd1cd897 | 16 | |
Rhyme | 0:d895cd1cd897 | 17 | extern edge_chart_type edge_chart[] ; |
Rhyme | 0:d895cd1cd897 | 18 | #endif |
Rhyme | 0:d895cd1cd897 | 19 | |
Rhyme | 0:d895cd1cd897 | 20 | edge_chart_type edge_chart[] = { |
Rhyme | 0:d895cd1cd897 | 21 | /* name, left, top, width, height, index, min, max */ |
Rhyme | 0:d895cd1cd897 | 22 | { "Accel", 0, 0, 160, 60, 0, -0.2, 0.2 }, |
Rhyme | 0:d895cd1cd897 | 23 | { "Color", 160, 0, 160, 120, 0, 0.0, 10000.0 }, |
Rhyme | 0:d895cd1cd897 | 24 | { "Color2", 160, 120, 160, 120, 0, 0.0, 10000.0 }, |
Rhyme | 0:d895cd1cd897 | 25 | { "Temp", 0, 120, 160, 120, 0, -10.0, 50.0 }, |
Rhyme | 0:d895cd1cd897 | 26 | { "Press", 0, 60, 160, 60, 0, -1.0, 5.0 }, |
Rhyme | 0:d895cd1cd897 | 27 | { 0, 0, 0, 0, 0, 0, 0.0, 0.0 } |
Rhyme | 0:d895cd1cd897 | 28 | } ; |
Rhyme | 0:d895cd1cd897 | 29 | |
Rhyme | 0:d895cd1cd897 | 30 | void draw_chart_frame(edge_chart_type *p) |
Rhyme | 0:d895cd1cd897 | 31 | { |
Rhyme | 0:d895cd1cd897 | 32 | if (display) { |
Rhyme | 0:d895cd1cd897 | 33 | display->fillrect(p->left+1, p->top+1, |
Rhyme | 0:d895cd1cd897 | 34 | p->left + p->width - 2, p->top + p->height - 2, Black) ; |
Rhyme | 0:d895cd1cd897 | 35 | display->rect(p->left, p->top, |
Rhyme | 0:d895cd1cd897 | 36 | p->left + p->width - 1, |
Rhyme | 0:d895cd1cd897 | 37 | p->top + p->height -1, Blue) ; |
Rhyme | 0:d895cd1cd897 | 38 | display->set_font((unsigned char*) Arial12x12); |
Rhyme | 0:d895cd1cd897 | 39 | display->foreground(White) ; |
Rhyme | 0:d895cd1cd897 | 40 | display->locate(p->left + 5, p->top + 5) ; |
Rhyme | 0:d895cd1cd897 | 41 | display->printf(p->name) ; |
Rhyme | 0:d895cd1cd897 | 42 | } |
Rhyme | 0:d895cd1cd897 | 43 | } |
Rhyme | 0:d895cd1cd897 | 44 | |
Rhyme | 0:d895cd1cd897 | 45 | void draw_all_chart_frame(void) |
Rhyme | 0:d895cd1cd897 | 46 | { |
Rhyme | 0:d895cd1cd897 | 47 | edge_chart_type *p ; |
Rhyme | 0:d895cd1cd897 | 48 | if (display) { |
Rhyme | 0:d895cd1cd897 | 49 | reset_watch_dog() ; |
Rhyme | 0:d895cd1cd897 | 50 | display->BusEnable(true) ; |
Rhyme | 0:d895cd1cd897 | 51 | for(p = edge_chart ; p->name ; p++ ) { |
Rhyme | 0:d895cd1cd897 | 52 | draw_chart_frame(p) ; |
Rhyme | 0:d895cd1cd897 | 53 | } |
Rhyme | 0:d895cd1cd897 | 54 | display->BusEnable(false) ; |
Rhyme | 0:d895cd1cd897 | 55 | } |
Rhyme | 0:d895cd1cd897 | 56 | } |