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

Dependents:   multiserial_test serial_check_controller receiverA receiver_transmitter ... more

Committer:
bousiya03
Date:
Wed Oct 15 06:14:59 2014 +0000
Revision:
25:1df5616cc007
Parent:
24:0ca02e8c37e5
?????????????

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;
bousiya03 25:1df5616cc007 74
bousiya03 25:1df5616cc007 75 __counter_rx++;
Hatter 7:f15a96ec54e1 76
Hatter 7:f15a96ec54e1 77 rxData[rx] = __serial__.getc();
Hatter 7:f15a96ec54e1 78
bousiya03 24:0ca02e8c37e5 79 if(rxData[0] == __readKey){
Hatter 7:f15a96ec54e1 80 rx++;
Hatter 0:77c15e33dfd1 81 }
Hatter 0:77c15e33dfd1 82
bousiya03 21:f8802a69c1af 83 if(rx == __readSize+1){
bousiya03 24:0ca02e8c37e5 84 for(i = 1, rx_checkcode = 0; i < __readSize+1; i++){
Hatter 7:f15a96ec54e1 85 rx_checkcode ^= rxData[i];
bousiya03 21:f8802a69c1af 86 }
Hatter 7:f15a96ec54e1 87 }
Hatter 6:49c82ca5aa37 88
Hatter 7:f15a96ec54e1 89 if(rx >= __readSize+2){
bousiya03 21:f8802a69c1af 90 if(rxData[__readSize+1] == rx_checkcode){
bousiya03 19:0acb5961827b 91
bousiya03 19:0acb5961827b 92 __check_rx = 1;
bousiya03 19:0acb5961827b 93
bousiya03 21:f8802a69c1af 94 for(int m = 1;m <= __readSize;m++){
Hatter 7:f15a96ec54e1 95 __readData[m-1] = rxData[m];
Hatter 7:f15a96ec54e1 96 }
bousiya03 21:f8802a69c1af 97
bousiya03 19:0acb5961827b 98 }else{
bousiya03 21:f8802a69c1af 99 __check_rx = 0;
bousiya03 19:0acb5961827b 100 }
bousiya03 21:f8802a69c1af 101 rx = 0;
Hatter 7:f15a96ec54e1 102 }
Hatter 6:49c82ca5aa37 103 }
Hatter 14:a1ff72d48831 104
Hatter 14:a1ff72d48831 105 uint8_t MultiSerial::readable_check(){
Hatter 14:a1ff72d48831 106
Hatter 14:a1ff72d48831 107 return __serial__.readable();
Hatter 14:a1ff72d48831 108 }
bousiya03 20:9e14b87bfdac 109
bousiya03 21:f8802a69c1af 110 void MultiSerial::check_rx_wait(){
bousiya03 20:9e14b87bfdac 111
bousiya03 21:f8802a69c1af 112 if(__check_rx==0) NVIC_SystemReset();
bousiya03 19:0acb5961827b 113 }
bousiya03 25:1df5616cc007 114 uint8_t MultiSerial::re_counter_rx(){
bousiya03 25:1df5616cc007 115
bousiya03 25:1df5616cc007 116 return __counter_rx;
bousiya03 25:1df5616cc007 117
bousiya03 25:1df5616cc007 118 }
bousiya03 25:1df5616cc007 119 void MultiSerial::reset_counter_rx(){
bousiya03 25:1df5616cc007 120
bousiya03 25:1df5616cc007 121 __counter_rx = 0;
bousiya03 25:1df5616cc007 122
bousiya03 25:1df5616cc007 123 }