Browse Source

Decrease the needed nops to 1

by shitfing the left shift into the high phase.

```
2	cbi 0x2,1 ;set CLK                      //
1	in r18,__SREG__                         //1
1-3	sbrc r24,7                              //2-4
2	rjmp .L19                               //4
1	cli                  .L19:              //5
2	lds r25,258          lds r25,258        //7
1	andi r25,lo8(-2)     ori r25,lo8(1)     //8
2	sts 258,r25          sts 258,r25        //10
1	out __SREG__,r18     out __SREG__,r18   //11
2	.L3:                 rjmp .L3           //13     //2
2	sbi 0x2,1 ;reset CLK //                 //13-15  //2-4
1	lsl r24	 ;  val      //1
1	nop                  //2
2	cbi 0x2,1 ;set CLK   //4
...
```
AnHardt 9 years ago
parent
commit
4454d80276
1 changed files with 12 additions and 14 deletions
  1. 12
    14
      Marlin/ultralcd_st7920_u8glib_rrd.h

+ 12
- 14
Marlin/ultralcd_st7920_u8glib_rrd.h View File

41
 #include <U8glib.h>
41
 #include <U8glib.h>
42
 
42
 
43
 //set optimization so ARDUINO optimizes this file
43
 //set optimization so ARDUINO optimizes this file
44
-#pragma GCC push_options
45
 #pragma GCC optimize (3)
44
 #pragma GCC optimize (3)
46
 
45
 
47
 #define DELAY_0_NOP  ;
46
 #define DELAY_0_NOP  ;
64
     #define ST7920_DELAY_2 DELAY_0_NOP
63
     #define ST7920_DELAY_2 DELAY_0_NOP
65
   #endif
64
   #endif
66
   #ifndef ST7920_DELAY_3
65
   #ifndef ST7920_DELAY_3
67
-    #define ST7920_DELAY_3 DELAY_2_NOP
66
+    #define ST7920_DELAY_3 DELAY_1_NOP
68
   #endif
67
   #endif
69
-#elif MOTHERBOARD == BOARD_3DRAG
68
+#elif (MOTHERBOARD == BOARD_3DRAG) || (MOTHERBOARD == BOARD_K8200)
70
   #ifndef ST7920_DELAY_1
69
   #ifndef ST7920_DELAY_1
71
     #define ST7920_DELAY_1 DELAY_0_NOP
70
     #define ST7920_DELAY_1 DELAY_0_NOP
72
   #endif
71
   #endif
74
     #define ST7920_DELAY_2 DELAY_0_NOP
73
     #define ST7920_DELAY_2 DELAY_0_NOP
75
   #endif
74
   #endif
76
   #ifndef ST7920_DELAY_3
75
   #ifndef ST7920_DELAY_3
77
-    #define ST7920_DELAY_3 DELAY_2_NOP
76
+    #define ST7920_DELAY_3 DELAY_1_NOP
78
   #endif
77
   #endif
79
 #elif F_CPU == 16000000
78
 #elif F_CPU == 16000000
80
   #ifndef ST7920_DELAY_1
79
   #ifndef ST7920_DELAY_1
84
     #define ST7920_DELAY_2 DELAY_0_NOP
83
     #define ST7920_DELAY_2 DELAY_0_NOP
85
   #endif
84
   #endif
86
   #ifndef ST7920_DELAY_3
85
   #ifndef ST7920_DELAY_3
87
-    #define ST7920_DELAY_3 DELAY_2_NOP
86
+    #define ST7920_DELAY_3 DELAY_1_NOP
88
   #endif
87
   #endif
89
 #else
88
 #else
90
   #error "No valid condition for delays in 'ultralcd_st7920_u8glib_rrd.h'"
89
   #error "No valid condition for delays in 'ultralcd_st7920_u8glib_rrd.h'"
94
     WRITE(ST7920_CLK_PIN,0);
93
     WRITE(ST7920_CLK_PIN,0);
95
     ST7920_DELAY_1
94
     ST7920_DELAY_1
96
     WRITE(ST7920_DAT_PIN,val&0x80);
95
     WRITE(ST7920_DAT_PIN,val&0x80);
97
-    val<<=1;
98
     ST7920_DELAY_2
96
     ST7920_DELAY_2
99
     WRITE(ST7920_CLK_PIN,1);
97
     WRITE(ST7920_CLK_PIN,1);
98
+    val<<=1;
100
     ST7920_DELAY_3
99
     ST7920_DELAY_3
101
 
100
 
102
     WRITE(ST7920_CLK_PIN,0);
101
     WRITE(ST7920_CLK_PIN,0);
103
     ST7920_DELAY_1
102
     ST7920_DELAY_1
104
     WRITE(ST7920_DAT_PIN,val&0x80);
103
     WRITE(ST7920_DAT_PIN,val&0x80);
105
-    val<<=1;
106
     ST7920_DELAY_2
104
     ST7920_DELAY_2
107
     WRITE(ST7920_CLK_PIN,1);
105
     WRITE(ST7920_CLK_PIN,1);
106
+    val<<=1;
108
     ST7920_DELAY_3
107
     ST7920_DELAY_3
109
 
108
 
110
     WRITE(ST7920_CLK_PIN,0);
109
     WRITE(ST7920_CLK_PIN,0);
111
     ST7920_DELAY_1
110
     ST7920_DELAY_1
112
     WRITE(ST7920_DAT_PIN,val&0x80);
111
     WRITE(ST7920_DAT_PIN,val&0x80);
113
-    val<<=1;
114
     ST7920_DELAY_2
112
     ST7920_DELAY_2
115
     WRITE(ST7920_CLK_PIN,1);
113
     WRITE(ST7920_CLK_PIN,1);
114
+    val<<=1;
116
     ST7920_DELAY_3
115
     ST7920_DELAY_3
117
 
116
 
118
     WRITE(ST7920_CLK_PIN,0);
117
     WRITE(ST7920_CLK_PIN,0);
119
     ST7920_DELAY_1
118
     ST7920_DELAY_1
120
     WRITE(ST7920_DAT_PIN,val&0x80);
119
     WRITE(ST7920_DAT_PIN,val&0x80);
121
-    val<<=1;
122
     ST7920_DELAY_2
120
     ST7920_DELAY_2
123
     WRITE(ST7920_CLK_PIN,1);
121
     WRITE(ST7920_CLK_PIN,1);
122
+    val<<=1;
124
     ST7920_DELAY_3
123
     ST7920_DELAY_3
125
 
124
 
126
     WRITE(ST7920_CLK_PIN,0);
125
     WRITE(ST7920_CLK_PIN,0);
127
     ST7920_DELAY_1
126
     ST7920_DELAY_1
128
     WRITE(ST7920_DAT_PIN,val&0x80);
127
     WRITE(ST7920_DAT_PIN,val&0x80);
129
-    val<<=1;
130
     ST7920_DELAY_2
128
     ST7920_DELAY_2
131
     WRITE(ST7920_CLK_PIN,1);
129
     WRITE(ST7920_CLK_PIN,1);
130
+    val<<=1;
132
     ST7920_DELAY_3
131
     ST7920_DELAY_3
133
 
132
 
134
     WRITE(ST7920_CLK_PIN,0);
133
     WRITE(ST7920_CLK_PIN,0);
135
     ST7920_DELAY_1
134
     ST7920_DELAY_1
136
     WRITE(ST7920_DAT_PIN,val&0x80);
135
     WRITE(ST7920_DAT_PIN,val&0x80);
137
-    val<<=1;
138
     ST7920_DELAY_2
136
     ST7920_DELAY_2
139
     WRITE(ST7920_CLK_PIN,1);
137
     WRITE(ST7920_CLK_PIN,1);
138
+    val<<=1;
140
     ST7920_DELAY_3
139
     ST7920_DELAY_3
141
 
140
 
142
     WRITE(ST7920_CLK_PIN,0);
141
     WRITE(ST7920_CLK_PIN,0);
143
     ST7920_DELAY_1
142
     ST7920_DELAY_1
144
     WRITE(ST7920_DAT_PIN,val&0x80);
143
     WRITE(ST7920_DAT_PIN,val&0x80);
145
-    val<<=1;
146
     ST7920_DELAY_2
144
     ST7920_DELAY_2
147
     WRITE(ST7920_CLK_PIN,1);
145
     WRITE(ST7920_CLK_PIN,1);
146
+    val<<=1;
148
     ST7920_DELAY_3
147
     ST7920_DELAY_3
149
 
148
 
150
     WRITE(ST7920_CLK_PIN,0);
149
     WRITE(ST7920_CLK_PIN,0);
151
     ST7920_DELAY_1
150
     ST7920_DELAY_1
152
     WRITE(ST7920_DAT_PIN,val&0x80);
151
     WRITE(ST7920_DAT_PIN,val&0x80);
153
-    val<<=1;
154
     ST7920_DELAY_2
152
     ST7920_DELAY_2
155
     WRITE(ST7920_CLK_PIN,1);
153
     WRITE(ST7920_CLK_PIN,1);
156
 }
154
 }
234
   U8GLIB_ST7920_128X64_RRD(uint8_t dummy) : U8GLIB(&u8g_dev_st7920_128x64_rrd_sw_spi) { UNUSED(dummy); }
232
   U8GLIB_ST7920_128X64_RRD(uint8_t dummy) : U8GLIB(&u8g_dev_st7920_128x64_rrd_sw_spi) { UNUSED(dummy); }
235
 };
233
 };
236
 
234
 
237
-#pragma GCC pop_options
235
+#pragma GCC reset_options
238
 
236
 
239
 #endif //U8GLIB_ST7920
237
 #endif //U8GLIB_ST7920
240
 #endif //ULCDST7920_H
238
 #endif //ULCDST7920_H

Loading…
Cancel
Save