From 0d212a5118c3c59a65d90d4498a48bd544b21912 Mon Sep 17 00:00:00 2001 From: "Sergey V. DUDANOV" Date: Fri, 8 Jul 2016 21:15:19 +0400 Subject: Update clunet.c MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Некоторые незначительные изменения. --- clunet.c | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/clunet.c b/clunet.c index 3d03e35..50ff27f 100644 --- a/clunet.c +++ b/clunet.c @@ -104,8 +104,6 @@ clunet_data_received(const uint8_t src_address, const uint8_t dst_address, const /* Процедура прерывания сравнения таймера */ ISR(CLUNET_TIMER_COMP_VECTOR) { - uint8_t now = CLUNET_TIMER_REG; // Запоминаем текущее значение таймера - /* Если достигли фазы завершения передачи, то завершим ее и освободим передатчик */ if (clunetSendingState == CLUNET_SENDING_STATE_DONE) { @@ -124,9 +122,9 @@ ISR(CLUNET_TIMER_COMP_VECTOR) { CLUNET_SEND_INVERT; // Инвертируем значение сигнала - /* Если отпустили линию */ + /* Если отпустили линию, то запланируем время паузы перед следующей передачей длительностью 1Т */ if (!CLUNET_SENDING) - CLUNET_TIMER_REG_OCR = now + CLUNET_T; // то запланируем время паузы перед следующей передачей длительностью 1Т + CLUNET_TIMER_REG_OCR += CLUNET_T; /* Если прижали линию к земле, то запланируем время передачи сигнала в зависимости от текущей фазы передачи */ else @@ -136,39 +134,39 @@ ISR(CLUNET_TIMER_COMP_VECTOR) case CLUNET_SENDING_STATE_DATA: // Планируем следующее прерывание чтобы отпустить линию в зависимости от значения бита - CLUNET_TIMER_REG_OCR = now + ((dataToSend[clunetSendingCurrentByte] & (1 << clunetSendingCurrentBit)) ? CLUNET_1_T : CLUNET_0_T); + CLUNET_TIMER_REG_OCR += ((dataToSend[clunetSendingCurrentByte] & (1 << clunetSendingCurrentBit)) ? CLUNET_1_T : CLUNET_0_T); /* Если передан байт данных */ if (++clunetSendingCurrentBit & 8) { - /* и не все данные отосланы */ + /* Если не все данные отосланы */ if (++clunetSendingCurrentByte < clunetSendingDataLength) - clunetSendingCurrentBit = 0; // то начинаем передачу следующего байта с бита 0 - /* и передача всех данных закончена */ + clunetSendingCurrentBit = 0; // начинаем передачу следующего байта с бита 0 + /* Иначе передача всех данных закончена */ else - clunetSendingState++; // то переходим к следующей фазе завершения передачи пакета + clunetSendingState++; // переходим к следующей фазе завершения передачи пакета } break; /* Фаза инициализации передачи пакета (время 10Т) */ case CLUNET_SENDING_STATE_INIT: - CLUNET_TIMER_REG_OCR = now + CLUNET_INIT_T; // Планируем следующее прерывание - clunetSendingState++; // К следующей фазе передачи старшего бита приоритета + CLUNET_TIMER_REG_OCR += CLUNET_INIT_T; // Планируем следующее прерывание + clunetSendingState++; // К следующей фазе передачи старшего бита приоритета break; /* Фаза передачи приоритета (старший бит) */ case CLUNET_SENDING_STATE_PRIO1: - CLUNET_TIMER_REG_OCR = now + ((clunetCurrentPrio > 2) ? CLUNET_1_T : CLUNET_0_T); + CLUNET_TIMER_REG_OCR += ((clunetCurrentPrio > 2) ? CLUNET_1_T : CLUNET_0_T); clunetSendingState++; // К следующей фазе передачи младшего бита приоритета break; /* Фаза передачи приоритета (младший бит) */ case CLUNET_SENDING_STATE_PRIO2: - CLUNET_TIMER_REG_OCR = now + ((clunetCurrentPrio & 1) ? CLUNET_0_T : CLUNET_1_T); - clunetSendingCurrentByte = clunetSendingCurrentBit = 0; // Обнуляем счётчик + CLUNET_TIMER_REG_OCR += ((clunetCurrentPrio & 1) ? CLUNET_0_T : CLUNET_1_T); + clunetSendingCurrentByte = clunetSendingCurrentBit = 0; // Готовим счётчики передачи данных clunetSendingState++; // К следующей фазе передачи данных } } @@ -314,7 +312,7 @@ clunet_init() CLUNET_SEND_INIT; CLUNET_READ_INIT; CLUNET_TIMER_INIT; - CLUNET_INIT_INT; + CLUNET_INT_INIT; char reset_source = MCUCSR; clunet_send ( CLUNET_BROADCAST_ADDRESS, @@ -326,9 +324,7 @@ clunet_init() MCUCSR = 0; } -/* - Возвращает 0, если готов к передаче, иначе приоритет текущей задачи -*/ +/* Возвращает 0, если готов к передаче, иначе приоритет текущей задачи */ uint8_t clunet_ready_to_send() { -- cgit v1.2.3 From b4ba7fa13aacebcd9aa5a248f0744e71f66dda8a Mon Sep 17 00:00:00 2001 From: "Sergey V. DUDANOV" Date: Fri, 8 Jul 2016 21:31:22 +0400 Subject: Update clunet.c MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Некоторые изменения. --- clunet.c | 48 +++++++++++++++++++----------------------------- 1 file changed, 19 insertions(+), 29 deletions(-) diff --git a/clunet.c b/clunet.c index 50ff27f..fabda96 100644 --- a/clunet.c +++ b/clunet.c @@ -127,47 +127,37 @@ ISR(CLUNET_TIMER_COMP_VECTOR) CLUNET_TIMER_REG_OCR += CLUNET_T; /* Если прижали линию к земле, то запланируем время передачи сигнала в зависимости от текущей фазы передачи */ + /* Фаза передачи данных */ + else if (clunetSendingState == CLUNET_SENDING_STATE_DATA) + { + /* Планируем следующее прерывание в зависимости от значения бита */ + CLUNET_TIMER_REG_OCR += ((dataToSend[clunetSendingCurrentByte] & (1 << clunetSendingCurrentBit)) ? CLUNET_1_T : CLUNET_0_T); + /* Если передан байт данных */ + if (++clunetSendingCurrentBit & 8) + { + /* Если не все данные отосланы */ + if (++clunetSendingCurrentByte < clunetSendingDataLength) + clunetSendingCurrentBit = 0; // начинаем передачу следующего байта с бита 0 + /* Иначе передача всех данных закончена */ + else + clunetSendingState++; // переходим к следующей фазе завершения передачи пакета + } + } else - switch (clunetSendingState) + switch (clunetSendingState++) { - /* Фаза передачи данных */ - case CLUNET_SENDING_STATE_DATA: - - // Планируем следующее прерывание чтобы отпустить линию в зависимости от значения бита - CLUNET_TIMER_REG_OCR += ((dataToSend[clunetSendingCurrentByte] & (1 << clunetSendingCurrentBit)) ? CLUNET_1_T : CLUNET_0_T); - - /* Если передан байт данных */ - if (++clunetSendingCurrentBit & 8) - { - /* Если не все данные отосланы */ - if (++clunetSendingCurrentByte < clunetSendingDataLength) - clunetSendingCurrentBit = 0; // начинаем передачу следующего байта с бита 0 - /* Иначе передача всех данных закончена */ - else - clunetSendingState++; // переходим к следующей фазе завершения передачи пакета - } - break; - /* Фаза инициализации передачи пакета (время 10Т) */ case CLUNET_SENDING_STATE_INIT: - - CLUNET_TIMER_REG_OCR += CLUNET_INIT_T; // Планируем следующее прерывание - clunetSendingState++; // К следующей фазе передачи старшего бита приоритета + CLUNET_TIMER_REG_OCR += CLUNET_INIT_T; break; - /* Фаза передачи приоритета (старший бит) */ case CLUNET_SENDING_STATE_PRIO1: - CLUNET_TIMER_REG_OCR += ((clunetCurrentPrio > 2) ? CLUNET_1_T : CLUNET_0_T); - clunetSendingState++; // К следующей фазе передачи младшего бита приоритета break; - /* Фаза передачи приоритета (младший бит) */ case CLUNET_SENDING_STATE_PRIO2: - CLUNET_TIMER_REG_OCR += ((clunetCurrentPrio & 1) ? CLUNET_0_T : CLUNET_1_T); - clunetSendingCurrentByte = clunetSendingCurrentBit = 0; // Готовим счётчики передачи данных - clunetSendingState++; // К следующей фазе передачи данных + clunetSendingCurrentByte = clunetSendingCurrentBit = 0; // Готовим счётчики передачи данных } } } -- cgit v1.2.3 From 68b5d7dcf6914495e37547bf44ba0b6328a89f0c Mon Sep 17 00:00:00 2001 From: "Sergey V. DUDANOV" Date: Fri, 8 Jul 2016 21:38:18 +0400 Subject: Update clunet.c --- clunet.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clunet.c b/clunet.c index fabda96..866fe40 100644 --- a/clunet.c +++ b/clunet.c @@ -302,7 +302,7 @@ clunet_init() CLUNET_SEND_INIT; CLUNET_READ_INIT; CLUNET_TIMER_INIT; - CLUNET_INT_INIT; + CLUNET_INIT_INT; char reset_source = MCUCSR; clunet_send ( CLUNET_BROADCAST_ADDRESS, -- cgit v1.2.3 From 7a3dc525f00eb0958b193d4e702d594b142975be Mon Sep 17 00:00:00 2001 From: "Sergey V. DUDANOV" Date: Sat, 9 Jul 2016 11:44:26 +0400 Subject: Update clunet.h --- clunet.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clunet.h b/clunet.h index 38b4e6c..5328b12 100644 --- a/clunet.h +++ b/clunet.h @@ -18,7 +18,7 @@ #define CLUNET_SENDING_STATE_PRIO2 3 #define CLUNET_SENDING_STATE_DATA 4 #define CLUNET_SENDING_STATE_DONE 5 -#define CLUNET_SENDING_STATE_WAITING_LINE 6 +#define CLUNET_SENDING_STATE_WAITING_LINE 8 #define CLUNET_READING_STATE_IDLE 0 #define CLUNET_READING_STATE_INIT 1 -- cgit v1.2.3 From 6da96206cdb9e3bd9ee54f7d4334a1e2e638a736 Mon Sep 17 00:00:00 2001 From: "Sergey V. DUDANOV" Date: Sat, 9 Jul 2016 12:22:36 +0400 Subject: Update clunet.c --- clunet.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clunet.c b/clunet.c index 866fe40..197abfb 100644 --- a/clunet.c +++ b/clunet.c @@ -211,6 +211,7 @@ ISR(CLUNET_INT_VECTOR) /* Если линию прижало к нулю */ if (CLUNET_READING) { + clunetTimerStart = now; // Запомним время начала сигнала /* Если мы в режиме передачи и прижали не мы, то замолкаем и ожидаем, тем более, что наши передаваемые данные уже битые */ /* Обеспечивается быстрая отработка ошибки на линии во избежание конфликтов */ if (clunetSendingState && !CLUNET_SENDING) @@ -218,7 +219,6 @@ ISR(CLUNET_INT_VECTOR) CLUNET_DISABLE_TIMER_COMP; clunetSendingState = CLUNET_SENDING_STATE_WAITING_LINE; } - clunetTimerStart = now; // Запомним время начала сигнала } /* Иначе если линию отпустило */ -- cgit v1.2.3