Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void USART_fsend(char* format, ...) {
- char tmp_rs[128];
- int i;
- __IO int idx;
- va_list arglist;
- va_start(arglist, format);
- vsprintf(tmp_rs, format, arglist);
- va_end(arglist);
- idx = USART_TX_Empty;
- for (i = 0; i < strlen(tmp_rs); i++) {
- USART_TxBuf[idx] - tmp_rs[i];
- idx++;
- if(idx >= USART_TxBuf_LEN) idx = 0;
- }
- __disable_irq();
- if ((USART_TX_Empty == USART_TX_Busy) && (flag == 0)) {
- /*
- * Sprawdzenie czy nadawanie wciąż trwa - jeżeli transmisja trwa to powyższa linijka jest niespełniona.
- * Flaga jest konieczna - patrz: próba wysłania jednego znaku, tzn.:
- * po wysłaniu jednego znaku wskaźniki 'EMPTY' i 'BUSY' są takie same i warunek byłby spełniony.
- * Jeżeli flaga == 0 -> przerwania są wyłączone i trzeba przejśc przez ciało 'ifa'.
- * Jeżeli flaga == 1 -> ciało 'ifa' jest pomijane i przechodzę od razu do 'else'.
- */
- USART_TX_Empty = idx;
- uint8_t tmp = USART_TxBuf[USART_TX_Busy]; // Wrzucenie znaku do kolejki.
- USART_TX_Busy++;
- if(USART_TX_Busy >= USART_TxBuf_LEN) USART_TX_Busy = 0;
- /*
- * Oprócz przesłania znaku zostanie również włączone przerwanie od nadawania.
- * Po zakończeniu transmisji wywoływany jest 'callback'.
- */
- HAL_UART_Transmit_IT(&huart2, &tmp, 1);
- flag = 1; // Ustawienie flagi oznacza, że transmisja się rozpoczęła.
- } else {
- USART_TX_Empty = idx;
- }
- __enable_irq(); // Ponownie włącza przerwania.
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement