File tree Expand file tree Collapse file tree 6 files changed +21
-0
lines changed Expand file tree Collapse file tree 6 files changed +21
-0
lines changed Original file line number Diff line number Diff line change @@ -7,6 +7,7 @@ package ws2812
77import (
88 "device/avr"
99 "machine"
10+ "runtime/interrupt"
1011)
1112
1213// Send a single byte using the WS2812 protocol.
@@ -17,6 +18,7 @@ func (d Device) WriteByte(c byte) error {
1718 // Probably this is about pointer registers, which are very limited on AVR.
1819 port , maskSet := d .Pin .PortMaskSet ()
1920 _ , maskClear := d .Pin .PortMaskClear ()
21+ mask := interrupt .Disable ()
2022
2123 switch machine .CPUFrequency () {
2224 case 16e6 : // 16MHz
@@ -51,8 +53,10 @@ func (d Device) WriteByte(c byte) error {
5153 "maskClear" : maskClear ,
5254 "portClear" : port ,
5355 })
56+ interrupt .Restore (mask )
5457 return nil
5558 default :
59+ interrupt .Restore (mask )
5660 return errUnknownClockSpeed
5761 }
5862}
Original file line number Diff line number Diff line change @@ -7,13 +7,15 @@ package ws2812
77
88import (
99 "device/arm"
10+ "runtime/interrupt"
1011)
1112
1213// Send a single byte using the WS2812 protocol.
1314func (d Device ) WriteByte (c byte ) error {
1415 // For the Cortex-M0 at 16MHz
1516 portSet , maskSet := d .Pin .PortMaskSet ()
1617 portClear , maskClear := d .Pin .PortMaskClear ()
18+ mask := interrupt .Disable ()
1719
1820 // See:
1921 // https://wp.josh.com/2014/05/13/ws2812-neopixels-are-not-so-finicky-once-you-get-to-know-them/
@@ -48,5 +50,6 @@ func (d Device) WriteByte(c byte) error {
4850 "maskClear" : maskClear ,
4951 "portClear" : portClear ,
5052 })
53+ interrupt .Restore (mask )
5154 return nil
5255}
Original file line number Diff line number Diff line change @@ -7,13 +7,15 @@ package ws2812
77
88import (
99 "device/arm"
10+ "runtime/interrupt"
1011)
1112
1213// Send a single byte using the WS2812 protocol.
1314func (d Device ) WriteByte (c byte ) error {
1415 // For the Cortex-M0 at 48MHz
1516 portSet , maskSet := d .Pin .PortMaskSet ()
1617 portClear , maskClear := d .Pin .PortMaskClear ()
18+ mask := interrupt .Disable ()
1719
1820 // See:
1921 // https://wp.josh.com/2014/05/13/ws2812-neopixels-are-not-so-finicky-once-you-get-to-know-them/
@@ -77,5 +79,6 @@ func (d Device) WriteByte(c byte) error {
7779 "maskClear" : maskClear ,
7880 "portClear" : portClear ,
7981 })
82+ interrupt .Restore (mask )
8083 return nil
8184}
Original file line number Diff line number Diff line change @@ -8,13 +8,15 @@ package ws2812
88
99import (
1010 "device/arm"
11+ "runtime/interrupt"
1112)
1213
1314// Send a single byte using the WS2812 protocol.
1415func (d Device ) WriteByte (c byte ) error {
1516 // For the Cortex-M4 at 120MHz
1617 portSet , maskSet := d .Pin .PortMaskSet ()
1718 portClear , maskClear := d .Pin .PortMaskClear ()
19+ mask := interrupt .Disable ()
1820
1921 // See:
2022 // https://wp.josh.com/2014/05/13/ws2812-neopixels-are-not-so-finicky-once-you-get-to-know-them/
@@ -169,5 +171,6 @@ func (d Device) WriteByte(c byte) error {
169171 "maskClear" : maskClear ,
170172 "portClear" : portClear ,
171173 })
174+ interrupt .Restore (mask )
172175 return nil
173176}
Original file line number Diff line number Diff line change @@ -7,13 +7,15 @@ package ws2812
77
88import (
99 "device/arm"
10+ "runtime/interrupt"
1011)
1112
1213// Send a single byte using the WS2812 protocol.
1314func (d Device ) WriteByte (c byte ) error {
1415 // For the Cortex-M4 at 64MHz
1516 portSet , maskSet := d .Pin .PortMaskSet ()
1617 portClear , maskClear := d .Pin .PortMaskClear ()
18+ mask := interrupt .Disable ()
1719
1820 // See:
1921 // https://wp.josh.com/2014/05/13/ws2812-neopixels-are-not-so-finicky-once-you-get-to-know-them/
@@ -106,5 +108,6 @@ func (d Device) WriteByte(c byte) error {
106108 "maskClear" : maskClear ,
107109 "portClear" : portClear ,
108110 })
111+ interrupt .Restore (mask )
109112 return nil
110113}
Original file line number Diff line number Diff line change @@ -5,12 +5,14 @@ package ws2812
55import (
66 "device"
77 "machine"
8+ "runtime/interrupt"
89 "unsafe"
910)
1011
1112func (d Device ) WriteByte (c byte ) error {
1213 portSet , maskSet := d .Pin .PortMaskSet ()
1314 portClear , maskClear := d .Pin .PortMaskClear ()
15+ mask := interrupt .Disable ()
1416
1517 switch machine .CPUFrequency () {
1618 case 160e6 : // 160MHz
@@ -220,6 +222,7 @@ func (d Device) WriteByte(c byte) error {
220222 "maskClear" : maskClear ,
221223 "portClear" : uintptr (unsafe .Pointer (portClear )),
222224 })
225+ interrupt .Restore (mask )
223226 return nil
224227 case 80e6 : // 80MHz
225228 // See docs for 160MHz.
@@ -336,8 +339,10 @@ func (d Device) WriteByte(c byte) error {
336339 "maskClear" : maskClear ,
337340 "portClear" : uintptr (unsafe .Pointer (portClear )),
338341 })
342+ interrupt .Restore (mask )
339343 return nil
340344 default :
345+ interrupt .Restore (mask )
341346 return errUnknownClockSpeed
342347 }
343348}
You can’t perform that action at this time.
0 commit comments