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

Dependents:   multiserial_test serial_check_controller receiverA receiver_transmitter ... more

Committer:
bousiya03
Date:
Wed Oct 15 11:10:00 2014 +0000
Revision:
26:0b108faf5d5a
Parent:
20:9e14b87bfdac
Child:
27:6dcd6c2fba1a
????????

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
Hatter 12:5539a5dcdeff 10 MultiSerial::MultiSerial(PinName tx,PinName rx) : __serial__(tx,rx){
Hatter 12:5539a5dcdeff 11 /*
Hatter 9:26262b75f40b 12 switch(state){
Hatter 9:26262b75f40b 13
Hatter 9:26262b75f40b 14 case read:
Hatter 9:26262b75f40b 15 {
Hatter 9:26262b75f40b 16 __serial__.attach(this,&MultiSerial::RX,Serial::RxIrq);
Hatter 9:26262b75f40b 17 uint8_t k = __serial__.getc();
Hatter 9:26262b75f40b 18 break;
Hatter 9:26262b75f40b 19 }
Hatter 9:26262b75f40b 20
Hatter 9:26262b75f40b 21 case write:
Hatter 9:26262b75f40b 22 {
Hatter 9:26262b75f40b 23 __serial__.attach(this,&MultiSerial::TX,Serial::TxIrq);
Hatter 9:26262b75f40b 24 __serial__.putc(1);
Hatter 9:26262b75f40b 25 break;
Hatter 9:26262b75f40b 26 }
Hatter 9:26262b75f40b 27
Hatter 9:26262b75f40b 28 case both:
Hatter 9:26262b75f40b 29 {
Hatter 9:26262b75f40b 30 __serial__.attach(this,&MultiSerial::RX,Serial::RxIrq);
Hatter 9:26262b75f40b 31 uint8_t m = __serial__.getc();
Hatter 9:26262b75f40b 32 __serial__.attach(this,&MultiSerial::TX,Serial::TxIrq);
Hatter 9:26262b75f40b 33 __serial__.putc(1);
Hatter 9:26262b75f40b 34 }
Hatter 12:5539a5dcdeff 35
Hatter 9:26262b75f40b 36 }
Hatter 12:5539a5dcdeff 37 */
Hatter 9:26262b75f40b 38 }
Hatter 12:5539a5dcdeff 39
bousiya03 26:0b108faf5d5a 40 void MultiSerial::safety(){
bousiya03 26:0b108faf5d5a 41
bousiya03 26:0b108faf5d5a 42 *__readData = 0;
bousiya03 26:0b108faf5d5a 43
bousiya03 26:0b108faf5d5a 44 }
bousiya03 26:0b108faf5d5a 45
Hatter 12:5539a5dcdeff 46 void MultiSerial::start_write(){
Hatter 12:5539a5dcdeff 47
Hatter 12:5539a5dcdeff 48 __stop_write = 0;
bousiya03 19:0acb5961827b 49 __serial__.attach(this,&MultiSerial::TX,RawSerial::TxIrq);
Hatter 12:5539a5dcdeff 50 __serial__.putc(1);
Hatter 12:5539a5dcdeff 51
Hatter 12:5539a5dcdeff 52 }
Hatter 12:5539a5dcdeff 53
Hatter 12:5539a5dcdeff 54 void MultiSerial::stop_write(){
Hatter 12:5539a5dcdeff 55
Hatter 12:5539a5dcdeff 56 __stop_write = 1;
Hatter 12:5539a5dcdeff 57
Hatter 12:5539a5dcdeff 58 }
Hatter 12:5539a5dcdeff 59
Hatter 12:5539a5dcdeff 60
Hatter 12:5539a5dcdeff 61 void MultiSerial::start_read(){
Hatter 12:5539a5dcdeff 62
Hatter 12:5539a5dcdeff 63 __stop_read = 0;
bousiya03 19:0acb5961827b 64 __serial__.attach(this,&MultiSerial::RX,RawSerial::RxIrq);
Hatter 12:5539a5dcdeff 65 uint8_t k = __serial__.getc();
Hatter 12:5539a5dcdeff 66
bousiya03 17:5e2c78dbbd40 67 __first_bit = k;
bousiya03 17:5e2c78dbbd40 68
Hatter 12:5539a5dcdeff 69 }
Hatter 12:5539a5dcdeff 70
Hatter 12:5539a5dcdeff 71 void MultiSerial::stop_read(){
Hatter 12:5539a5dcdeff 72
Hatter 12:5539a5dcdeff 73 __stop_read = 1;
Hatter 12:5539a5dcdeff 74
Hatter 12:5539a5dcdeff 75 }
Hatter 7:f15a96ec54e1 76
Hatter 9:26262b75f40b 77 void MultiSerial::read_data(uint8_t* readData,uint8_t readKey){
Hatter 0:77c15e33dfd1 78
Hatter 7:f15a96ec54e1 79 __readData = readData;
Hatter 7:f15a96ec54e1 80 __readSize = __SIZE(__readData);
Hatter 7:f15a96ec54e1 81 __readKey = readKey;
Hatter 7:f15a96ec54e1 82 }
Hatter 7:f15a96ec54e1 83
Hatter 7:f15a96ec54e1 84
Hatter 9:26262b75f40b 85 void MultiSerial::write_data(uint8_t* writeData,uint8_t writeKey){
Hatter 0:77c15e33dfd1 86
Hatter 7:f15a96ec54e1 87 __writeData=writeData;
Hatter 7:f15a96ec54e1 88 __writeSize = __SIZE(__writeData);
Hatter 7:f15a96ec54e1 89 __writeKey = writeKey;
Hatter 7:f15a96ec54e1 90 }
Hatter 7:f15a96ec54e1 91
Hatter 7:f15a96ec54e1 92
Hatter 7:f15a96ec54e1 93 void MultiSerial::TX(void){//送信バッファ空き割り込み用関数
Hatter 0:77c15e33dfd1 94
Hatter 12:5539a5dcdeff 95 if(__stop_write==1){return;}
Hatter 12:5539a5dcdeff 96
Hatter 7:f15a96ec54e1 97 static uint8_t tx=__writeSize+2, i;
Hatter 7:f15a96ec54e1 98 static uint8_t txData[MAX_DATA_NUM]={__writeKey};
Hatter 7:f15a96ec54e1 99 static uint8_t tx_checkcode=0;
Hatter 7:f15a96ec54e1 100 if(tx >= __writeSize+2){
Hatter 12:5539a5dcdeff 101 txData[KEY] = __writeKey;
Hatter 7:f15a96ec54e1 102
Hatter 7:f15a96ec54e1 103 for(int k=1;k<=__writeSize;k++){
Hatter 7:f15a96ec54e1 104 txData[k] = __writeData[k-1];
Hatter 7:f15a96ec54e1 105 }
Hatter 0:77c15e33dfd1 106
Hatter 7:f15a96ec54e1 107 //送るデータ = センサ等のデータ
Hatter 7:f15a96ec54e1 108 for(i=KEY+1, tx_checkcode=0; i<__writeSize+1; i++){
Hatter 7:f15a96ec54e1 109 tx_checkcode ^= txData[i];
Hatter 7:f15a96ec54e1 110 }//CHECKCODE作成
Hatter 7:f15a96ec54e1 111 txData[__writeSize+1] = tx_checkcode;
Hatter 7:f15a96ec54e1 112 tx=0;
Hatter 7:f15a96ec54e1 113 }
Hatter 7:f15a96ec54e1 114 __serial__.putc(txData[tx]);
Hatter 7:f15a96ec54e1 115 tx++;
Hatter 7:f15a96ec54e1 116 }//受信割り込み用関数
Hatter 7:f15a96ec54e1 117
Hatter 7:f15a96ec54e1 118 void MultiSerial::RX(void){
Hatter 12:5539a5dcdeff 119
Hatter 12:5539a5dcdeff 120 if(__stop_read==1){return;}
Hatter 12:5539a5dcdeff 121
Hatter 7:f15a96ec54e1 122 static uint8_t rx=0, i;
Hatter 7:f15a96ec54e1 123 static uint8_t rxData[MAX_DATA_NUM]={__readKey};
Hatter 7:f15a96ec54e1 124 static uint8_t rx_checkcode=0;
Hatter 7:f15a96ec54e1 125
Hatter 7:f15a96ec54e1 126 rxData[rx] = __serial__.getc();
Hatter 7:f15a96ec54e1 127
Hatter 7:f15a96ec54e1 128 if(rxData[KEY]==__readKey){
Hatter 7:f15a96ec54e1 129 rx++;
Hatter 0:77c15e33dfd1 130 }
Hatter 0:77c15e33dfd1 131
Hatter 7:f15a96ec54e1 132 if(rx==__readSize+1){
Hatter 7:f15a96ec54e1 133 for(i=KEY+1, rx_checkcode=0; i<__readSize+1; i++){
Hatter 7:f15a96ec54e1 134 rx_checkcode ^= rxData[i];
Hatter 7:f15a96ec54e1 135 }//CHECKCODE作成
Hatter 7:f15a96ec54e1 136 }
Hatter 6:49c82ca5aa37 137
Hatter 7:f15a96ec54e1 138 if(rx >= __readSize+2){
Hatter 7:f15a96ec54e1 139 if(rxData[__readSize+1]==rx_checkcode){
bousiya03 19:0acb5961827b 140
bousiya03 26:0b108faf5d5a 141 __check_rx = 1;
bousiya03 26:0b108faf5d5a 142
bousiya03 26:0b108faf5d5a 143 xbee_check.attach(this,&MultiSerial::safety,0.5);
bousiya03 19:0acb5961827b 144
Hatter 7:f15a96ec54e1 145 for(int m=1;m<=__readSize;m++){
Hatter 7:f15a96ec54e1 146 __readData[m-1] = rxData[m];
Hatter 7:f15a96ec54e1 147 }
Hatter 6:49c82ca5aa37 148
Hatter 7:f15a96ec54e1 149 //使うデータ = 受け取ったデータ
bousiya03 19:0acb5961827b 150 }else{
bousiya03 19:0acb5961827b 151
bousiya03 19:0acb5961827b 152 __check_rx=0;
bousiya03 19:0acb5961827b 153
bousiya03 19:0acb5961827b 154 }
Hatter 7:f15a96ec54e1 155 rx=0;
Hatter 7:f15a96ec54e1 156 }
Hatter 6:49c82ca5aa37 157 }
Hatter 14:a1ff72d48831 158
Hatter 14:a1ff72d48831 159 uint8_t MultiSerial::readable_check(){
Hatter 14:a1ff72d48831 160
Hatter 14:a1ff72d48831 161 return __serial__.readable();
Hatter 14:a1ff72d48831 162
Hatter 14:a1ff72d48831 163 }
bousiya03 17:5e2c78dbbd40 164
bousiya03 17:5e2c78dbbd40 165 uint8_t MultiSerial::re_first_bit(){
bousiya03 17:5e2c78dbbd40 166
bousiya03 17:5e2c78dbbd40 167 return __first_bit;
bousiya03 17:5e2c78dbbd40 168
bousiya03 17:5e2c78dbbd40 169 }
bousiya03 20:9e14b87bfdac 170
bousiya03 20:9e14b87bfdac 171 void MultiSerial::check_rx_wait(){
bousiya03 19:0acb5961827b 172
bousiya03 20:9e14b87bfdac 173
bousiya03 20:9e14b87bfdac 174 if(__check_rx==0) NVIC_SystemReset();
bousiya03 19:0acb5961827b 175
bousiya03 19:0acb5961827b 176 }
bousiya03 17:5e2c78dbbd40 177