Commit 21c4e090b5b1a2a46e4ff18d8b38d5bd33ca14c8

Authored by qqqlab
Committed by GitHub
1 parent dae7d0e9

Delete qqqDali_ATMega328.h

Showing 1 changed file with 0 additions and 145 deletions
qqqDali_ATMega328.h deleted
1 -/*###########################################################################  
2 - qqqDali_ATMega328.h - copyright qqqlab.com / github.com/qqqlab  
3 -  
4 - This program is free software: you can redistribute it and/or modify  
5 - it under the terms of the GNU General Public License as published by  
6 - the Free Software Foundation, either version 3 of the License, or  
7 - (at your option) any later version.  
8 -  
9 - This program is distributed in the hope that it will be useful,  
10 - but WITHOUT ANY WARRANTY; without even the implied warranty of  
11 - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  
12 - GNU General Public License for more details.  
13 -  
14 - You should have received a copy of the GNU General Public License  
15 - along with this program. If not, see <http://www.gnu.org/licenses/>.  
16 -  
17 -----------------------------------------------------------------------------  
18 -Changelog:  
19 -2020-11-10 Created & tested on ATMega328 @ 8Mhz  
20 -###########################################################################*/  
21 -#include "arduino.h"  
22 -#include "qqqDali.h"  
23 -  
24 -#define DALI_HOOK_COUNT 3  
25 -  
26 -class Dali_ATMega328 : public Dali {  
27 -public:  
28 - void begin(int8_t tx_pin, int8_t rx_pin);  
29 - virtual void HAL_set_bus_low() const override;  
30 - virtual void HAL_set_bus_high() const override;  
31 - virtual uint8_t HAL_is_bus_low() const override;  
32 - virtual uint32_t HAL_micros() const override;  
33 -  
34 -private:  
35 - uint8_t tx_pin; //transmitter pin  
36 - uint8_t rx_pin; //receiver pin  
37 -};  
38 -  
39 -//-----------------------------------------  
40 -//Hardware Abstraction Layer  
41 -void Dali_ATMega328::HAL_set_bus_low() const {  
42 - digitalWrite(this->tx_pin,LOW);  
43 -}  
44 -  
45 -void Dali_ATMega328::HAL_set_bus_high() const {  
46 - digitalWrite(this->tx_pin,HIGH);  
47 -}  
48 -  
49 -uint8_t Dali_ATMega328::HAL_is_bus_low() const {  
50 - return (digitalRead(this->rx_pin) == LOW);  
51 -}  
52 -  
53 -uint32_t Dali_ATMega328::HAL_micros() const {  
54 - return micros();  
55 -}  
56 -  
57 -//-----------------------------------------  
58 -// Transmitter ISR  
59 -static Dali *IsrTimerHooks[DALI_HOOK_COUNT+1];  
60 -  
61 -// timer compare interrupt service routine  
62 -ISR(TIMER1_COMPA_vect) {  
63 -  
64 - for(uint8_t i=0;i<DALI_HOOK_COUNT;i++) {  
65 - if(IsrTimerHooks[i]==NULL) {return;}  
66 - IsrTimerHooks[i]->ISR_timer();  
67 - }  
68 -}  
69 -  
70 -//-----------------------------------------  
71 -// Receiver ISR  
72 -//pin PCINT  
73 -//0-7 PCINT2_vect PCINT16-23  
74 -//8-13 PCINT0_vect PCINT0-5  
75 -//14-19 PCINT1_vect PCINT8-13  
76 -static Dali *IsrPCINT0Hook;  
77 -static Dali *IsrPCINT1Hook;  
78 -static Dali *IsrPCINT2Hook;  
79 -  
80 -ISR(PCINT0_vect) {  
81 - if(IsrPCINT0Hook!=NULL) IsrPCINT0Hook->ISR_pinchange();  
82 -}  
83 -ISR(PCINT1_vect) {  
84 - if(IsrPCINT1Hook!=NULL) IsrPCINT1Hook->ISR_pinchange();  
85 -}  
86 -ISR(PCINT2_vect) {  
87 - if(IsrPCINT2Hook!=NULL) IsrPCINT2Hook->ISR_pinchange();  
88 -}  
89 -  
90 -  
91 -//-----------------------------------------  
92 -// begin  
93 -void Dali_ATMega328::begin(int8_t tx_pin, int8_t rx_pin) {  
94 - this->tx_pin = tx_pin;  
95 - this->rx_pin = rx_pin;  
96 -  
97 - //setup tx  
98 - if(this->tx_pin>=0) {  
99 - //setup tx pin  
100 - pinMode(this->tx_pin, OUTPUT);  
101 - this->HAL_set_bus_high();  
102 - this->tx_bus_low=0;  
103 -  
104 - //setup tx timer interrupt  
105 - TCCR1A = 0;  
106 - TCCR1B = 0;  
107 - TCNT1 = 0;  
108 - OCR1A = (F_CPU+(DALI_BAUD))/(2*(DALI_BAUD)); // compare match register at baud rate * 2  
109 - TCCR1B |= (1 << WGM12); // CTC mode  
110 - TCCR1B |= (1 << CS10); // 1:1 prescaler  
111 - TIMSK1 |= (1 << OCIE1A); // enable timer compare interrupt  
112 -  
113 - //setup timer interrupt hooks  
114 - for(uint8_t i=0;i<DALI_HOOK_COUNT;i++) {  
115 - if(IsrTimerHooks[i] == NULL) {  
116 - IsrTimerHooks[i] = this;  
117 - break;  
118 - }  
119 - }  
120 - }  
121 -  
122 - //setup rx  
123 - if(this->rx_pin>=0) {  
124 - //setup rx pin  
125 - pinMode(this->rx_pin, INPUT);  
126 -  
127 - //setup rx pinchange interrupt  
128 - // 0- 7 PCINT2_vect PCINT16-23  
129 - // 8-13 PCINT0_vect PCINT0-5  
130 - //14-19 PCINT1_vect PCINT8-13  
131 - if(this->rx_pin <= 7){  
132 - PCICR |= (1 << PCIE2);  
133 - PCMSK2 |= (1 << (this->rx_pin));  
134 - IsrPCINT2Hook = this; //setup pinchange interrupt hook  
135 - }else if(this->rx_pin <= 13) {  
136 - PCICR |= (1 << PCIE0);  
137 - PCMSK0 |= (1 << (this->rx_pin - 8));  
138 - IsrPCINT0Hook = this; //setup pinchange interrupt hook  
139 - }else if(this->rx_pin <= 19) {  
140 - PCICR |= (1 << PCIE1);  
141 - PCMSK1 |= (1 << (this->rx_pin - 14));  
142 - IsrPCINT1Hook = this; //setup pinchange interrupt hook  
143 - }  
144 - }  
145 -}