ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
20 мая
41456
Xanoy (13.10.2005 19:54, просмотров: 9424)
Возникла проблема с перестройкой скорости UART на лету. Програмлю под MSP430F435. Задача такая: сначала нужно выдать один байт по UART с одной скоростью, после отправки байта, нужно перестроить скорость передачи и выдать n байт с другой скоростью, после передачи n байт, нужно опять перестроить передатчик на первую скорость и выдать один байт, затем перестройка на вторую скрость и все повторяется пока батарейки не сядут. Перестройку скоростей делаю в прерывании:
 // Обработка прерывания от UART передатчика
#pragma vector = USART0TX_VECTOR
__interrupt void UART_tx (void)
{
    switch ( tx.count)
        {
        case 0:
         U0BR0  = (u08)N_UBR_Break;         
         U0BR1  = (u08)(N_UBR_Break>>8);
         U0TXBUF = 0;                       
         ++tx.count;
         break;
        case 1:
         U0BR0  = (u08)N_UBR;                  
         U0BR1  = (u08)(N_UBR>>8);
         U0TXBUF = tx.buffer[tx.count-1];  
         ++tx.count;
         break;
        case UART_TX_BUFFER_SIZE:
         U0TXBUF = tx.buffer[tx.count-1];
         tx.count = 0;
         break;
        default:
         U0TXBUF = tx.buffer[tx.count-1];
         ++tx.count;
         break;
        }
}
И вот собственно проблема: Он скорость перестраивает, вроде бы, но на выходе осцилографом наблюдаешь совсем не то. Может кто сталкивался с подобной задачей, или с проблемой. И можно ли вообще в прерывании по UART изменять скорость передачи? Заранее спасибо.