uint8_t型とunsigned char型に対応した多バイトシリアル通信用ライブラリ

Dependents:   multiserial_test serial_check_controller receiverA receiver_transmitter ... more

Committer:
Hatter
Date:
Wed Sep 03 06:25:11 2014 +0000
Revision:
11:f48f079a6fe4
Parent:
7:f15a96ec54e1
test;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Hatter 0:77c15e33dfd1 1 /*
Hatter 0:77c15e33dfd1 2 *mbed Multibyte Serial Library
Hatter 0:77c15e33dfd1 3 */
Hatter 0:77c15e33dfd1 4
Hatter 7:f15a96ec54e1 5 #include "mbed.h"
Hatter 0:77c15e33dfd1 6 #include "MultiSerial.h"
Hatter 0:77c15e33dfd1 7
Hatter 7:f15a96ec54e1 8 MultiSerial::MultiSerial(PinName tx,PinName rx) : __serial__(tx,rx){}
Hatter 7:f15a96ec54e1 9
Hatter 11:f48f079a6fe4 10 void MultiSerial::read(uint8_t* readData,uint8_t readKey)
Hatter 11:f48f079a6fe4 11 {
Hatter 0:77c15e33dfd1 12
Hatter 7:f15a96ec54e1 13 __readData = readData;
Hatter 7:f15a96ec54e1 14 __readSize = __SIZE(__readData);
Hatter 7:f15a96ec54e1 15 __readKey = readKey;
Hatter 7:f15a96ec54e1 16 __serial__.attach(this,&MultiSerial::RX,Serial::RxIrq);
Hatter 7:f15a96ec54e1 17 uint8_t k = __serial__.getc();
Hatter 7:f15a96ec54e1 18 }
Hatter 7:f15a96ec54e1 19
Hatter 7:f15a96ec54e1 20
Hatter 11:f48f079a6fe4 21 void MultiSerial::write(uint8_t* writeData,uint8_t writeKey)
Hatter 11:f48f079a6fe4 22 {
Hatter 0:77c15e33dfd1 23
Hatter 7:f15a96ec54e1 24 __writeData=writeData;
Hatter 7:f15a96ec54e1 25 __writeSize = __SIZE(__writeData);
Hatter 7:f15a96ec54e1 26 __writeKey = writeKey;
Hatter 7:f15a96ec54e1 27 __serial__.attach(this,&MultiSerial::TX,Serial::TxIrq);
Hatter 7:f15a96ec54e1 28 __serial__.putc(1);
Hatter 7:f15a96ec54e1 29 }
Hatter 7:f15a96ec54e1 30
Hatter 7:f15a96ec54e1 31
Hatter 11:f48f079a6fe4 32 void MultiSerial::TX(void)
Hatter 11:f48f079a6fe4 33 {
Hatter 0:77c15e33dfd1 34
Hatter 7:f15a96ec54e1 35 static uint8_t tx=__writeSize+2, i;
Hatter 7:f15a96ec54e1 36 static uint8_t txData[MAX_DATA_NUM]={__writeKey};
Hatter 7:f15a96ec54e1 37 static uint8_t tx_checkcode=0;
Hatter 7:f15a96ec54e1 38 if(tx >= __writeSize+2){
Hatter 7:f15a96ec54e1 39 txData[KEY] = __writeKey;;
Hatter 7:f15a96ec54e1 40
Hatter 7:f15a96ec54e1 41 for(int k=1;k<=__writeSize;k++){
Hatter 7:f15a96ec54e1 42 txData[k] = __writeData[k-1];
Hatter 7:f15a96ec54e1 43 }
Hatter 0:77c15e33dfd1 44
Hatter 7:f15a96ec54e1 45 //送るデータ = センサ等のデータ
Hatter 7:f15a96ec54e1 46 for(i=KEY+1, tx_checkcode=0; i<__writeSize+1; i++){
Hatter 7:f15a96ec54e1 47 tx_checkcode ^= txData[i];
Hatter 7:f15a96ec54e1 48 }//CHECKCODE作成
Hatter 7:f15a96ec54e1 49 txData[__writeSize+1] = tx_checkcode;
Hatter 7:f15a96ec54e1 50 tx=0;
Hatter 7:f15a96ec54e1 51 }
Hatter 7:f15a96ec54e1 52 __serial__.putc(txData[tx]);
Hatter 7:f15a96ec54e1 53 tx++;
Hatter 7:f15a96ec54e1 54 }//受信割り込み用関数
Hatter 7:f15a96ec54e1 55
Hatter 7:f15a96ec54e1 56 void MultiSerial::RX(void){
Hatter 7:f15a96ec54e1 57
Hatter 7:f15a96ec54e1 58 static uint8_t rx=0, i;
Hatter 7:f15a96ec54e1 59 static uint8_t rxData[MAX_DATA_NUM]={__readKey};
Hatter 7:f15a96ec54e1 60 static uint8_t rx_checkcode=0;
Hatter 7:f15a96ec54e1 61
Hatter 7:f15a96ec54e1 62 rxData[rx] = __serial__.getc();
Hatter 7:f15a96ec54e1 63
Hatter 7:f15a96ec54e1 64 if(rxData[KEY]==__readKey){
Hatter 7:f15a96ec54e1 65 rx++;
Hatter 0:77c15e33dfd1 66 }
Hatter 0:77c15e33dfd1 67
Hatter 7:f15a96ec54e1 68 if(rx==__readSize+1){
Hatter 7:f15a96ec54e1 69 for(i=KEY+1, rx_checkcode=0; i<__readSize+1; i++){
Hatter 7:f15a96ec54e1 70 rx_checkcode ^= rxData[i];
Hatter 7:f15a96ec54e1 71 }//CHECKCODE作成
Hatter 7:f15a96ec54e1 72 }
Hatter 6:49c82ca5aa37 73
Hatter 7:f15a96ec54e1 74 if(rx >= __readSize+2){
Hatter 7:f15a96ec54e1 75 if(rxData[__readSize+1]==rx_checkcode){
Hatter 6:49c82ca5aa37 76
Hatter 7:f15a96ec54e1 77 for(int m=1;m<=__readSize;m++){
Hatter 7:f15a96ec54e1 78 __readData[m-1] = rxData[m];
Hatter 7:f15a96ec54e1 79 }
Hatter 6:49c82ca5aa37 80
Hatter 7:f15a96ec54e1 81 //使うデータ = 受け取ったデータ
Hatter 7:f15a96ec54e1 82 }
Hatter 7:f15a96ec54e1 83 rx=0;
Hatter 7:f15a96ec54e1 84 }
Hatter 6:49c82ca5aa37 85 }