2008-11-05 01:02 PM
UART TX finished interrupt needed
2011-05-17 12:45 AM
Hi! Try to use this:
while(UART_GetFlagStatus(UART0, UART_FLAG_Busy)); & RTFM!!! BUSY: UART Busy If this bit is set to 1, the UART is busy transmitting data. This bit remains set until the complete byte, including all the stop bits, has been sent from the shift register. This bit is set as soon as the transmit FIFO becomes non-empty (regardless of whether the UART is enabled or not). UM0216 page 2642011-05-17 12:45 AM
I use uart interrupt and uart hardware fifo based transmitting and
receiving on the ST912FW44. How can I get the information (an interrupt), if the uart transmit (hw fifo used) finished, after the the last byte is sended on the port pin output including the stop bit(s) ?2011-05-17 12:45 AM
Hi Andy,
I can't use busy waiting, I need to control how fast as possible after (and before) trinsmitting a RX485 tx-enable pin in the interrupt handler. Other controllers like atmel avr have an tx emtpy or tx finished interrupt flag. The busy flag can only polled outside the interrupt function in the application.2011-05-17 12:45 AM
Quote:
The busy flag can only polled outside the interrupt function in the application. OK. In this case you should use buffer FIFO and fill data in it in process of a transmitting on interruption. The basic program will be carried out further. if(UART_GetITStatus(UART0, UART_IT_Transmit) != RESET) { for(i = 0; (i < 8) && (TxCounter < NbrOfDataToTransfer); i++) { UART_SendData(UART0, TxBuffer[TxCounter++]); } if(TxCounter != NbrOfDataToTransfer) { /* Clear the UART0 transmit interrupt */ UART_ClearITPendingBit(UART0, UART_IT_Transmit); } else { /* Disable the UART Transmit interrupt */ UART_ITConfig(UART0, UART_IT_Transmit, DISABLE); } }2011-05-17 12:45 AM
I think you don't understand my question in
case of transmitting data with a RS485 communication. 1.) before you send any data from the uart you have to switch on the tx enable line of the RS485 transceiver 2.) send out the data from the uart (hardware fifo, software fifo) interrupt controlled 3.) switch off the tx enable line of the RS485 transceiver immediately after the last stop bit from the last byte of the transmitting frame ist sendet out from the uart this all should be done in the uart ty interrupt handler, the application only fills the software fifo and starts the transmit interrupt2011-05-17 12:45 AM
Barricade wroute:
Quote:
1.) before you send any data from the uart you have to switch on the tx enable line of the RS485 transceiver ... 3.) switch off the tx enable line of the RS485 transceiver immediately after the last stop bit from the last byte of the transmitting frame ist sendet out from the uart this all should be done in the uart ty interrupt handler, the application only fills the software fifo and starts the transmit interrupt All above could not be done inside UART tx interrupt handler! At least you shoud switch on the tx enable line outside interrupt handler. About p.3. I can not anderstand what for you want ''switch off the tx enable line ... immediately after the last stop bit from the last byte of the transmitting frame is sended out from the uart''? It is not nessasary. You may switch it off after you stop sending bytes into FIFO, even bytes steel staing in UART FIFO. Any way the bytes steel staing in FIFO will be sent out UART FIFO after that.2011-05-17 12:45 AM
read this for understanding RS485 communication
http://www.netrino.com/Articles/RS485Enable/index.php2011-05-17 12:45 AM
You could use a timer interrupt to poll the status. Not nice, but the UART macrocell does not appear to have any support beyond the status bit.
2011-05-17 12:45 AM
Barricade: did you find a solution to your problem?
Or has anyone else found how to detect end of transmission without polling? Cheers, Paul :)