Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/clunet.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey V. DUDANOV <sergey.dudanov@gmail.com>2016-07-08 11:15:30 +0300
committerGitHub <noreply@github.com>2016-07-08 11:15:30 +0300
commitacfb9ea5373bb5fa7970b4921d87c47fb24ec978 (patch)
tree5487e9f4964c17c05c14b98cecd906f977beae08
parente4108b123c3281681e47e364052c3ac1289d4f76 (diff)
Update clunet.c
-rw-r--r--clunet.c21
1 files changed, 9 insertions, 12 deletions
diff --git a/clunet.c b/clunet.c
index 8e3dc25..8576277 100644
--- a/clunet.c
+++ b/clunet.c
@@ -113,24 +113,21 @@ ISR(CLUNET_TIMER_COMP_VECTOR)
clunetSendingState = CLUNET_SENDING_STATE_IDLE; // Указываем, что передатчик свободен
CLUNET_SEND_0; // Отпускаем линию
}
- /* Иначе если передача активна */
+ /* Иначе если передачу необходимо продолжить, то сначала проверим на конфликт */
+ else if (!CLUNET_SENDING && CLUNET_READING)
+ {
+ CLUNET_DISABLE_TIMER_COMP; // Выключаем прерывание сравнения таймера (передачу)
+ clunetSendingState = CLUNET_SENDING_STATE_WAITING_LINE; // Переходим в режим ожидания линии
+ }
+ /* Все в порядке, можем продолжать */
else
{
- // Арбитраж. Если мы линию не держим, но она уже занята.
- if (!CLUNET_SENDING && CLUNET_READING)
- {
- CLUNET_DISABLE_TIMER_COMP; // Выключаем прерывание сравнения таймера (передачу)
- clunetSendingState = CLUNET_SENDING_STATE_WAITING_LINE; // Переходим в режим ожидания линии
- break;
- }
-
CLUNET_SEND_INVERT; // Инвертируем значение сигнала
/* Если отпустили линию */
if (!CLUNET_SENDING)
-
CLUNET_TIMER_REG_OCR = now + CLUNET_T; // то запланируем время паузы перед следующей передачей длительностью 1Т
-
+
/* Если прижали линию к земле, то запланируем время передачи сигнала в зависимости от текущей фазы передачи */
else
switch (clunetSendingState)
@@ -155,7 +152,7 @@ ISR(CLUNET_TIMER_COMP_VECTOR)
/* Фаза инициализации передачи пакета (время 10Т) */
case CLUNET_SENDING_STATE_INIT:
-
+
CLUNET_TIMER_REG_OCR = now + CLUNET_INIT_T; // Планируем следующее прерывание
clunetSendingState++; // К следующей фазе передачи старшего бита приоритета
break;