/* * Function : UART_puts * Author : Dirk-Jan Vethaak * Parameters : char * ptr , start pointer of String * Return : none * Description : Transmits a String. No interrupt * * History : * */ void UART_puts( char *ptr ) { while( *ptr ) { UART_putch( *ptr ); ptr++; } }
/* * Function : UART_Send_Packet * Author : Dirk-Jan Vethaak * Parameters : none * Return : none * Description : Function starts transmitting the packet. After that the * first byte is send the interrupt routine TX will * transmit the other bytes. * * History : * */ void UART_Send_Packet() { // Setup SOF and EOF abBuffer_tx[0] = SOF; abBuffer_tx[Packet_lenght - 1] = EOF; // enable interrrupt tx but first load new data! UART_putch( abBuffer_tx[0] ); USARTC0.CTRLA = 0x3C; // enable RX interrupt high priority and TX interrupt high priority bCounter_TX = 0; return; }
/********************************************************************* * Function: void APP_DeviceCDCEmulatorTasks(void); * * Overview: Keeps the demo running. * * PreCondition: The demo should have been initialized and started via * the APP_DeviceCDCEmulatorInitialize() and APP_DeviceCDCEmulatorStart() demos * respectively. * * Input: None * * Output: None * ********************************************************************/ void APP_DeviceCDCEmulatorTasks() { if((USBDeviceState < CONFIGURED_STATE)||(USBSuspendControl==1)) return; if (RS232_Out_Data_Rdy == 0) // only check for new USB buffer if the old RS232 buffer is { // empty. This will cause additional USB packets to be NAK'd LastRS232Out = getsUSBUSART(RS232_Out_Data,64); //until the buffer is free. if(LastRS232Out > 0) { RS232_Out_Data_Rdy = 1; // signal buffer full RS232cp = 0; // Reset the current position } } //Check if one or more bytes are waiting in the physical UART transmit //queue. If so, send it out the UART TX pin. if(RS232_Out_Data_Rdy && mTxRdyUSART()) { #if defined(USB_CDC_SUPPORT_HARDWARE_FLOW_CONTROL) //Make sure the receiving UART device is ready to receive data before //actually sending it. if(UART_CTS == USB_CDC_CTS_ACTIVE_LEVEL) { USART_putcUSART(RS232_Out_Data[RS232cp]); ++RS232cp; if (RS232cp == LastRS232Out) RS232_Out_Data_Rdy = 0; } #else //Hardware flow control not being used. Just send the data. UART_putch(RS232_Out_Data[RS232cp]); ++RS232cp; if (RS232cp == LastRS232Out) RS232_Out_Data_Rdy = 0; #endif } //Check if we received a character over the physical UART, and we need //to buffer it up for eventual transmission to the USB host. if(mDataRdyUSART() && (NextUSBOut < (CDC_DATA_OUT_EP_SIZE - 1))) { USB_Out_Buffer[NextUSBOut] = UART_getch(); ++NextUSBOut; USB_Out_Buffer[NextUSBOut] = 0; } #if defined(USB_CDC_SUPPORT_HARDWARE_FLOW_CONTROL) //Drive RTS pin, to let UART device attached know if it is allowed to //send more data or not. If the receive buffer is almost full, we //deassert RTS. if(NextUSBOut <= (CDC_DATA_OUT_EP_SIZE - 5u)) { UART_RTS = USB_CDC_RTS_ACTIVE_LEVEL; } else { UART_RTS = (USB_CDC_RTS_ACTIVE_LEVEL ^ 1); } #endif //Check if any bytes are waiting in the queue to send to the USB host. //If any bytes are waiting, and the endpoint is available, prepare to //send the USB packet to the host. if((USBUSARTIsTxTrfReady()) && (NextUSBOut > 0)) { putUSBUSART(&USB_Out_Buffer[0], NextUSBOut); NextUSBOut = 0; } CDCTxService(); }