第九章 もう一つのWRC003をサブCPUにする


二つのCPUボードでI2Cプロトコルで通信し、並行処理が出来るようにします。
当たり前ですが、最大二倍の処理量になります。
複数のCPUを繋げることが出来ますので、拡張すればさらに処理を並行処理できます。

二つのCPU間で通信をする





マスターCPU
// iodefine.hは水野が書き換えた
//               特別なファイルを使用すること
#include "common.h"
#include "primary.h"
#include <stdio.h>
#include "i2cCPU.h"

#include "interruptClass.h"
extern unsigned int wkCount, wkCount2;
extern BYTE intKind;;

extern UBYTE i2cCPUdataAvarable[3];  
extern UBYTE i2cCPUdata[3];  

BYTE getSW();        //スイッチ読み込み
void startInit(char* str);

void main(void)
{
  startInit("\n***** i2c master getDataテスト ******\n");
  i2cCPU master;
  Timer tm;
  UBYTE func= 0;
  UBYTE param='A';
  UBYTE* rData;
  
  while(true)
  {
    master.CPU_getData(func, param, &rData);
    printf("%02x %02x %02x\n", param, rData[0], rData[1]);
    if(++param>'Z') param='A'; 
    func++;
    tm.wait(1000);
  }
}
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 割り込み処理用ヘッダ
 9 
10 割り込みの種類
11 
12 
13 
14 
15
16
17
18
19
20
21 マスターのI2Cオブジェクトを作る
22
23
24
25 データ配列のアドレス
26
27
28
29 スレーブにデータを送り、返事を待つ
30
31
32
33
34
35




スレーブCPU
// iodefine.hは水野が書き換えた
//               特別なファイルを使用すること
#include "common.h"
#include "primary.h"
#include 
#include "i2cCPU.h"

#include "interruptClass.h"
extern unsigned int wkCount, wkCount2;
extern BYTE intKind;;

extern UBYTE i2cCPUdataAvarable[3];  
extern UBYTE i2cCPUdata[3];  

BYTE getSW();        //スイッチ読み込み
void startInit(char* str);
void main(void)
{
  startInit("\n****** i2c slave テスト ******\n");
  i2c slave = i2c(0xc0);
  i2c::i2c_setTransmitMode(0);
  IIC2.ICSR.BIT.TDRE = 0;
  i2c::enableInterrupt();
  i2cCPUdataAvarable[0]=0;
  while(true)
  {
    if(i2cCPUdataAvarable[0]) {
      printf("func=%02x param=%02x\n", 
        i2cCPUdataAvarable[1],i2cCPUdataAvarable[2]);
      i2cCPUdataAvarable[0]=0;
      i2cCPUdata[0]=i2cCPUdataAvarable[1];  
      i2cCPUdata[1]=i2cCPUdataAvarable[2]+1;  
    }
  }
}
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 割り込み処理用ヘッダ
 9 
10 割り込みの種類
11 
12 
13 
14 
15
16
17
18
19
20 スレーブCPUのアドレス設定
21
22
23
24
25
26
27
28
29 マスターからデータを貰う
30 データを受け取った
31 送り返すデータ
32 送り返すデータ
33
34
35


上級


第十章に行く    ホームに戻る