Change from 16 to 24 Byte Config Code
[owSlave2.git] / common / OWSet_ATTINYX4.s
1 // Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
2 // All rights reserved. \r
3 // \r
4 // Redistribution and use in source and binary forms, with or without \r
5 // modification, are permitted provided that the following conditions are \r
6 // met: \r
7 // \r
8 //  * Redistributions of source code must retain the above copyright \r
9 //    notice, this list of conditions and the following disclaimer. \r
10 //  * Redistributions in binary form must reproduce the above copyright \r
11 //    notice, this list of conditions and the following disclaimer in the \r
12 //    documentation and/or other materials provided with the \r
13 //    distribution. \r
14 //  * All advertising materials mentioning features or use of this \r
15 //    software must display the following acknowledgement: This product \r
16 //    includes software developed by tm3d.de and its contributors. \r
17 //  * Neither the name of tm3d.de nor the names of its contributors may \r
18 //    be used to endorse or promote products derived from this software \r
19 //    without specific prior written permission. \r
20 // \r
21 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
22 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
23 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \r
24 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
25 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
26 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
27 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \r
28 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r
29 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
30 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
31 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
32 \r
33 \r
34 #define OW_PORT _SFR_IO_ADDR(PORTB) //1 Wire Port\r
35 #define OW_PIN _SFR_IO_ADDR(PINB) //1 Wire Pin as number\r
36 #define OW_PINN PORTB2\r
37 #define OW_DDR _SFR_IO_ADDR(DDRB)  //pin direction register\r
38 #define TCNT_REG _SFR_IO_ADDR(TCNT0)\r
39 \r
40 \r
41 #define DB_PORT _SFR_IO_ADDR(PORTB) //DEBUG\r
42 #define DB_PIN _SFR_IO_ADDR(PINB) //DEBUG\r
43 #define DB_DDR _SFR_IO_ADDR(DDRB) //DEBUG\r
44 #define DB_PINN PORTB1\r
45 \r
46 #define SETZEROMARKER sbi _SFR_IO_ADDR(DDRB),3\r
47 #define RESETZEROMARKER cbi _SFR_IO_ADDR(DDRB),3\r
48 #define TESTZEROMARKER sbic _SFR_IO_ADDR(DDRB),3\r
49 \r
50 #ifdef _DB_\r
51 #define sdb sbi _SFR_IO_ADDR(PORTB),DB_PINN\r
52 #define cdb cbi _SFR_IO_ADDR(PORTB),DB_PINN\r
53 #else\r
54 #define sdb\r
55 #define cdb\r
56 #endif\r
57 \r
58 #define TIMER_INTERRUPT TIM0_OVF_vect\r
59 #define PIN_INTERRIPT EXT_INT0_vect\r
60 \r
61 \r
62 //#define OWT_MIN_RESET 160 \r
63 //#define OWT_RESET2 40\r
64 //#define OWT_RESET_PRESENT 15\r
65 //#define OWT_PRESENT 50\r
66 //#define OWT_WRITE 18\r
67 //#define OWT_READ 4\r
68 \r
69 #define OWT_MIN_RESET 180\r
70 #define OWT_RESET2 80\r
71 #define OWT_RESET_PRESENT 30\r
72 #define OWT_PRESENT 130\r
73 #define OWT_WRITE 35\r
74 #define OWT_READ 12\r
75 #define OWT_ZP_WAIT_LOW_TO 60  ; Zeit fuer die Maximale Lowzeit bei der Zerro Polling pruefung. Ist die Leitung laenger low, ist es vieleicht ein Reset \r
76 #define OWT_ZP_WAIT_HIGH_TO 90 ; Zeit fuer die Maximale Hight zeit bis zu einem Low Impuls vom Master. Nach laengeren Pausen wird nicht mehr gepollt sondern der Interrup vererndet.\r
77 \r
78 \r
79 .macro CLEAR_TOV_FLAG\r
80         ldi r_temp,1\r
81         out _SFR_IO_ADDR(TIFR0),r_temp\r
82 .endm\r
83 \r
84 .macro JMP_NO_TOV\r
85         in r_temp, _SFR_IO_ADDR(TIFR0)\r
86         sbrc r_temp,TOV0 ; wenn ueberlauf gleiich weiter\r
87 .endm\r
88 \r
89 .macro CLEAR_INTERRUPT_FLAG \r
90         ldi r_temp,(1<<INTF0);inerrupt flags durch 1 loeschen..... 0 macht nix\r
91         out _SFR_IO_ADDR(GIFR),r_temp\r
92 .endm\r
93 \r
94 .macro EN_TIM_INT\r
95         in r_temp,_SFR_IO_ADDR(TIMSK0)\r
96         sbr r_temp,(1<<TOIE0)\r
97         out _SFR_IO_ADDR(TIMSK0),r_temp\r
98         ldi r_temp,(1<<TOV0) ;inerrupt flags durch 1 loeschen..... 0 macht nix\r
99         out _SFR_IO_ADDR(TIFR0),r_temp\r
100 .endm\r
101 \r
102 .macro DIS_TIM_INT\r
103         in r_temp,_SFR_IO_ADDR(TIMSK0)\r
104         cbr r_temp,(1<<TOIE0)\r
105         out _SFR_IO_ADDR(TIMSK0),r_temp\r
106 .endm\r
107 \r
108 .macro SET_FALLING_RESET_SLEEP\r
109         in r_temp,_SFR_IO_ADDR(MCUCR)\r
110         ori r_temp,(1<<ISC01)\r
111         andi r_temp,~(1<<SM1)\r
112         out     _SFR_IO_ADDR(MCUCR),r_temp\r
113 .endm\r
114 \r
115 .macro HW_INIT  ;r_temp is pushed other Registers should be saved\r
116         ;set clock to 8 MHz\r
117         ldi r_temp,0x80;\r
118         out _SFR_IO_ADDR(CLKPR),r_temp\r
119         //ldi r_temp,(1<<CLKPS0)\r
120         ldi r_temp,0\r
121         out _SFR_IO_ADDR(CLKPR),r_temp\r
122         ;Disable Timer int\r
123         ldi r_temp,0\r
124         out _SFR_IO_ADDR(TIMSK0),r_temp ;; is default\r
125         ;Enable Pin int\r
126         ldi r_temp,(1<<INT0)\r
127         out _SFR_IO_ADDR(GIMSK),r_temp\r
128         ;Set Timerclock to Clock / 8 (2us bei 4MHz) bzw 1us bei 8 MHz\r
129         ldi r_temp,(1<<CS01)\r
130         out _SFR_IO_ADDR(TCCR0B),r_temp\r
131         ;OWPin as input\r
132         cbi OW_DDR,OW_PINN ;; is default.... \r
133         cbi OW_PORT,OW_PINN ;; vereinfachung im Hauptprogram (PORTB=0xFF) wegen pullup\r
134         ;set falling edge\r
135         ldi r_temp,(1<<ISC01)\r
136         out _SFR_IO_ADDR(MCUCR),r_temp\r
137 #ifdef _DB_\r
138         sbi DB_DDR,DB_PINN\r
139 #endif\r
140 .endm\r
141 \r
142 \r
143 \r