/* ** =================================================================== ** Method : CsIO1_fputc (component ConsoleIO) ** ** Description : ** fputc ** This method is internal. It is used by Processor Expert only. ** =================================================================== */ int fputc(int ch, FILE *f) { if ((uint8_t)ch == '\n') { /* Wait until UART is ready to write a next character into output buffer */ while ((UART0_PDD_ReadInterruptStatusReg(UART0_BASE_PTR) & UART0_S1_TDRE_MASK) == 0) {}; /* Save a character into the transmit buffer of the UART device */ UART0_PDD_PutChar8(UART0_BASE_PTR, '\r'); } /* Save a character into the transmit buffer of the UART device */ while ((UART0_PDD_ReadInterruptStatusReg(UART0_BASE_PTR) & UART0_S1_TDRE_MASK) == 0) {}; /* Wait until UART is ready for saving a next character into the transmit buffer */ UART0_PDD_PutChar8(UART0_BASE_PTR, (uint8_t)ch); return ch; }
/* ** =================================================================== ** Method : InterruptTx (component Serial_LDD) ** ** Description : ** The method services the receive interrupt of the selected ** peripheral(s) and eventually invokes the bean's event(s). ** This method is internal. It is used by Processor Expert only. ** =================================================================== */ static void InterruptTx(IO1_TDeviceDataPtr DeviceDataPrv) { if (DeviceDataPrv->OutSentDataNum < DeviceDataPrv->OutDataNumReq) { /* Is number of sent characters less than the number of requested incoming characters? */ UART0_PDD_PutChar8(UART0_BASE_PTR, *(DeviceDataPrv->OutDataPtr++)); /* Put a 8-bit character to the transmit register */ DeviceDataPrv->OutSentDataNum++; /* Increment the counter of sent characters. */ if (DeviceDataPrv->OutSentDataNum == DeviceDataPrv->OutDataNumReq) { DeviceDataPrv->OutDataNumReq = 0x00U; /* Clear the counter of characters to be send by SendBlock() */ } } else { DeviceDataPrv->SerFlag &= (uint16_t)(~(uint16_t)ENABLED_TX_INT); /* Clear the flag ENABLED_TX_INT */ } }
/* ** =================================================================== ** Method : CsIO1__write (component ConsoleIO) ** ** Description : ** _write ** This method is internal. It is used by Processor Expert only. ** =================================================================== */ int _write (int fd, const void *buf, size_t count) { size_t CharCnt = 0x00; (void)fd; /* Parameter is not used, suppress unused argument warning */ for (;count > 0x00; --count) { /* Wait until UART is ready for saving a next character into the transmit buffer */ while ((UART0_PDD_ReadInterruptStatusReg(UART0_BASE_PTR) & UART0_S1_TDRE_MASK) == 0) {}; if (*(uint8_t*)buf == '\n') { /* Send '\r'(0x0D) before each '\n'(0x0A). */ /* Save a character into the transmit buffer of the UART0 device */ UART0_PDD_PutChar8(UART0_BASE_PTR, 0x0DU); /* Wait until UART is ready for saving a next character into the transmit buffer */ while ((UART0_PDD_ReadInterruptStatusReg(UART0_BASE_PTR) & UART0_S1_TDRE_MASK) == 0) {}; } /* Save a character into the transmit buffer of the UART0 device */ UART0_PDD_PutChar8(UART0_BASE_PTR, (unsigned char)*(uint8_t*)buf); (uint8_t*)buf++; /* Increase buffer pointer */ CharCnt++; /* Increase char counter */ } return count; }
/* ** =================================================================== ** Method : CsIO1___write_console (component ConsoleIO) ** ** Description : ** __write_console ** This method is internal. It is used by Processor Expert only. ** =================================================================== */ int __write_console(__file_handle handle, unsigned char* buffer, size_t* count) { size_t CharCnt = 0x00; (void)handle; /* Parameter is not used, suppress unused argument warning */ for (;*count > 0x00; --*count) { /* Wait until UART is ready for saving a next character into the transmit buffer */ while ((UART0_PDD_ReadInterruptStatusReg(UART0_BASE_PTR) & UART0_S1_TDRE_MASK) == 0) {}; if (*buffer == '\n') { /* Send '\r'(0x0D) before each '\n'(0x0A). */ /* Save a character into the transmit buffer of the UART0 device */ UART0_PDD_PutChar8(UART0_BASE_PTR, 0x0DU); /* Wait until UART is ready for saving a next character into the transmit buffer */ while ((UART0_PDD_ReadInterruptStatusReg(UART0_BASE_PTR) & UART0_S1_TDRE_MASK) == 0) {}; } /* Save a character into the transmit buffer of the UART0 device */ UART0_PDD_PutChar8(UART0_BASE_PTR, (unsigned char)*buffer); buffer++; /* Increase buffer pointer */ CharCnt++; /* Increase char counter */ } *count = CharCnt; return(__no_io_error); }
/* ** =================================================================== ** Method : InterruptTx (component Serial_LDD) ** ** Description : ** The method services the receive interrupt of the selected ** peripheral(s) and eventually invokes the bean's event(s). ** This method is internal. It is used by Processor Expert only. ** =================================================================== */ static void InterruptTx(ASerialLdd2_TDeviceDataPtr DeviceDataPrv) { if (DeviceDataPrv->OutSentDataNum < DeviceDataPrv->OutDataNumReq) { /* Is number of sent characters less than the number of requested incoming characters? */ UART0_PDD_PutChar8(UART0_BASE_PTR, *(DeviceDataPrv->OutDataPtr++)); /* Put a 8-bit character to the transmit register */ DeviceDataPrv->OutSentDataNum++; /* Increment the counter of sent characters. */ if (DeviceDataPrv->OutSentDataNum == DeviceDataPrv->OutDataNumReq) { DeviceDataPrv->OutDataNumReq = 0x00U; /* Clear the counter of characters to be send by SendBlock() */ ASerialLdd2_OnBlockSent(DeviceDataPrv->UserDataPtr); } } else { UART0_PDD_DisableInterrupt(UART0_BASE_PTR, UART0_PDD_INTERRUPT_TRANSMITTER); /* Disable TX interrupt */ DeviceDataPrv->SerFlag &= (uint16_t)(~(uint16_t)ENABLED_TX_INT); /* Clear the flag ENABLED_TX_INT */ } }