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

 
 
> AVR Надежная работа UART и прерывания прочей переферии, Код UART из DS (реализован без прерываний) и все равно проблемы
Didro
сообщение Mar 10 2010, 12:30
Сообщение #1


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

Группа: Участник
Сообщений: 94
Регистрация: 9-04-07
Пользователь №: 26 893



Добрый день,

столкнулся с такой непонятной для меня ситуацией.
Есть ATMega32, которая реализует: ШИМ (1 таймер), импульсы переменной длительности (1 таймер), замеры напряжения с двух каналов АЦП и общение с ПК. Общение с ПК по UART. Протокол общения строго синхронный. Запрос с ПК - ответ с МК.

Взял код UART из спецификации на mega32.

Если контроллер не загружен - буквально, если выключить АЦП (предделитель 64), а всю остальную переферию оставить (2 таймера), то UART работает нормально - проходит тестирование в 60 тыс. обменов с ПК.

Только стоит подключить АЦП начинаются проблемы - ПК фиксирует, что контроллер не отвечает ему за отведенное время.
При этом если код функций работы UART заключить в скобки cli-sei, то даже при включенном АЦП, обмен идет хорошо. Если запрещение прерываний убрать, начинаются проблемы.

Код UART навсякий случай:
Код
void usrtSendByte( u08 data )
{
  cli();
    /* Wait for empty transmit buffer */
    while ( !( UCSRA & (1<<UDRE)) )
       _delay_ms(2);
    /* Put data into buffer, sends the data */
    UDR = data;
    sei();
}

u08 usrtReadByte( void )
{
  cli();
    /* Wait for data to be received */
    while ( !(UCSRA & (1<<RXC)) )
        _delay_ms(2);
    /* Get and return received data from buffer */
    u08 temp=UDR;
    sei();
    return temp;
}


На лицо полное не понимание чего-то smile.gif

Прошу помощи.

Спасибо

Сообщение отредактировал rezident - Mar 10 2010, 14:12
Причина редактирования: оформление цитаты исходника.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Didro   AVR Надежная работа UART и прерывания прочей переферии   Mar 10 2010, 12:30
- - aaarrr   Цитата(Didro @ Mar 10 2010, 15:30) Код UA...   Mar 10 2010, 12:47
- - Didro   Цитата(aaarrr @ Mar 10 2010, 15:47) Зачем...   Mar 14 2010, 12:30
- - smac   Цитата(Didro @ Mar 14 2010, 15:30) Написа...   Mar 14 2010, 18:52
- - Didro   Цитата(smac @ Mar 14 2010, 21:52) Компили...   Mar 15 2010, 09:39
- - smac   Цитата(Didro @ Mar 15 2010, 12:39) При ко...   Mar 16 2010, 04:43
- - defunct   Цитата(Didro @ Mar 15 2010, 11:39) Нет па...   Mar 20 2010, 23:46
- - Didro   Цитата(defunct @ Mar 21 2010, 02:46) Веро...   Mar 21 2010, 00:35
- - defunct   Цитата(Didro @ Mar 21 2010, 02:35) Вы не ...   Mar 21 2010, 00:48
- - RodionGork   //! Interrupt handler for tcnt0 overflow inter...   Mar 21 2010, 05:03
- - Didro   Цитата(RodionGork @ Mar 21 2010, 08:03) С...   Mar 21 2010, 06:36
- - RodionGork   Цитата(Didro @ Mar 21 2010, 09:36) Сигнал...   Mar 21 2010, 07:03
- - defunct   Цитата(Didro @ Mar 21 2010, 08:36) Если у...   Mar 22 2010, 01:26
- - RodionGork   Цитата(defunct @ Mar 22 2010, 04:26) Если...   Mar 22 2010, 06:40
- - Didro   Вчера обнаружил неправильно запрограммированный fu...   Mar 22 2010, 08:55
|- - RodionGork   Цитата(Didro @ Mar 22 2010, 11:55) Вчера ...   Mar 23 2010, 05:37
- - defunct   Цитата(RodionGork @ Mar 22 2010, 08:40) Э...   Mar 22 2010, 11:57


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

 


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


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