EmbeddedArtists AB
/
lpc812_exp_solution_uart
Solutions for the UART experiments for LPC812 MAX
main.cpp
- Committer:
- embeddedartists
- Date:
- 2013-11-22
- Revision:
- 0:0ad38420d207
File content as of revision 0:0ad38420d207:
#include "mbed.h" Serial pc(USBTX, USBRX); // tx, rx DigitalIn button(D0); Timer timer; static void experiment1() { unsigned int variableToHoldValue; //declare a 32-bit variable unsigned char *pBytePointer; //declare a byte-pointer pc.printf("\nThis is a first test...\n"); pc.printf("that printf() works - and it does!"); //store value in 32-bit variable variableToHoldValue = 0x0AC0FFEE; //set the byte-pointer to the beginning (first byte) of the 32-bit variable pBytePointer = (unsigned char *)&variableToHoldValue; //Test if big-endian if ((*pBytePointer == 0x0A) && (*(pBytePointer+1) == 0xC0) && (*(pBytePointer+2) == 0xFF) && (*(pBytePointer+3) == 0xEE)) { pc.printf("\nThe CPU is a Big-endian system\n"); } //Test if little-endian instead else if ((*pBytePointer == 0xEE) && (*(pBytePointer+1) == 0xFF) && (*(pBytePointer+2) == 0xC0) && (*(pBytePointer+3) == 0x0A)) { pc.printf("\nThe CPU is a Little-endian system\n"); } //Neither if the tests was correct – something is VERY wrong here!!! else { pc.printf("\nSomething is VERY wrong here!!!\n"); } while(1) ; } static void experiment2() { // Enable button button.mode(PullUp); // Enter forever loop while(1) { // Wait for button to be pressed and then released while(button) { } pc.printf("Button was pressed...\n"); while(!button) { } pc.printf("and released\n"); } } static void experiment3_alt1() { pc.printf("This is a test of getc()...\n"); // Enter forever loop while(1) { int rxChar = pc.getc(); pc.printf("Got %c\n", rxChar); } } static void experiment3_alt2() { int val = 0; int numChars = 0; pc.printf("This is a test of getc() and converts to a number...\n"); // Enter forever loop while(1) { int rxChar = pc.getc(); numChars++; if ((rxChar == '\r') || (rxChar == '\n') || (rxChar == ' ')) { // Found a separator character, print number and start over if (numChars > 1) { pc.printf("Found %d\n", val); } numChars = 0; val = 0; } else if ((rxChar < '0') || (rxChar > '9')) { // Not a number, reset and start looking again pc.printf("Not a number: '%c'\n", rxChar); numChars = 0; val = 0; } else { // A valid number was found val = (val * 10) + (rxChar - '0'); if (numChars == 9) { // Almost reached maximum size, print and continue pc.printf("Found %d\n", val); numChars = 0; val = 0; } } } } static void experiment4() { #define BYTES_IN_BUFF 512 #define NUM_BUFFS_TO_SEND 10 // Change baudrate here to see what difference it makes. Don't forget // to change to the same value on the Host PC //pc.baud(115200); pc.printf("This is a performance test...\n"); char buff[BYTES_IN_BUFF + 1]; // initialize the buffer with some characters to print for (int i = 0; i < BYTES_IN_BUFF; i+=10) { for (int c = 0; c < 10; c++) { buff[i+c] = '0' + c; } } // puts expects the string to be null terminated buff[BYTES_IN_BUFF] = '\0'; timer.start(); int begin = timer.read_ms(); for (int num = 0; num < NUM_BUFFS_TO_SEND; num++) { pc.puts(buff); } int end = timer.read_ms(); timer.stop(); // print information about how much time passed and the bitrate printf("\n--- Sent %d bytes in %dms\n", BYTES_IN_BUFF * NUM_BUFFS_TO_SEND, end-begin); while(1) ; } int main() { //experiment1(); // Detects endian //experiment2(); // Button //experiment3_alt1(); // getc //experiment3_alt2(); // getc with digits experiment4(); // performance }