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

Dependents:   multiserial_test serial_check_controller receiverA receiver_transmitter ... more

Committer:
bousiya03
Date:
Tue Oct 14 12:16:15 2014 +0000
Revision:
23:8209d99397b8
Parent:
21:f8802a69c1af
Child:
24:0ca02e8c37e5
??????????????; dettach????????

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){
Hatter 12:5539a5dcdeff 52 txData[KEY] = __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 21:f8802a69c1af 58 for(i = KEY+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 23:8209d99397b8 70
Hatter 12:5539a5dcdeff 71
bousiya03 21:f8802a69c1af 72 static uint8_t rx = 0, i;
bousiya03 21:f8802a69c1af 73 static uint8_t rxData[MAX_DATA_NUM] = {__readKey};
bousiya03 21:f8802a69c1af 74 static uint8_t rx_checkcode = 0;
Hatter 7:f15a96ec54e1 75
Hatter 7:f15a96ec54e1 76 rxData[rx] = __serial__.getc();
Hatter 7:f15a96ec54e1 77
bousiya03 21:f8802a69c1af 78 if(rxData[KEY] == __readKey){
Hatter 7:f15a96ec54e1 79 rx++;
Hatter 0:77c15e33dfd1 80 }
Hatter 0:77c15e33dfd1 81
bousiya03 21:f8802a69c1af 82 if(rx == __readSize+1){
bousiya03 21:f8802a69c1af 83 for(i = KEY+1, rx_checkcode = 0; i < __readSize+1; i++){
Hatter 7:f15a96ec54e1 84 rx_checkcode ^= rxData[i];
bousiya03 21:f8802a69c1af 85 }
Hatter 7:f15a96ec54e1 86 }
Hatter 6:49c82ca5aa37 87
Hatter 7:f15a96ec54e1 88 if(rx >= __readSize+2){
bousiya03 21:f8802a69c1af 89 if(rxData[__readSize+1] == rx_checkcode){
bousiya03 19:0acb5961827b 90
bousiya03 19:0acb5961827b 91 __check_rx = 1;
bousiya03 19:0acb5961827b 92
bousiya03 21:f8802a69c1af 93 for(int m = 1;m <= __readSize;m++){
Hatter 7:f15a96ec54e1 94 __readData[m-1] = rxData[m];
Hatter 7:f15a96ec54e1 95 }
bousiya03 21:f8802a69c1af 96
bousiya03 19:0acb5961827b 97 }else{
bousiya03 21:f8802a69c1af 98 __check_rx = 0;
bousiya03 19:0acb5961827b 99 }
bousiya03 21:f8802a69c1af 100 rx = 0;
Hatter 7:f15a96ec54e1 101 }
Hatter 6:49c82ca5aa37 102 }
Hatter 14:a1ff72d48831 103
Hatter 14:a1ff72d48831 104 uint8_t MultiSerial::readable_check(){
Hatter 14:a1ff72d48831 105
Hatter 14:a1ff72d48831 106 return __serial__.readable();
Hatter 14:a1ff72d48831 107 }
bousiya03 20:9e14b87bfdac 108
bousiya03 21:f8802a69c1af 109 void MultiSerial::check_rx_wait(){
bousiya03 20:9e14b87bfdac 110
bousiya03 21:f8802a69c1af 111 if(__check_rx==0) NVIC_SystemReset();
bousiya03 19:0acb5961827b 112 }
bousiya03 17:5e2c78dbbd40 113