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

Dependents:   multiserial_test serial_check_controller receiverA receiver_transmitter ... more

Committer:
Hatter
Date:
Tue Sep 02 06:49:44 2014 +0000
Revision:
9:26262b75f40b
Parent:
7:f15a96ec54e1
Child:
12:5539a5dcdeff
???????????; ???????????????

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 9:26262b75f40b 8
Hatter 9:26262b75f40b 9 MultiSerial::MultiSerial(PinName tx,PinName rx,dir_state state) : __serial__(tx,rx){
Hatter 9:26262b75f40b 10
Hatter 9:26262b75f40b 11 switch(state){
Hatter 9:26262b75f40b 12
Hatter 9:26262b75f40b 13 case read:
Hatter 9:26262b75f40b 14 {
Hatter 9:26262b75f40b 15 __serial__.attach(this,&MultiSerial::RX,Serial::RxIrq);
Hatter 9:26262b75f40b 16 uint8_t k = __serial__.getc();
Hatter 9:26262b75f40b 17 break;
Hatter 9:26262b75f40b 18 }
Hatter 9:26262b75f40b 19
Hatter 9:26262b75f40b 20 case write:
Hatter 9:26262b75f40b 21 {
Hatter 9:26262b75f40b 22 __serial__.attach(this,&MultiSerial::TX,Serial::TxIrq);
Hatter 9:26262b75f40b 23 __serial__.putc(1);
Hatter 9:26262b75f40b 24 break;
Hatter 9:26262b75f40b 25 }
Hatter 9:26262b75f40b 26
Hatter 9:26262b75f40b 27 case both:
Hatter 9:26262b75f40b 28 {
Hatter 9:26262b75f40b 29 __serial__.attach(this,&MultiSerial::RX,Serial::RxIrq);
Hatter 9:26262b75f40b 30 uint8_t m = __serial__.getc();
Hatter 9:26262b75f40b 31 __serial__.attach(this,&MultiSerial::TX,Serial::TxIrq);
Hatter 9:26262b75f40b 32 __serial__.putc(1);
Hatter 9:26262b75f40b 33 }
Hatter 9:26262b75f40b 34 }
Hatter 9:26262b75f40b 35 }
Hatter 7:f15a96ec54e1 36
Hatter 9:26262b75f40b 37 void MultiSerial::read_data(uint8_t* readData,uint8_t readKey){
Hatter 0:77c15e33dfd1 38
Hatter 7:f15a96ec54e1 39 __readData = readData;
Hatter 7:f15a96ec54e1 40 __readSize = __SIZE(__readData);
Hatter 7:f15a96ec54e1 41 __readKey = readKey;
Hatter 7:f15a96ec54e1 42 }
Hatter 7:f15a96ec54e1 43
Hatter 7:f15a96ec54e1 44
Hatter 9:26262b75f40b 45 void MultiSerial::write_data(uint8_t* writeData,uint8_t writeKey){
Hatter 0:77c15e33dfd1 46
Hatter 7:f15a96ec54e1 47 __writeData=writeData;
Hatter 7:f15a96ec54e1 48 __writeSize = __SIZE(__writeData);
Hatter 7:f15a96ec54e1 49 __writeKey = writeKey;
Hatter 7:f15a96ec54e1 50 }
Hatter 7:f15a96ec54e1 51
Hatter 7:f15a96ec54e1 52
Hatter 7:f15a96ec54e1 53 void MultiSerial::TX(void){//送信バッファ空き割り込み用関数
Hatter 0:77c15e33dfd1 54
Hatter 7:f15a96ec54e1 55 static uint8_t tx=__writeSize+2, i;
Hatter 7:f15a96ec54e1 56 static uint8_t txData[MAX_DATA_NUM]={__writeKey};
Hatter 7:f15a96ec54e1 57 static uint8_t tx_checkcode=0;
Hatter 7:f15a96ec54e1 58 if(tx >= __writeSize+2){
Hatter 7:f15a96ec54e1 59 txData[KEY] = __writeKey;;
Hatter 7:f15a96ec54e1 60
Hatter 7:f15a96ec54e1 61 for(int k=1;k<=__writeSize;k++){
Hatter 7:f15a96ec54e1 62 txData[k] = __writeData[k-1];
Hatter 7:f15a96ec54e1 63 }
Hatter 0:77c15e33dfd1 64
Hatter 7:f15a96ec54e1 65 //送るデータ = センサ等のデータ
Hatter 7:f15a96ec54e1 66 for(i=KEY+1, tx_checkcode=0; i<__writeSize+1; i++){
Hatter 7:f15a96ec54e1 67 tx_checkcode ^= txData[i];
Hatter 7:f15a96ec54e1 68 }//CHECKCODE作成
Hatter 7:f15a96ec54e1 69 txData[__writeSize+1] = tx_checkcode;
Hatter 7:f15a96ec54e1 70 tx=0;
Hatter 7:f15a96ec54e1 71 }
Hatter 7:f15a96ec54e1 72 __serial__.putc(txData[tx]);
Hatter 7:f15a96ec54e1 73 tx++;
Hatter 7:f15a96ec54e1 74 }//受信割り込み用関数
Hatter 7:f15a96ec54e1 75
Hatter 7:f15a96ec54e1 76 void MultiSerial::RX(void){
Hatter 7:f15a96ec54e1 77
Hatter 7:f15a96ec54e1 78 static uint8_t rx=0, i;
Hatter 7:f15a96ec54e1 79 static uint8_t rxData[MAX_DATA_NUM]={__readKey};
Hatter 7:f15a96ec54e1 80 static uint8_t rx_checkcode=0;
Hatter 7:f15a96ec54e1 81
Hatter 7:f15a96ec54e1 82 rxData[rx] = __serial__.getc();
Hatter 7:f15a96ec54e1 83
Hatter 7:f15a96ec54e1 84 if(rxData[KEY]==__readKey){
Hatter 7:f15a96ec54e1 85 rx++;
Hatter 0:77c15e33dfd1 86 }
Hatter 0:77c15e33dfd1 87
Hatter 7:f15a96ec54e1 88 if(rx==__readSize+1){
Hatter 7:f15a96ec54e1 89 for(i=KEY+1, rx_checkcode=0; i<__readSize+1; i++){
Hatter 7:f15a96ec54e1 90 rx_checkcode ^= rxData[i];
Hatter 7:f15a96ec54e1 91 }//CHECKCODE作成
Hatter 7:f15a96ec54e1 92 }
Hatter 6:49c82ca5aa37 93
Hatter 7:f15a96ec54e1 94 if(rx >= __readSize+2){
Hatter 7:f15a96ec54e1 95 if(rxData[__readSize+1]==rx_checkcode){
Hatter 6:49c82ca5aa37 96
Hatter 7:f15a96ec54e1 97 for(int m=1;m<=__readSize;m++){
Hatter 7:f15a96ec54e1 98 __readData[m-1] = rxData[m];
Hatter 7:f15a96ec54e1 99 }
Hatter 6:49c82ca5aa37 100
Hatter 7:f15a96ec54e1 101 //使うデータ = 受け取ったデータ
Hatter 7:f15a96ec54e1 102 }
Hatter 7:f15a96ec54e1 103 rx=0;
Hatter 7:f15a96ec54e1 104 }
Hatter 6:49c82ca5aa37 105 }