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

Dependents:   multiserial_test serial_check_controller receiverA receiver_transmitter ... more

Committer:
lilac0112_1
Date:
Wed Mar 11 07:46:33 2015 +0000
Revision:
32:fde0f01a0c7b
Parent:
29:e85f05ee9ad5
Send to F.F

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 28:7620ef9e7187 10 MultiSerial::MultiSerial(PinName tx,PinName rx) : __serial__(tx,rx){}
Hatter 12:5539a5dcdeff 11
bousiya03 26:0b108faf5d5a 12 void MultiSerial::safety(){
bousiya03 26:0b108faf5d5a 13
bousiya03 28:7620ef9e7187 14 for(int l = 0;l <= __readSize;l++){
bousiya03 28:7620ef9e7187 15
bousiya03 28:7620ef9e7187 16 __readData[l] = 0;
bousiya03 28:7620ef9e7187 17
bousiya03 28:7620ef9e7187 18 }
bousiya03 26:0b108faf5d5a 19 }
bousiya03 26:0b108faf5d5a 20
Hatter 12:5539a5dcdeff 21 void MultiSerial::start_write(){
Hatter 12:5539a5dcdeff 22
bousiya03 19:0acb5961827b 23 __serial__.attach(this,&MultiSerial::TX,RawSerial::TxIrq);
Hatter 12:5539a5dcdeff 24 __serial__.putc(1);
Hatter 12:5539a5dcdeff 25
Hatter 12:5539a5dcdeff 26 }
bousiya03 28:7620ef9e7187 27
Hatter 12:5539a5dcdeff 28 void MultiSerial::start_read(){
Hatter 12:5539a5dcdeff 29
bousiya03 19:0acb5961827b 30 __serial__.attach(this,&MultiSerial::RX,RawSerial::RxIrq);
Hatter 12:5539a5dcdeff 31 uint8_t k = __serial__.getc();
Hatter 12:5539a5dcdeff 32
bousiya03 17:5e2c78dbbd40 33 __first_bit = k;
bousiya03 17:5e2c78dbbd40 34
Hatter 12:5539a5dcdeff 35 }
Hatter 7:f15a96ec54e1 36
bousiya03 29:e85f05ee9ad5 37 void MultiSerial::read_data(uint8_t* readData,uint8_t readKey,int readSize){
Hatter 0:77c15e33dfd1 38
Hatter 7:f15a96ec54e1 39 __readData = readData;
bousiya03 29:e85f05ee9ad5 40 __readSize = readSize;
Hatter 7:f15a96ec54e1 41 __readKey = readKey;
Hatter 7:f15a96ec54e1 42 }
Hatter 7:f15a96ec54e1 43
Hatter 7:f15a96ec54e1 44
lilac0112_1 32:fde0f01a0c7b 45 void MultiSerial::write_data(uint8_t* writeData,uint8_t writeKey,int writeSize){
Hatter 0:77c15e33dfd1 46
bousiya03 28:7620ef9e7187 47 __writeData = writeData;
bousiya03 29:e85f05ee9ad5 48 __writeSize = writeSize;
Hatter 7:f15a96ec54e1 49 __writeKey = writeKey;
Hatter 7:f15a96ec54e1 50 }
Hatter 7:f15a96ec54e1 51
Hatter 7:f15a96ec54e1 52 void MultiSerial::TX(void){//送信バッファ空き割り込み用関数
Hatter 0:77c15e33dfd1 53
bousiya03 28:7620ef9e7187 54 static uint8_t tx = __writeSize+2, i;
bousiya03 28:7620ef9e7187 55 static uint8_t txData[MAX_DATA_NUM] = {__writeKey};
bousiya03 28:7620ef9e7187 56 static uint8_t tx_checkcode = 0;
bousiya03 28:7620ef9e7187 57
Hatter 7:f15a96ec54e1 58 if(tx >= __writeSize+2){
Hatter 12:5539a5dcdeff 59 txData[KEY] = __writeKey;
Hatter 7:f15a96ec54e1 60
bousiya03 28:7620ef9e7187 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 //送るデータ = センサ等のデータ
bousiya03 28:7620ef9e7187 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;
bousiya03 28:7620ef9e7187 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 12:5539a5dcdeff 77
bousiya03 28:7620ef9e7187 78 static uint8_t rx = 0, i;
bousiya03 28:7620ef9e7187 79 static uint8_t rxData[MAX_DATA_NUM] = {__readKey};
bousiya03 28:7620ef9e7187 80 static uint8_t rx_checkcode = 0;
Hatter 7:f15a96ec54e1 81
Hatter 7:f15a96ec54e1 82 rxData[rx] = __serial__.getc();
Hatter 7:f15a96ec54e1 83
bousiya03 28:7620ef9e7187 84 if(rxData[KEY] == __readKey){
Hatter 7:f15a96ec54e1 85 rx++;
Hatter 0:77c15e33dfd1 86 }
Hatter 0:77c15e33dfd1 87
bousiya03 28:7620ef9e7187 88 if(rx == __readSize+1){
bousiya03 28:7620ef9e7187 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){
bousiya03 28:7620ef9e7187 95 if(rxData[__readSize+1] == rx_checkcode){
bousiya03 19:0acb5961827b 96
bousiya03 26:0b108faf5d5a 97 __check_rx = 1;
bousiya03 26:0b108faf5d5a 98
bousiya03 26:0b108faf5d5a 99 xbee_check.attach(this,&MultiSerial::safety,0.5);
bousiya03 19:0acb5961827b 100
bousiya03 28:7620ef9e7187 101 for(int m = 1;m <= __readSize;m++){
Hatter 7:f15a96ec54e1 102 __readData[m-1] = rxData[m];
Hatter 7:f15a96ec54e1 103 }
Hatter 6:49c82ca5aa37 104
Hatter 7:f15a96ec54e1 105 //使うデータ = 受け取ったデータ
bousiya03 19:0acb5961827b 106 }else{
bousiya03 19:0acb5961827b 107
bousiya03 28:7620ef9e7187 108 __check_rx = 0;
bousiya03 19:0acb5961827b 109
bousiya03 19:0acb5961827b 110 }
Hatter 7:f15a96ec54e1 111 rx=0;
Hatter 7:f15a96ec54e1 112 }
Hatter 6:49c82ca5aa37 113 }
Hatter 14:a1ff72d48831 114
Hatter 14:a1ff72d48831 115 uint8_t MultiSerial::readable_check(){
Hatter 14:a1ff72d48831 116
Hatter 14:a1ff72d48831 117 return __serial__.readable();
Hatter 14:a1ff72d48831 118
Hatter 14:a1ff72d48831 119 }
bousiya03 17:5e2c78dbbd40 120
bousiya03 17:5e2c78dbbd40 121 uint8_t MultiSerial::re_first_bit(){
bousiya03 17:5e2c78dbbd40 122
bousiya03 17:5e2c78dbbd40 123 return __first_bit;
bousiya03 17:5e2c78dbbd40 124
bousiya03 17:5e2c78dbbd40 125 }
bousiya03 20:9e14b87bfdac 126
bousiya03 20:9e14b87bfdac 127 void MultiSerial::check_rx_wait(){
bousiya03 20:9e14b87bfdac 128
bousiya03 28:7620ef9e7187 129 if(__check_rx == 0) NVIC_SystemReset();
bousiya03 19:0acb5961827b 130
bousiya03 19:0acb5961827b 131 }
bousiya03 17:5e2c78dbbd40 132