-
- Не знаю как сейчас, а в 4-й студии флажки вполне ставятся "вручную". По крайней мере - RXC. Если в новых не так, то можно stimuli-файл подсунуть. - Точка опоры(11.09.2013 13:00)
- ЗАЧЕМ?! - Гyдвин(11.09.2013 12:23)
- У AVR существует два прерывания для передачика: TXC и UDRE. Первое вылетает при окончании предыдущей передачи, а второе, когда передачик пуст. TXC очень удобно подачи следующего байта из очереди/буфера. Но вот очередь рассосалась и передавать Ксения(615 знак., 11.09.2013 13:24)
- Мне кажется, вы не совсем верно понимаете принцип организации работы передатчика UART. Передатчик работает Bill(543 знак., 12.09.2013 13:54)
- Прерывание по UDRE не знает, лежит ли в буфере что-то ещё, требующее передачи, или там пусто. А если пусто, то это прерывание само не успокоится, а будет долбить непрерывно, пока предатчик пуст. Стало быть, это прерывание придется отключать Ксения(509 знак., 12.09.2013 14:35)
- Если передача идет одиночными байтами, то тогда да. А если передаются пакеты, то, Bill(210 знак., 12.09.2013 15:23)
- А при передаче первового байта (если прежде буфер был пуст) включаете UDRE? Тогда, у вас вынимание байта из буфера и запись его в приемник дублируется в обоих обработчиках (UDRE и TXC)? Или я неверно поняла принцип? - Ксения(12.09.2013 16:04)
- Ксения, если Вы посылаете одиночные байты с периодом = или больше скорости передачи , то в буфере передатчика байт не задержится никогда - прямяком в сдвиговый регистр. Т.е флаг UDRE стоит практически всегда. Лучше юзать - конец передачи Если Вы ilyaul(296 знак., 12.09.2013 19:48)
- А тогда зачем сделали TXC? Ксения(271 знак., 12.09.2013 20:40)
- Так , флажок TXC появляется , если байт отослан И в буфере передатчика тоже пусто т.е флаг UDRE установлен.Если же флаг UDRE сброшен (в буфере передатчика завалялся байтик) ,то TXC не установится , даже если отослан байт.Где-то у меня была схемка ilyaul(246 знак., 12.09.2013 21:11 - 21:15)
- Если UDRE подвис (не успели в него записать данные за время передачи байта?), то нужно кроме записи в UDR записывать 1 в TXC во время передачи каждого байта. - Apтём(12.09.2013 21:15)
- Txc позволяет узнать что байт передан. Это нужно для 485-го. Или если нужно послать в uart и уйти в глубокий сон по окончании передачи. Apтём(81 знак., 12.09.2013 20:53)
- Так , флажок TXC появляется , если байт отослан И в буфере передатчика тоже пусто т.е флаг UDRE установлен.Если же флаг UDRE сброшен (в буфере передатчика завалялся байтик) ,то TXC не установится , даже если отослан байт.Где-то у меня была схемка ilyaul(246 знак., 12.09.2013 21:11 - 21:15)
- А тогда зачем сделали TXC? Ксения(271 знак., 12.09.2013 20:40)
- В TXC ничего в UDR не пишется, там только направление RS485 переключается. В UDRE ещё нужно TXC сбросить, если вдруг он установился до конца пакета. - Apтём(12.09.2013 16:07)
- У меня, слава Богу, не RS485, а простой UART/RS232. В таком случае, ваш вариант эквивалентен отказу от использования прерывания TXC в пользу UDRE. - Ксения(12.09.2013 16:18)
- Да, если RS485 не нужен, то с TXC делать ничего не надо. - Apтём(12.09.2013 16:22)
- Как вы полагаете. Если разрешить СРАЗУ ОБА прерывания (TXC и UDRE), а TXC пошлёт байт первым, то UDRE следом вызовется или его флаг надо стирать внутри TXC-обработчика, чтобы его подавить его вызов? - Ксения(12.09.2013 16:53)
- Если использовать два прерывания(RS485), то в TXC ничего посылать не надо, там только направление переключается. Для RS232 не нужно два прерывания использовать. Apтём(198 знак., 12.09.2013 17:00)
- + в общем-то прерывание нужно использовать только на приём, чтобы вовремя забирать то, что туда прилетело. При передаче, как правило, это не нужно. Достаточно отслеживать то, что передача ещё не закончена, и затем пихать туда новый байт. Adept(3469 знак., 12.09.2013 17:35 - 18:03)
- Что делать...бросать писать на ассемблере. Apтём(234 знак., 12.09.2013 17:42)
- + в общем-то прерывание нужно использовать только на приём, чтобы вовремя забирать то, что туда прилетело. При передаче, как правило, это не нужно. Достаточно отслеживать то, что передача ещё не закончена, и затем пихать туда новый байт. Adept(3469 знак., 12.09.2013 17:35 - 18:03)
- Если использовать два прерывания(RS485), то в TXC ничего посылать не надо, там только направление переключается. Для RS232 не нужно два прерывания использовать. Apтём(198 знак., 12.09.2013 17:00)
- Как вы полагаете. Если разрешить СРАЗУ ОБА прерывания (TXC и UDRE), а TXC пошлёт байт первым, то UDRE следом вызовется или его флаг надо стирать внутри TXC-обработчика, чтобы его подавить его вызов? - Ксения(12.09.2013 16:53)
- Да, если RS485 не нужен, то с TXC делать ничего не надо. - Apтём(12.09.2013 16:22)
- У меня, слава Богу, не RS485, а простой UART/RS232. В таком случае, ваш вариант эквивалентен отказу от использования прерывания TXC в пользу UDRE. - Ксения(12.09.2013 16:18)
- Ксения, если Вы посылаете одиночные байты с периодом = или больше скорости передачи , то в буфере передатчика байт не задержится никогда - прямяком в сдвиговый регистр. Т.е флаг UDRE стоит практически всегда. Лучше юзать - конец передачи Если Вы ilyaul(296 знак., 12.09.2013 19:48)
- А при передаче первового байта (если прежде буфер был пуст) включаете UDRE? Тогда, у вас вынимание байта из буфера и запись его в приемник дублируется в обоих обработчиках (UDRE и TXC)? Или я неверно поняла принцип? - Ксения(12.09.2013 16:04)
- Я чего-то не понимаю, а в чем проблема включать-выключать прерывание UDRE? Чему это мешает? LightElf(421 знак., 12.09.2013 14:47)
- Если передача идет одиночными байтами, то тогда да. А если передаются пакеты, то, Bill(210 знак., 12.09.2013 15:23)
- Прерывание по UDRE не знает, лежит ли в буфере что-то ещё, требующее передачи, или там пусто. А если пусто, то это прерывание само не успокоится, а будет долбить непрерывно, пока предатчик пуст. Стало быть, это прерывание придется отключать Ксения(509 знак., 12.09.2013 14:35)
- Использую TXC. Первый байт записываю прямо в UDR, остальные - в буфер. - Лeoнид Ивaнoвич(12.09.2013 10:15)
- Тоже по UDRE работаю. На последнем байте переключаюсь на TXC, чтобы ADM485 переключить на прием. - Ale3000(12.09.2013 09:55)
- Всю жизнь использую именно UDRE. Добавляю байт в циклический буфер и разрешаю прерывание UDRE. LightElf(120 знак., 11.09.2013 17:30)
- Мне кажется, вы не совсем верно понимаете принцип организации работы передатчика UART. Передатчик работает Bill(543 знак., 12.09.2013 13:54)
- У AVR существует два прерывания для передачика: TXC и UDRE. Первое вылетает при окончании предыдущей передачи, а второе, когда передачик пуст. TXC очень удобно подачи следующего байта из очереди/буфера. Но вот очередь рассосалась и передавать Ксения(615 знак., 11.09.2013 13:24)