реклама на сайте
подробности

 
 
> Прерывание Tx на pic32
ZEbr
сообщение Feb 6 2016, 06:13
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 145
Регистрация: 2-12-10
Из: Воронеж
Пользователь №: 61 356



Подскажите пожалуйста!!!! Настраиваю uart по типовому примеру с сайта microchip . запускаю программу первый прием и передача проходят нормально.а вот во время второй посылки зачемто при приеме программа заходит в прерывание по передаче. Флаги очищаю, в прерываний. Прерывания rx и tx различаются по флагами.
Заранее спасибо!!!!

Сообщение отредактировал ZEbr - Feb 6 2016, 06:14
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
volodya
сообщение Feb 8 2016, 06:25
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 194
Регистрация: 14-02-07
Из: УКРАИНА
Пользователь №: 25 344



Цитата(ZEbr @ Feb 6 2016, 08:13) *
Подскажите пожалуйста!!!! Настраиваю uart по типовому примеру с сайта microchip . запускаю программу первый прием и передача проходят нормально.а вот во время второй посылки зачемто при приеме программа заходит в прерывание по передаче. Флаги очищаю, в прерываний. Прерывания rx и tx различаются по флагами.
Заранее спасибо!!!!


Для полноценного ответа желательно фрагменты кода видеть.
По памяти - прерывание передатчика генерируется при готовности буфера передачи.
При передаче последнего запрещают прерывание передачи, в обработчике UART
(общем для приема и передачи) проверяются флаг прерывания и разрешение прерывания.

Код
void RxControl(void)
{
    UINT8 tmp;
     if(INTGetEnable(INT_UxRX))
    {
        if(INTGetFlag(INT_UxRX))
        {
            while(UxSTAbits.URXDA)
            {
                tmp = UxRXREG;
                        /*   обработка принятого     */
            }
            INTClearFlag(INT_UxRX);
        }
    }
}

void TxControl(void)
{
    if(INTGetEnable(INT_UxTX))
    {
        if(INTGetFlag(INT_UxTX))
        {
            while( !( UxSTAbits.UTXBF ) )
            {
                
                UxTXREG = /*источник*/;
                if(/*конец посылки*/)
                {
                    mDisableUxTX_INT();
                    break;
                }
            }
            INTClearFlag(INT_UxTX);
        }
    }
}
/*-----------------------------------------------------------*/

void vUxInterruptHandler( void )
{
    TxControl();
    RxControl();
}


Из рабочего кода.


--------------------
"Для того чтобы избежать критики, надо ничего не делать, ничего не говорить и никем не быть"
"Каждый из нас бывает дураком по крайней мере пять минут в день; мудрость заключается в том, чтобы не превысить лимит." Элберт Хаббард
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 5th August 2025 - 19:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.01392 секунд с 7
ELECTRONIX ©2004-2016