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   -}