test program for biuart

Dependencies:   mbed

Committer:
bf1891
Date:
Mon Aug 11 15:24:47 2014 +0000
Revision:
1:36aff54b80e2
Parent:
0:40d82aa11fe0
test program for biuart;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bf1891 0:40d82aa11fe0 1 #include "mbed.h"
bf1891 0:40d82aa11fe0 2 #include <vector>
bf1891 0:40d82aa11fe0 3
bf1891 0:40d82aa11fe0 4 Serial pc(USBTX, USBRX);
bf1891 0:40d82aa11fe0 5 Serial uart(p13, p14);
bf1891 0:40d82aa11fe0 6 DigitalInOut nREQ(p15);
bf1891 0:40d82aa11fe0 7 DigitalInOut nRDY(p16);
bf1891 0:40d82aa11fe0 8
bf1891 0:40d82aa11fe0 9 uint16_t ccitt(uint8_t len, uint8_t* buf);
bf1891 0:40d82aa11fe0 10
bf1891 0:40d82aa11fe0 11 uint16_t ccitt(uint8_t len, uint8_t* buf) {
bf1891 0:40d82aa11fe0 12 // length is masked to 8 bits (256=0) for checksum calculation, as it is in
bf1891 0:40d82aa11fe0 13 // the packet
bf1891 0:40d82aa11fe0 14 uint16_t crc = 0xffff ^ (len & 0xff);
bf1891 0:40d82aa11fe0 15
bf1891 0:40d82aa11fe0 16 for (int i = 0; i < len; i++) {
bf1891 0:40d82aa11fe0 17 crc = (crc >> 8) | (crc << 8);
bf1891 0:40d82aa11fe0 18 crc ^= buf[i];
bf1891 0:40d82aa11fe0 19 crc ^= (crc & 0xFF) >> 4;
bf1891 0:40d82aa11fe0 20 crc ^= crc << 12;
bf1891 0:40d82aa11fe0 21 crc ^= (crc & 0xFF) << 5;
bf1891 0:40d82aa11fe0 22 }
bf1891 0:40d82aa11fe0 23
bf1891 0:40d82aa11fe0 24 return crc;
bf1891 0:40d82aa11fe0 25 }
bf1891 0:40d82aa11fe0 26
bf1891 0:40d82aa11fe0 27 int main() {
bf1891 0:40d82aa11fe0 28 pc.baud(38400);
bf1891 1:36aff54b80e2 29 uart.baud(4800);
bf1891 0:40d82aa11fe0 30
bf1891 0:40d82aa11fe0 31 pc.printf("\n\r--------\n\rUART Test\n\r");
bf1891 0:40d82aa11fe0 32
bf1891 0:40d82aa11fe0 33 if (uart.readable()) {
bf1891 0:40d82aa11fe0 34 pc.printf("Leftover characters: ");
bf1891 0:40d82aa11fe0 35 while(uart.readable()) {
bf1891 0:40d82aa11fe0 36 pc.printf("%c", uart.getc());
bf1891 0:40d82aa11fe0 37 }
bf1891 0:40d82aa11fe0 38 pc.printf("\n\r");
bf1891 0:40d82aa11fe0 39 }
bf1891 0:40d82aa11fe0 40
bf1891 0:40d82aa11fe0 41 nREQ.input();
bf1891 0:40d82aa11fe0 42 nREQ.mode(PullUp);
bf1891 0:40d82aa11fe0 43 nRDY.input();
bf1891 0:40d82aa11fe0 44 nRDY.mode(PullUp);
bf1891 0:40d82aa11fe0 45
bf1891 0:40d82aa11fe0 46 pc.printf("Waiting\n\r");
bf1891 0:40d82aa11fe0 47
bf1891 0:40d82aa11fe0 48 while(nREQ != 0) {
bf1891 1:36aff54b80e2 49 // wait(0.01);
bf1891 1:36aff54b80e2 50 // pc.printf("nREQ: %d\n\r", nREQ.read());
bf1891 0:40d82aa11fe0 51 }
bf1891 0:40d82aa11fe0 52
bf1891 1:36aff54b80e2 53 pc.printf("nREQ has gone low\n\r");
bf1891 0:40d82aa11fe0 54
bf1891 0:40d82aa11fe0 55 nRDY = 0;
bf1891 0:40d82aa11fe0 56 nRDY.output();
bf1891 0:40d82aa11fe0 57
bf1891 1:36aff54b80e2 58 uint8_t len = uart.getc();
bf1891 1:36aff54b80e2 59 pc.printf("recieved len: %u\n\r", len);
bf1891 0:40d82aa11fe0 60 std::vector<uint8_t> payload;
bf1891 0:40d82aa11fe0 61 for (int i = 0; i < len; i++) {
bf1891 0:40d82aa11fe0 62 payload.push_back(uart.getc());
bf1891 1:36aff54b80e2 63 // pc.printf("%d have recieved: %d\n\r", payload.size(), payload[i]);
bf1891 0:40d82aa11fe0 64 }
bf1891 1:36aff54b80e2 65
bf1891 1:36aff54b80e2 66 pc.printf("No more stuff to load...\n\r");
bf1891 0:40d82aa11fe0 67
bf1891 0:40d82aa11fe0 68 uint8_t checksum = 0;
bf1891 0:40d82aa11fe0 69 for (int i = 0; i < 2; i++) {
bf1891 0:40d82aa11fe0 70 checksum |= ((uint16_t) (uart.getc())) << (i * 8);
bf1891 0:40d82aa11fe0 71 }
bf1891 0:40d82aa11fe0 72
bf1891 0:40d82aa11fe0 73 pc.printf("len: %d\n\r", len);
bf1891 0:40d82aa11fe0 74 pc.printf("payload: ");
bf1891 0:40d82aa11fe0 75 for (int i = 0; i < len; i++) {
bf1891 0:40d82aa11fe0 76 pc.printf("%c", payload[i]);
bf1891 0:40d82aa11fe0 77 }
bf1891 0:40d82aa11fe0 78 pc.printf("\n\r");
bf1891 0:40d82aa11fe0 79 pc.printf("checksum: 0x%X\n\r", checksum);
bf1891 0:40d82aa11fe0 80
bf1891 0:40d82aa11fe0 81 uint16_t crc = ccitt(len, &payload[0]);
bf1891 0:40d82aa11fe0 82 pc.printf("ccitt: 0x%X\n\r", crc);
bf1891 0:40d82aa11fe0 83
bf1891 0:40d82aa11fe0 84 nRDY.input();
bf1891 0:40d82aa11fe0 85 nRDY.mode(PullUp);
bf1891 0:40d82aa11fe0 86
bf1891 0:40d82aa11fe0 87 pc.printf("Sending\n\r");
bf1891 0:40d82aa11fe0 88
bf1891 0:40d82aa11fe0 89 uint8_t* str = (uint8_t*) "HelloHelloHelloHelloHello";
bf1891 0:40d82aa11fe0 90 uint8_t str_len = 5;
bf1891 0:40d82aa11fe0 91 // uint16_t str_checksum = ccitt(str_len, str);
bf1891 0:40d82aa11fe0 92
bf1891 0:40d82aa11fe0 93 nREQ = 0;
bf1891 0:40d82aa11fe0 94 nREQ.output();
bf1891 0:40d82aa11fe0 95
bf1891 0:40d82aa11fe0 96 while(nRDY != 0) {
bf1891 0:40d82aa11fe0 97 wait(0.1);
bf1891 0:40d82aa11fe0 98 }
bf1891 0:40d82aa11fe0 99
bf1891 0:40d82aa11fe0 100 pc.printf("got nRDY\n\r");
bf1891 0:40d82aa11fe0 101
bf1891 0:40d82aa11fe0 102 uart.putc(str_len);
bf1891 0:40d82aa11fe0 103 for (int i = 0; i < (str_len + 1); i++) {
bf1891 0:40d82aa11fe0 104 uart.putc(str[i]);
bf1891 0:40d82aa11fe0 105 }
bf1891 0:40d82aa11fe0 106 uart.putc(0);
bf1891 0:40d82aa11fe0 107 uart.putc(0);
bf1891 0:40d82aa11fe0 108
bf1891 0:40d82aa11fe0 109 nREQ.input();
bf1891 0:40d82aa11fe0 110 nREQ.mode(PullUp);
bf1891 0:40d82aa11fe0 111
bf1891 0:40d82aa11fe0 112 pc.printf("All done\n\r");
bf1891 0:40d82aa11fe0 113
bf1891 0:40d82aa11fe0 114 while (1) {
bf1891 0:40d82aa11fe0 115 // if (uart.readable()) {
bf1891 0:40d82aa11fe0 116 // pc.printf("%c", uart.getc());
bf1891 0:40d82aa11fe0 117 // }
bf1891 0:40d82aa11fe0 118 }
bf1891 0:40d82aa11fe0 119 }