main() { auto int nIn1, nIn2; auto char cOut; brdInit(); //initialize board for this demo serEopen(_232BAUD); serFopen(_232BAUD); serEwrFlush(); serErdFlush(); serFwrFlush(); serFrdFlush(); while (1) { for (cOut='a';cOut<='z';++cOut) { serEputc (cOut); // Send lowercase byte while ((nIn1=serFgetc()) == -1); // Wait for echo serFputc (toupper(nIn1)); // Send the converted upper case byte while ((nIn2=serEgetc()) == -1); // Wait for echo printf ("Serial E sent %c, serial F sent %c, serial E received %c\n", cOut, toupper(nIn1), nIn2); } } }
void main() { auto int received, receive_count; auto int i; auto int txconfig; // Initialize I/O to use PowerCoreFLEX prototyping board brdInit(); serEopen(baud_rate); serFopen(baud_rate); // Serial mode must be done after opening the serial ports serMode(0); // Clear serial data buffers serErdFlush(); serFrdFlush(); serEwrFlush(); serFwrFlush(); printf("Start with the parity option set properly\n"); serEparity(PARAM_OPARITY); serFparity(PARAM_OPARITY); txconfig = PARAM_OPARITY; while (1) { costate { receive_count = 0; // Send data value 0 - 127 for (i = 0; i < 128; i++) { yield; // Yield so data can be read from serial port C serEputc(i); } // Wait for data buffer, internal data and shift registers to become empty waitfor(serEwrFree() == EOUTBUFSIZE); waitfor(!((RdPortI(SESR)&0x08) || (RdPortI(SESR)&0x04))); // Wait for entire 128 bytes to be processed waitfor(receive_count == 128); // Toggle between parity options if (txconfig) { txconfig = PARAM_NOPARITY; printf("\n\nInproperly set parity option\n"); } else { txconfig = PARAM_OPARITY; printf("\n\nProperly set parity option\n"); } serEparity(txconfig); } costate { // Receive characters in a leisurely fashion if((received = serFgetc()) != -1) { receive_count++; printf("received 0x%x\n", received); if (serFgetError() & SER_PARITY_ERROR) { printf("PARITY ERROR\n"); } } } } }
main() { static char buf_sw2[64], buf_sw3[64]; // buffers used for serial data auto int i, j, ch, rc, timer2, timer3; auto int sw2, sw3; // Configure serial ports D and F as described in comments above serDFconfig(); // Ensure serial ports D, F read / write buffers are empty at this point serDrdFlush(); serDwrFlush(); serFrdFlush(); serFwrFlush(); // Initialize switch flags to false value sw2 = sw3 = OFF; // Clear our local data buffers memset(buf_sw2, 0x00, sizeof(buf_sw2)); memset(buf_sw3, 0x00, sizeof(buf_sw3)); printf("Sample program is running:\n"); printf("Waiting for prototyping board S2 or S3 switch click.\n\n"); //--------------------------------------------------------------------- // Do continuous loop echoing data via serial ports D and F //--------------------------------------------------------------------- while(1) { costate { if (BitRdPortI(S2_PORT, S2_BIT)) //wait for switch press abort; waitfor(DelayMs(50)); if (BitRdPortI(S2_PORT, S2_BIT)) { //wait for switch release sw2 = !sw2; abort; } } costate { if (BitRdPortI(S3_PORT, S3_BIT)) //wait for switch press abort; waitfor(DelayMs(50)); if (BitRdPortI(S3_PORT, S3_BIT)) { //wait for switch release sw3 = !sw3; abort; } } costate { if (sw2) { sw2 = !sw2; // The switch is attached to the serial port, so we need to read // the characters it sends serFrdFlush(); // Transmit an ASCII string over serial port D memcpy(buf_sw2, string1, strlen(string1)); serDputs(buf_sw2); memset(buf_sw2, 0x00, sizeof(buf_sw2)); // Get the data string that was transmitted via serial port D i = 0; timer2 = TIME_OUT; while (timer2 > 0) { ch = serFgetc(); // Preventing buffer overrun, copy only valid RCV'd characters // to the buffer if (ch == -1) { waitfor(DelayMs(1)); --timer2; // just in case we've timed out, force an end of line CR ch = '\r'; } else if (ch == '\r') { timer2 = 0; // end of line CR character, force an exit! } else { if (i < sizeof(buf_sw2) - 3) { buf_sw2[i++] = ch; } } } buf_sw2[i++] = ch; //copy '\r' to the data buffer buf_sw2[i] = '\0'; //terminate the ascii string // Display ASCII string received from serial port D echo to F printf("%s", buf_sw2); // Clear buffer memset(buf_sw2, 0x00, sizeof(buf_sw2)); } } costate { if (sw3) { sw3 = !sw3; // The switch is attached to the serial port, so we need to read // the characters it sends serDrdFlush(); // Transmit an ASCII string over serial port F memcpy(buf_sw3, string2, strlen(string2)); serFputs(buf_sw3); memset(buf_sw3, 0x00, sizeof(buf_sw3)); // Get the data string that was transmitted via serial port F j = 0; timer3 = TIME_OUT; while (timer3 > 0) { ch = serDgetc(); // Preventing buffer overrun, copy only valid RCV'd characters // to the buffer if (ch == -1) { waitfor(DelayMs(1)); --timer3; // just in case we've timed out, force an end of line CR ch = '\r'; } else if (ch == '\r') { timer3 = 0; // end of line CR character, force an exit! } else { if (j < sizeof(buf_sw3) - 3) { buf_sw3[j++] = ch; } } } buf_sw3[j++] = ch; //copy '\r' to the data buffer buf_sw3[j] = '\0'; //terminate the ascii string // Display ASCII string received from serial port F echo to D printf("%s", buf_sw3); // Clear buffer memset(buf_sw3, 0x00, sizeof(buf_sw3)); } //endif } //endcostate } //endwhile }