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

Dependents:   multiserial_test serial_check_controller receiverA receiver_transmitter ... more

Committer:
bousiya03
Date:
Tue Oct 14 12:22:02 2014 +0000
Revision:
24:0ca02e8c37e5
Parent:
23:8209d99397b8
Child:
25:1df5616cc007
????????

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"
bousiya03 19:0acb5961827b 7 #include "RawSerial.h"
Hatter 0:77c15e33dfd1 8
Hatter 9:26262b75f40b 9
bousiya03 21:f8802a69c1af 10 MultiSerial::MultiSerial(PinName tx,PinName rx) : __serial__(tx,rx){}
Hatter 12:5539a5dcdeff 11
Hatter 12:5539a5dcdeff 12 void MultiSerial::start_write(){
Hatter 12:5539a5dcdeff 13
bousiya03 19:0acb5961827b 14 __serial__.attach(this,&MultiSerial::TX,RawSerial::TxIrq);
Hatter 12:5539a5dcdeff 15 __serial__.putc(1);
Hatter 12:5539a5dcdeff 16
Hatter 12:5539a5dcdeff 17 }
bousiya03 23:8209d99397b8 18
Hatter 12:5539a5dcdeff 19 void MultiSerial::start_read(){
bousiya03 23:8209d99397b8 20
bousiya03 19:0acb5961827b 21 __serial__.attach(this,&MultiSerial::RX,RawSerial::RxIrq);
Hatter 12:5539a5dcdeff 22 uint8_t k = __serial__.getc();
Hatter 12:5539a5dcdeff 23
bousiya03 17:5e2c78dbbd40 24 __first_bit = k;
bousiya03 17:5e2c78dbbd40 25
Hatter 12:5539a5dcdeff 26 }
Hatter 12:5539a5dcdeff 27
Hatter 7:f15a96ec54e1 28
Hatter 9:26262b75f40b 29 void MultiSerial::read_data(uint8_t* readData,uint8_t readKey){
Hatter 0:77c15e33dfd1 30
Hatter 7:f15a96ec54e1 31 __readData = readData;
Hatter 7:f15a96ec54e1 32 __readSize = __SIZE(__readData);
Hatter 7:f15a96ec54e1 33 __readKey = readKey;
Hatter 7:f15a96ec54e1 34 }
Hatter 7:f15a96ec54e1 35
Hatter 7:f15a96ec54e1 36
Hatter 9:26262b75f40b 37 void MultiSerial::write_data(uint8_t* writeData,uint8_t writeKey){
Hatter 0:77c15e33dfd1 38
bousiya03 21:f8802a69c1af 39 __writeData = writeData;
Hatter 7:f15a96ec54e1 40 __writeSize = __SIZE(__writeData);
Hatter 7:f15a96ec54e1 41 __writeKey = writeKey;
Hatter 7:f15a96ec54e1 42 }
Hatter 7:f15a96ec54e1 43
Hatter 7:f15a96ec54e1 44
bousiya03 21:f8802a69c1af 45 void MultiSerial::TX(void){
Hatter 0:77c15e33dfd1 46
bousiya03 23:8209d99397b8 47 static uint8_t tx = __writeSize+2, i;
bousiya03 21:f8802a69c1af 48 static uint8_t txData[MAX_DATA_NUM] = {__writeKey};
bousiya03 23:8209d99397b8 49 static uint8_t tx_checkcode = 0;
bousiya03 21:f8802a69c1af 50
Hatter 7:f15a96ec54e1 51 if(tx >= __writeSize+2){
bousiya03 24:0ca02e8c37e5 52 txData[0] = __writeKey;
Hatter 7:f15a96ec54e1 53
bousiya03 23:8209d99397b8 54 for(int k = 1;k <= __writeSize;k++){
Hatter 7:f15a96ec54e1 55 txData[k] = __writeData[k-1];
Hatter 7:f15a96ec54e1 56 }
bousiya03 21:f8802a69c1af 57
bousiya03 24:0ca02e8c37e5 58 for(i = 1, tx_checkcode = 0; i<__writeSize+1; i++){
Hatter 7:f15a96ec54e1 59 tx_checkcode ^= txData[i];
bousiya03 21:f8802a69c1af 60 }
bousiya03 21:f8802a69c1af 61
Hatter 7:f15a96ec54e1 62 txData[__writeSize+1] = tx_checkcode;
Hatter 7:f15a96ec54e1 63 tx=0;
Hatter 7:f15a96ec54e1 64 }
Hatter 7:f15a96ec54e1 65 __serial__.putc(txData[tx]);
Hatter 7:f15a96ec54e1 66 tx++;
bousiya03 21:f8802a69c1af 67 }
Hatter 7:f15a96ec54e1 68
Hatter 7:f15a96ec54e1 69 void MultiSerial::RX(void){
bousiya03 24:0ca02e8c37e5 70
bousiya03 21:f8802a69c1af 71 static uint8_t rx = 0, i;
bousiya03 21:f8802a69c1af 72 static uint8_t rxData[MAX_DATA_NUM] = {__readKey};
bousiya03 21:f8802a69c1af 73 static uint8_t rx_checkcode = 0;
Hatter 7:f15a96ec54e1 74
Hatter 7:f15a96ec54e1 75 rxData[rx] = __serial__.getc();
Hatter 7:f15a96ec54e1 76
bousiya03 24:0ca02e8c37e5 77 if(rxData[0] == __readKey){
Hatter 7:f15a96ec54e1 78 rx++;
Hatter 0:77c15e33dfd1 79 }
Hatter 0:77c15e33dfd1 80
bousiya03 21:f8802a69c1af 81 if(rx == __readSize+1){
bousiya03 24:0ca02e8c37e5 82 for(i = 1, rx_checkcode = 0; i < __readSize+1; i++){
Hatter 7:f15a96ec54e1 83 rx_checkcode ^= rxData[i];
bousiya03 21:f8802a69c1af 84 }
Hatter 7:f15a96ec54e1 85 }
Hatter 6:49c82ca5aa37 86
Hatter 7:f15a96ec54e1 87 if(rx >= __readSize+2){
bousiya03 21:f8802a69c1af 88 if(rxData[__readSize+1] == rx_checkcode){
bousiya03 19:0acb5961827b 89
bousiya03 19:0acb5961827b 90 __check_rx = 1;
bousiya03 19:0acb5961827b 91
bousiya03 21:f8802a69c1af 92 for(int m = 1;m <= __readSize;m++){
Hatter 7:f15a96ec54e1 93 __readData[m-1] = rxData[m];
Hatter 7:f15a96ec54e1 94 }
bousiya03 21:f8802a69c1af 95
bousiya03 19:0acb5961827b 96 }else{
bousiya03 21:f8802a69c1af 97 __check_rx = 0;
bousiya03 19:0acb5961827b 98 }
bousiya03 21:f8802a69c1af 99 rx = 0;
Hatter 7:f15a96ec54e1 100 }
Hatter 6:49c82ca5aa37 101 }
Hatter 14:a1ff72d48831 102
Hatter 14:a1ff72d48831 103 uint8_t MultiSerial::readable_check(){
Hatter 14:a1ff72d48831 104
Hatter 14:a1ff72d48831 105 return __serial__.readable();
Hatter 14:a1ff72d48831 106 }
bousiya03 20:9e14b87bfdac 107
bousiya03 21:f8802a69c1af 108 void MultiSerial::check_rx_wait(){
bousiya03 20:9e14b87bfdac 109
bousiya03 21:f8802a69c1af 110 if(__check_rx==0) NVIC_SystemReset();
bousiya03 19:0acb5961827b 111 }
bousiya03 17:5e2c78dbbd40 112