rp2040js 0.17.17 → 0.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/dist/cjs/clock/clock.d.ts +11 -11
  2. package/dist/cjs/clock/clock.js +2 -2
  3. package/dist/cjs/clock/mock-clock.d.ts +17 -17
  4. package/dist/cjs/clock/mock-clock.js +52 -52
  5. package/dist/cjs/clock/realtime-clock.d.ts +23 -23
  6. package/dist/cjs/clock/realtime-clock.js +73 -73
  7. package/dist/cjs/cortex-m0-core.d.ts +87 -87
  8. package/dist/cjs/cortex-m0-core.js +1251 -1251
  9. package/dist/cjs/gdb/gdb-connection.d.ts +11 -11
  10. package/dist/cjs/gdb/gdb-connection.js +57 -57
  11. package/dist/cjs/gdb/gdb-server.d.ts +23 -23
  12. package/dist/cjs/gdb/gdb-server.js +232 -232
  13. package/dist/cjs/gdb/gdb-tcp-server.d.ts +10 -10
  14. package/dist/cjs/gdb/gdb-tcp-server.js +34 -34
  15. package/dist/cjs/gdb/gdb-utils.d.ts +9 -9
  16. package/dist/cjs/gdb/gdb-utils.js +48 -48
  17. package/dist/cjs/gpio-pin.d.ts +56 -56
  18. package/dist/cjs/gpio-pin.js +216 -216
  19. package/dist/cjs/index.d.ts +11 -11
  20. package/dist/cjs/index.js +36 -36
  21. package/dist/cjs/interpolator.d.ts +36 -36
  22. package/dist/cjs/interpolator.js +150 -150
  23. package/dist/cjs/irq.d.ts +29 -29
  24. package/dist/cjs/irq.js +33 -33
  25. package/dist/cjs/peripherals/adc.d.ts +52 -52
  26. package/dist/cjs/peripherals/adc.js +261 -261
  27. package/dist/cjs/peripherals/busctrl.d.ts +10 -10
  28. package/dist/cjs/peripherals/busctrl.js +84 -84
  29. package/dist/cjs/peripherals/clocks.d.ts +9 -9
  30. package/dist/cjs/peripherals/clocks.js +42 -42
  31. package/dist/cjs/peripherals/dma.d.ts +109 -109
  32. package/dist/cjs/peripherals/dma.js +520 -520
  33. package/dist/cjs/peripherals/i2c.d.ts +54 -54
  34. package/dist/cjs/peripherals/i2c.js +458 -458
  35. package/dist/cjs/peripherals/io.d.ts +11 -11
  36. package/dist/cjs/peripherals/io.js +100 -100
  37. package/dist/cjs/peripherals/pads.d.ts +13 -13
  38. package/dist/cjs/peripherals/pads.js +58 -58
  39. package/dist/cjs/peripherals/peripheral.d.ts +22 -22
  40. package/dist/cjs/peripherals/peripheral.js +61 -61
  41. package/dist/cjs/peripherals/pio.d.ts +120 -120
  42. package/dist/cjs/peripherals/pio.js +1086 -1086
  43. package/dist/cjs/peripherals/ppb.d.ts +25 -25
  44. package/dist/cjs/peripherals/ppb.js +229 -229
  45. package/dist/cjs/peripherals/pwm.d.ts +65 -65
  46. package/dist/cjs/peripherals/pwm.js +372 -372
  47. package/dist/cjs/peripherals/reset.d.ts +8 -8
  48. package/dist/cjs/peripherals/reset.js +40 -40
  49. package/dist/cjs/peripherals/rtc.d.ts +10 -10
  50. package/dist/cjs/peripherals/rtc.js +74 -74
  51. package/dist/cjs/peripherals/spi.d.ts +38 -38
  52. package/dist/cjs/peripherals/spi.js +240 -240
  53. package/dist/cjs/peripherals/ssi.d.ts +6 -6
  54. package/dist/cjs/peripherals/ssi.js +43 -43
  55. package/dist/cjs/peripherals/syscfg.d.ts +5 -5
  56. package/dist/cjs/peripherals/syscfg.js +26 -26
  57. package/dist/cjs/peripherals/sysinfo.d.ts +4 -4
  58. package/dist/cjs/peripherals/sysinfo.js +22 -22
  59. package/dist/cjs/peripherals/tbman.d.ts +4 -4
  60. package/dist/cjs/peripherals/tbman.js +17 -17
  61. package/dist/cjs/peripherals/timer.d.ts +18 -18
  62. package/dist/cjs/peripherals/timer.js +156 -156
  63. package/dist/cjs/peripherals/uart.d.ts +31 -31
  64. package/dist/cjs/peripherals/uart.js +132 -132
  65. package/dist/cjs/peripherals/usb.d.ts +29 -29
  66. package/dist/cjs/peripherals/usb.js +309 -309
  67. package/dist/cjs/rp2040.d.ts +71 -71
  68. package/dist/cjs/rp2040.js +361 -361
  69. package/dist/cjs/sio.d.ts +21 -21
  70. package/dist/cjs/sio.js +425 -425
  71. package/dist/cjs/usb/cdc.d.ts +20 -20
  72. package/dist/cjs/usb/cdc.js +126 -126
  73. package/dist/cjs/usb/interfaces.d.ts +47 -47
  74. package/dist/cjs/usb/interfaces.js +46 -46
  75. package/dist/cjs/usb/setup.d.ts +5 -5
  76. package/dist/cjs/usb/setup.js +53 -53
  77. package/dist/cjs/utils/assembler.d.ts +79 -79
  78. package/dist/cjs/utils/assembler.js +328 -328
  79. package/dist/cjs/utils/bit.d.ts +3 -3
  80. package/dist/cjs/utils/bit.js +15 -15
  81. package/dist/cjs/utils/fifo.d.ts +15 -15
  82. package/dist/cjs/utils/fifo.js +56 -56
  83. package/dist/cjs/utils/logging.d.ts +23 -23
  84. package/dist/cjs/utils/logging.js +48 -48
  85. package/dist/cjs/utils/pio-assembler.d.ts +45 -45
  86. package/dist/cjs/utils/pio-assembler.js +87 -87
  87. package/dist/cjs/utils/time.d.ts +2 -2
  88. package/dist/cjs/utils/time.js +32 -32
  89. package/dist/cjs/utils/timer32.d.ts +57 -57
  90. package/dist/cjs/utils/timer32.js +208 -208
  91. package/dist/esm/clock/clock.d.ts +11 -11
  92. package/dist/esm/clock/clock.js +1 -1
  93. package/dist/esm/clock/mock-clock.d.ts +17 -17
  94. package/dist/esm/clock/mock-clock.js +47 -47
  95. package/dist/esm/clock/realtime-clock.d.ts +23 -23
  96. package/dist/esm/clock/realtime-clock.js +68 -68
  97. package/dist/esm/cortex-m0-core.d.ts +87 -87
  98. package/dist/esm/cortex-m0-core.js +1247 -1247
  99. package/dist/esm/gdb/gdb-connection.d.ts +11 -11
  100. package/dist/esm/gdb/gdb-connection.js +53 -53
  101. package/dist/esm/gdb/gdb-server.d.ts +23 -23
  102. package/dist/esm/gdb/gdb-server.js +228 -228
  103. package/dist/esm/gdb/gdb-tcp-server.d.ts +10 -10
  104. package/dist/esm/gdb/gdb-tcp-server.js +30 -30
  105. package/dist/esm/gdb/gdb-utils.d.ts +9 -9
  106. package/dist/esm/gdb/gdb-utils.js +36 -36
  107. package/dist/esm/gpio-pin.d.ts +56 -56
  108. package/dist/esm/gpio-pin.js +212 -212
  109. package/dist/esm/index.d.ts +11 -11
  110. package/dist/esm/index.js +11 -11
  111. package/dist/esm/interpolator.d.ts +36 -36
  112. package/dist/esm/interpolator.js +145 -145
  113. package/dist/esm/irq.d.ts +29 -29
  114. package/dist/esm/irq.js +30 -30
  115. package/dist/esm/peripherals/adc.d.ts +52 -52
  116. package/dist/esm/peripherals/adc.js +257 -257
  117. package/dist/esm/peripherals/busctrl.d.ts +10 -10
  118. package/dist/esm/peripherals/busctrl.js +80 -80
  119. package/dist/esm/peripherals/clocks.d.ts +9 -9
  120. package/dist/esm/peripherals/clocks.js +38 -38
  121. package/dist/esm/peripherals/dma.d.ts +109 -109
  122. package/dist/esm/peripherals/dma.js +515 -515
  123. package/dist/esm/peripherals/i2c.d.ts +54 -54
  124. package/dist/esm/peripherals/i2c.js +454 -454
  125. package/dist/esm/peripherals/io.d.ts +11 -11
  126. package/dist/esm/peripherals/io.js +96 -96
  127. package/dist/esm/peripherals/pads.d.ts +13 -13
  128. package/dist/esm/peripherals/pads.js +54 -54
  129. package/dist/esm/peripherals/peripheral.d.ts +22 -22
  130. package/dist/esm/peripherals/peripheral.js +55 -55
  131. package/dist/esm/peripherals/pio.d.ts +120 -120
  132. package/dist/esm/peripherals/pio.js +1081 -1081
  133. package/dist/esm/peripherals/ppb.d.ts +25 -25
  134. package/dist/esm/peripherals/ppb.js +225 -225
  135. package/dist/esm/peripherals/pwm.d.ts +65 -65
  136. package/dist/esm/peripherals/pwm.js +368 -368
  137. package/dist/esm/peripherals/reset.d.ts +8 -8
  138. package/dist/esm/peripherals/reset.js +36 -36
  139. package/dist/esm/peripherals/rtc.d.ts +10 -10
  140. package/dist/esm/peripherals/rtc.js +70 -70
  141. package/dist/esm/peripherals/spi.d.ts +38 -38
  142. package/dist/esm/peripherals/spi.js +236 -236
  143. package/dist/esm/peripherals/ssi.d.ts +6 -6
  144. package/dist/esm/peripherals/ssi.js +39 -39
  145. package/dist/esm/peripherals/syscfg.d.ts +5 -5
  146. package/dist/esm/peripherals/syscfg.js +22 -22
  147. package/dist/esm/peripherals/sysinfo.d.ts +4 -4
  148. package/dist/esm/peripherals/sysinfo.js +18 -18
  149. package/dist/esm/peripherals/tbman.d.ts +4 -4
  150. package/dist/esm/peripherals/tbman.js +13 -13
  151. package/dist/esm/peripherals/timer.d.ts +18 -18
  152. package/dist/esm/peripherals/timer.js +152 -152
  153. package/dist/esm/peripherals/uart.d.ts +31 -31
  154. package/dist/esm/peripherals/uart.js +128 -128
  155. package/dist/esm/peripherals/usb.d.ts +29 -29
  156. package/dist/esm/peripherals/usb.js +305 -305
  157. package/dist/esm/rp2040.d.ts +71 -71
  158. package/dist/esm/rp2040.js +357 -357
  159. package/dist/esm/sio.d.ts +21 -21
  160. package/dist/esm/sio.js +421 -421
  161. package/dist/esm/usb/cdc.d.ts +20 -20
  162. package/dist/esm/usb/cdc.js +121 -121
  163. package/dist/esm/usb/interfaces.d.ts +47 -47
  164. package/dist/esm/usb/interfaces.js +43 -43
  165. package/dist/esm/usb/setup.d.ts +5 -5
  166. package/dist/esm/usb/setup.js +46 -46
  167. package/dist/esm/utils/assembler.d.ts +79 -79
  168. package/dist/esm/utils/assembler.js +245 -245
  169. package/dist/esm/utils/bit.d.ts +3 -3
  170. package/dist/esm/utils/bit.js +9 -9
  171. package/dist/esm/utils/fifo.d.ts +15 -15
  172. package/dist/esm/utils/fifo.js +52 -52
  173. package/dist/esm/utils/logging.d.ts +23 -23
  174. package/dist/esm/utils/logging.js +44 -44
  175. package/dist/esm/utils/pio-assembler.d.ts +45 -45
  176. package/dist/esm/utils/pio-assembler.js +75 -75
  177. package/dist/esm/utils/time.d.ts +2 -2
  178. package/dist/esm/utils/time.js +27 -27
  179. package/dist/esm/utils/timer32.d.ts +57 -57
  180. package/dist/esm/utils/timer32.js +203 -203
  181. package/package.json +38 -27
  182. package/dist/esm/package.json +0 -1
package/dist/cjs/sio.js CHANGED
@@ -1,425 +1,425 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RPSIO = void 0;
4
- const interpolator_1 = require("./interpolator");
5
- const CPUID = 0x000;
6
- // GPIO
7
- const GPIO_IN = 0x004; // Input value for GPIO pins
8
- const GPIO_HI_IN = 0x008; // Input value for QSPI pins
9
- const GPIO_OUT = 0x010; // GPIO output value
10
- const GPIO_OUT_SET = 0x014; // GPIO output value set
11
- const GPIO_OUT_CLR = 0x018; // GPIO output value clear
12
- const GPIO_OUT_XOR = 0x01c; // GPIO output value XOR
13
- const GPIO_OE = 0x020; // GPIO output enable
14
- const GPIO_OE_SET = 0x024; // GPIO output enable set
15
- const GPIO_OE_CLR = 0x028; // GPIO output enable clear
16
- const GPIO_OE_XOR = 0x02c; // GPIO output enable XOR
17
- const GPIO_HI_OUT = 0x030; // QSPI output value
18
- const GPIO_HI_OUT_SET = 0x034; // QSPI output value set
19
- const GPIO_HI_OUT_CLR = 0x038; // QSPI output value clear
20
- const GPIO_HI_OUT_XOR = 0x03c; // QSPI output value XOR
21
- const GPIO_HI_OE = 0x040; // QSPI output enable
22
- const GPIO_HI_OE_SET = 0x044; // QSPI output enable set
23
- const GPIO_HI_OE_CLR = 0x048; // QSPI output enable clear
24
- const GPIO_HI_OE_XOR = 0x04c; // QSPI output enable XOR
25
- const GPIO_MASK = 0x3fffffff;
26
- //HARDWARE DIVIDER
27
- const DIV_UDIVIDEND = 0x060; // Divider unsigned dividend
28
- const DIV_UDIVISOR = 0x064; // Divider unsigned divisor
29
- const DIV_SDIVIDEND = 0x068; // Divider signed dividend
30
- const DIV_SDIVISOR = 0x06c; // Divider signed divisor
31
- const DIV_QUOTIENT = 0x070; // Divider result quotient
32
- const DIV_REMAINDER = 0x074; //Divider result remainder
33
- const DIV_CSR = 0x078;
34
- //INTERPOLATOR
35
- const INTERP0_ACCUM0 = 0x080; // Read/write access to accumulator 0
36
- const INTERP0_ACCUM1 = 0x084; // Read/write access to accumulator 1
37
- const INTERP0_BASE0 = 0x088; // Read/write access to BASE0 register
38
- const INTERP0_BASE1 = 0x08c; // Read/write access to BASE1 register
39
- const INTERP0_BASE2 = 0x090; // Read/write access to BASE2 register
40
- const INTERP0_POP_LANE0 = 0x094; // Read LANE0 result, and simultaneously write lane results to both accumulators (POP)
41
- const INTERP0_POP_LANE1 = 0x098; // Read LANE1 result, and simultaneously write lane results to both accumulators (POP)
42
- const INTERP0_POP_FULL = 0x09c; // Read FULL result, and simultaneously write lane results to both accumulators (POP)
43
- const INTERP0_PEEK_LANE0 = 0x0a0; // Read LANE0 result, without altering any internal state (PEEK)
44
- const INTERP0_PEEK_LANE1 = 0x0a4; // Read LANE1 result, without altering any internal state (PEEK)
45
- const INTERP0_PEEK_FULL = 0x0a8; // Read FULL result, without altering any internal state (PEEK)
46
- const INTERP0_CTRL_LANE0 = 0x0ac; // Control register for lane 0
47
- const INTERP0_CTRL_LANE1 = 0x0b0; // Control register for lane 1
48
- const INTERP0_ACCUM0_ADD = 0x0b4; // Values written here are atomically added to ACCUM0
49
- const INTERP0_ACCUM1_ADD = 0x0b8; // Values written here are atomically added to ACCUM1
50
- const INTERP0_BASE_1AND0 = 0x0bc; // On write, the lower 16 bits go to BASE0, upper bits to BASE1 simultaneously
51
- const INTERP1_ACCUM0 = 0x0c0; // Read/write access to accumulator 0
52
- const INTERP1_ACCUM1 = 0x0c4; // Read/write access to accumulator 1
53
- const INTERP1_BASE0 = 0x0c8; // Read/write access to BASE0 register
54
- const INTERP1_BASE1 = 0x0cc; // Read/write access to BASE1 register
55
- const INTERP1_BASE2 = 0x0d0; // Read/write access to BASE2 register
56
- const INTERP1_POP_LANE0 = 0x0d4; // Read LANE0 result, and simultaneously write lane results to both accumulators (POP)
57
- const INTERP1_POP_LANE1 = 0x0d8; // Read LANE1 result, and simultaneously write lane results to both accumulators (POP)
58
- const INTERP1_POP_FULL = 0x0dc; // Read FULL result, and simultaneously write lane results to both accumulators (POP)
59
- const INTERP1_PEEK_LANE0 = 0x0e0; // Read LANE0 result, without altering any internal state (PEEK)
60
- const INTERP1_PEEK_LANE1 = 0x0e4; // Read LANE1 result, without altering any internal state (PEEK)
61
- const INTERP1_PEEK_FULL = 0x0e8; // Read FULL result, without altering any internal state (PEEK)
62
- const INTERP1_CTRL_LANE0 = 0x0ec; // Control register for lane 0
63
- const INTERP1_CTRL_LANE1 = 0x0f0; // Control register for lane 1
64
- const INTERP1_ACCUM0_ADD = 0x0f4; // Values written here are atomically added to ACCUM0
65
- const INTERP1_ACCUM1_ADD = 0x0f8; // Values written here are atomically added to ACCUM1
66
- const INTERP1_BASE_1AND0 = 0x0fc; // On write, the lower 16 bits go to BASE0, upper bits to BASE1 simultaneously
67
- //SPINLOCK
68
- const SPINLOCK_ST = 0x5c;
69
- const SPINLOCK0 = 0x100;
70
- const SPINLOCK31 = 0x17c;
71
- class RPSIO {
72
- constructor(rp2040) {
73
- this.rp2040 = rp2040;
74
- this.gpioValue = 0;
75
- this.gpioOutputEnable = 0;
76
- this.qspiGpioValue = 0;
77
- this.qspiGpioOutputEnable = 0;
78
- this.divDividend = 0;
79
- this.divDivisor = 1;
80
- this.divQuotient = 0;
81
- this.divRemainder = 0;
82
- this.divCSR = 0;
83
- this.spinLock = 0;
84
- this.interp0 = new interpolator_1.Interpolator(0);
85
- this.interp1 = new interpolator_1.Interpolator(1);
86
- }
87
- updateHardwareDivider(signed) {
88
- if (this.divDivisor == 0) {
89
- this.divQuotient = this.divDividend > 0 ? -1 : 1;
90
- this.divRemainder = this.divDividend;
91
- }
92
- else {
93
- if (signed) {
94
- this.divQuotient = (this.divDividend | 0) / (this.divDivisor | 0);
95
- this.divRemainder = (this.divDividend | 0) % (this.divDivisor | 0);
96
- }
97
- else {
98
- this.divQuotient = (this.divDividend >>> 0) / (this.divDivisor >>> 0);
99
- this.divRemainder = (this.divDividend >>> 0) % (this.divDivisor >>> 0);
100
- }
101
- }
102
- this.divCSR = 0b11;
103
- this.rp2040.core.cycles += 8;
104
- }
105
- readUint32(offset) {
106
- if (offset >= SPINLOCK0 && offset <= SPINLOCK31) {
107
- const bitIndexMask = 1 << ((offset - SPINLOCK0) / 4);
108
- if (this.spinLock & bitIndexMask) {
109
- return 0;
110
- }
111
- else {
112
- this.spinLock |= bitIndexMask;
113
- return bitIndexMask;
114
- }
115
- }
116
- switch (offset) {
117
- case GPIO_IN:
118
- return this.rp2040.gpioValues;
119
- case GPIO_HI_IN: {
120
- const { qspi } = this.rp2040;
121
- let result = 0;
122
- for (let qspiIndex = 0; qspiIndex < qspi.length; qspiIndex++) {
123
- if (qspi[qspiIndex].inputValue) {
124
- result |= 1 << qspiIndex;
125
- }
126
- }
127
- return result;
128
- }
129
- case GPIO_OUT:
130
- return this.gpioValue;
131
- case GPIO_OE:
132
- return this.gpioOutputEnable;
133
- case GPIO_HI_OUT:
134
- return this.qspiGpioValue;
135
- case GPIO_HI_OE:
136
- return this.qspiGpioOutputEnable;
137
- case GPIO_OUT_SET:
138
- case GPIO_OUT_CLR:
139
- case GPIO_OUT_XOR:
140
- case GPIO_OE_SET:
141
- case GPIO_OE_CLR:
142
- case GPIO_OE_XOR:
143
- case GPIO_HI_OUT_SET:
144
- case GPIO_HI_OUT_CLR:
145
- case GPIO_HI_OUT_XOR:
146
- case GPIO_HI_OE_SET:
147
- case GPIO_HI_OE_CLR:
148
- case GPIO_HI_OE_XOR:
149
- return 0; // TODO verify with silicone
150
- case CPUID:
151
- // Returns the current CPU core id (always 0 for now)
152
- return 0;
153
- case SPINLOCK_ST:
154
- return this.spinLock;
155
- case DIV_UDIVIDEND:
156
- return this.divDividend;
157
- case DIV_SDIVIDEND:
158
- return this.divDividend;
159
- case DIV_UDIVISOR:
160
- return this.divDivisor;
161
- case DIV_SDIVISOR:
162
- return this.divDivisor;
163
- case DIV_QUOTIENT:
164
- this.divCSR &= ~0b10;
165
- return this.divQuotient;
166
- case DIV_REMAINDER:
167
- return this.divRemainder;
168
- case DIV_CSR:
169
- return this.divCSR;
170
- case INTERP0_ACCUM0:
171
- return this.interp0.accum0;
172
- case INTERP0_ACCUM1:
173
- return this.interp0.accum1;
174
- case INTERP0_BASE0:
175
- return this.interp0.base0;
176
- case INTERP0_BASE1:
177
- return this.interp0.base1;
178
- case INTERP0_BASE2:
179
- return this.interp0.base2;
180
- case INTERP0_CTRL_LANE0:
181
- return this.interp0.ctrl0;
182
- case INTERP0_CTRL_LANE1:
183
- return this.interp0.ctrl1;
184
- case INTERP0_PEEK_LANE0:
185
- return this.interp0.result0;
186
- case INTERP0_PEEK_LANE1:
187
- return this.interp0.result1;
188
- case INTERP0_PEEK_FULL:
189
- return this.interp0.result2;
190
- case INTERP0_POP_LANE0: {
191
- const value = this.interp0.result0;
192
- this.interp0.writeback();
193
- return value;
194
- }
195
- case INTERP0_POP_LANE1: {
196
- const value = this.interp0.result1;
197
- this.interp0.writeback();
198
- return value;
199
- }
200
- case INTERP0_POP_FULL: {
201
- const value = this.interp0.result2;
202
- this.interp0.writeback();
203
- return value;
204
- }
205
- case INTERP0_ACCUM0_ADD:
206
- return this.interp0.smresult0;
207
- case INTERP0_ACCUM1_ADD:
208
- return this.interp0.smresult1;
209
- case INTERP1_ACCUM0:
210
- return this.interp1.accum0;
211
- case INTERP1_ACCUM1:
212
- return this.interp1.accum1;
213
- case INTERP1_BASE0:
214
- return this.interp1.base0;
215
- case INTERP1_BASE1:
216
- return this.interp1.base1;
217
- case INTERP1_BASE2:
218
- return this.interp1.base2;
219
- case INTERP1_CTRL_LANE0:
220
- return this.interp1.ctrl0;
221
- case INTERP1_CTRL_LANE1:
222
- return this.interp1.ctrl1;
223
- case INTERP1_PEEK_LANE0:
224
- return this.interp1.result0;
225
- case INTERP1_PEEK_LANE1:
226
- return this.interp1.result1;
227
- case INTERP1_PEEK_FULL:
228
- return this.interp1.result2;
229
- case INTERP1_POP_LANE0: {
230
- const value = this.interp1.result0;
231
- this.interp1.writeback();
232
- return value;
233
- }
234
- case INTERP1_POP_LANE1: {
235
- const value = this.interp1.result1;
236
- this.interp1.writeback();
237
- return value;
238
- }
239
- case INTERP1_POP_FULL: {
240
- const value = this.interp1.result2;
241
- this.interp1.writeback();
242
- return value;
243
- }
244
- case INTERP1_ACCUM0_ADD:
245
- return this.interp1.smresult0;
246
- case INTERP1_ACCUM1_ADD:
247
- return this.interp1.smresult1;
248
- }
249
- console.warn(`Read from invalid SIO address: ${offset.toString(16)}`);
250
- return 0xffffffff;
251
- }
252
- writeUint32(offset, value) {
253
- if (offset >= SPINLOCK0 && offset <= SPINLOCK31) {
254
- const bitIndexMask = ~(1 << ((offset - SPINLOCK0) / 4));
255
- this.spinLock &= bitIndexMask;
256
- return;
257
- }
258
- const prevGpioValue = this.gpioValue;
259
- const prevGpioOutputEnable = this.gpioOutputEnable;
260
- switch (offset) {
261
- case GPIO_OUT:
262
- this.gpioValue = value & GPIO_MASK;
263
- break;
264
- case GPIO_OUT_SET:
265
- this.gpioValue |= value & GPIO_MASK;
266
- break;
267
- case GPIO_OUT_CLR:
268
- this.gpioValue &= ~value;
269
- break;
270
- case GPIO_OUT_XOR:
271
- this.gpioValue ^= value & GPIO_MASK;
272
- break;
273
- case GPIO_OE:
274
- this.gpioOutputEnable = value & GPIO_MASK;
275
- break;
276
- case GPIO_OE_SET:
277
- this.gpioOutputEnable |= value & GPIO_MASK;
278
- break;
279
- case GPIO_OE_CLR:
280
- this.gpioOutputEnable &= ~value;
281
- break;
282
- case GPIO_OE_XOR:
283
- this.gpioOutputEnable ^= value & GPIO_MASK;
284
- break;
285
- case GPIO_HI_OUT:
286
- this.qspiGpioValue = value & GPIO_MASK;
287
- break;
288
- case GPIO_HI_OUT_SET:
289
- this.qspiGpioValue |= value & GPIO_MASK;
290
- break;
291
- case GPIO_HI_OUT_CLR:
292
- this.qspiGpioValue &= ~value;
293
- break;
294
- case GPIO_HI_OUT_XOR:
295
- this.qspiGpioValue ^= value & GPIO_MASK;
296
- break;
297
- case GPIO_HI_OE:
298
- this.qspiGpioOutputEnable = value & GPIO_MASK;
299
- break;
300
- case GPIO_HI_OE_SET:
301
- this.qspiGpioOutputEnable |= value & GPIO_MASK;
302
- break;
303
- case GPIO_HI_OE_CLR:
304
- this.qspiGpioOutputEnable &= ~value;
305
- break;
306
- case GPIO_HI_OE_XOR:
307
- this.qspiGpioOutputEnable ^= value & GPIO_MASK;
308
- break;
309
- case DIV_UDIVIDEND:
310
- this.divDividend = value;
311
- this.updateHardwareDivider(false);
312
- break;
313
- case DIV_SDIVIDEND:
314
- this.divDividend = value;
315
- this.updateHardwareDivider(true);
316
- break;
317
- case DIV_UDIVISOR:
318
- this.divDivisor = value;
319
- this.updateHardwareDivider(false);
320
- break;
321
- case DIV_SDIVISOR:
322
- this.divDivisor = value;
323
- this.updateHardwareDivider(true);
324
- break;
325
- case DIV_QUOTIENT:
326
- this.divQuotient = value;
327
- this.divCSR = 0b11;
328
- break;
329
- case DIV_REMAINDER:
330
- this.divRemainder = value;
331
- this.divCSR = 0b11;
332
- break;
333
- case INTERP0_ACCUM0:
334
- this.interp0.accum0 = value;
335
- this.interp0.update();
336
- break;
337
- case INTERP0_ACCUM1:
338
- this.interp0.accum1 = value;
339
- this.interp0.update();
340
- break;
341
- case INTERP0_BASE0:
342
- this.interp0.base0 = value;
343
- this.interp0.update();
344
- break;
345
- case INTERP0_BASE1:
346
- this.interp0.base1 = value;
347
- this.interp0.update();
348
- break;
349
- case INTERP0_BASE2:
350
- this.interp0.base2 = value;
351
- this.interp0.update();
352
- break;
353
- case INTERP0_CTRL_LANE0:
354
- this.interp0.ctrl0 = value;
355
- this.interp0.update();
356
- break;
357
- case INTERP0_CTRL_LANE1:
358
- this.interp0.ctrl1 = value;
359
- this.interp0.update();
360
- break;
361
- case INTERP0_ACCUM0_ADD:
362
- this.interp0.accum0 += value;
363
- this.interp0.update();
364
- break;
365
- case INTERP0_ACCUM1_ADD:
366
- this.interp0.accum1 += value;
367
- this.interp0.update();
368
- break;
369
- case INTERP0_BASE_1AND0:
370
- this.interp0.setBase01(value);
371
- break;
372
- case INTERP1_ACCUM0:
373
- this.interp1.accum0 = value;
374
- this.interp1.update();
375
- break;
376
- case INTERP1_ACCUM1:
377
- this.interp1.accum1 = value;
378
- this.interp1.update();
379
- break;
380
- case INTERP1_BASE0:
381
- this.interp1.base0 = value;
382
- this.interp1.update();
383
- break;
384
- case INTERP1_BASE1:
385
- this.interp1.base1 = value;
386
- this.interp1.update();
387
- break;
388
- case INTERP1_BASE2:
389
- this.interp1.base2 = value;
390
- this.interp1.update();
391
- break;
392
- case INTERP1_CTRL_LANE0:
393
- this.interp1.ctrl0 = value;
394
- this.interp1.update();
395
- break;
396
- case INTERP1_CTRL_LANE1:
397
- this.interp1.ctrl1 = value;
398
- this.interp1.update();
399
- break;
400
- case INTERP1_ACCUM0_ADD:
401
- this.interp1.accum0 += value;
402
- this.interp1.update();
403
- break;
404
- case INTERP1_ACCUM1_ADD:
405
- this.interp1.accum1 += value;
406
- this.interp1.update();
407
- break;
408
- case INTERP1_BASE_1AND0:
409
- this.interp1.setBase01(value);
410
- break;
411
- default:
412
- console.warn(`Write to invalid SIO address: ${offset.toString(16)}, value=${value.toString(16)}`);
413
- }
414
- const pinsToUpdate = (this.gpioValue ^ prevGpioValue) | (this.gpioOutputEnable ^ prevGpioOutputEnable);
415
- if (pinsToUpdate) {
416
- const { gpio } = this.rp2040;
417
- for (let gpioIndex = 0; gpioIndex < gpio.length; gpioIndex++) {
418
- if (pinsToUpdate & (1 << gpioIndex)) {
419
- gpio[gpioIndex].checkForUpdates();
420
- }
421
- }
422
- }
423
- }
424
- }
425
- exports.RPSIO = RPSIO;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RPSIO = void 0;
4
+ const interpolator_js_1 = require("./interpolator.js");
5
+ const CPUID = 0x000;
6
+ // GPIO
7
+ const GPIO_IN = 0x004; // Input value for GPIO pins
8
+ const GPIO_HI_IN = 0x008; // Input value for QSPI pins
9
+ const GPIO_OUT = 0x010; // GPIO output value
10
+ const GPIO_OUT_SET = 0x014; // GPIO output value set
11
+ const GPIO_OUT_CLR = 0x018; // GPIO output value clear
12
+ const GPIO_OUT_XOR = 0x01c; // GPIO output value XOR
13
+ const GPIO_OE = 0x020; // GPIO output enable
14
+ const GPIO_OE_SET = 0x024; // GPIO output enable set
15
+ const GPIO_OE_CLR = 0x028; // GPIO output enable clear
16
+ const GPIO_OE_XOR = 0x02c; // GPIO output enable XOR
17
+ const GPIO_HI_OUT = 0x030; // QSPI output value
18
+ const GPIO_HI_OUT_SET = 0x034; // QSPI output value set
19
+ const GPIO_HI_OUT_CLR = 0x038; // QSPI output value clear
20
+ const GPIO_HI_OUT_XOR = 0x03c; // QSPI output value XOR
21
+ const GPIO_HI_OE = 0x040; // QSPI output enable
22
+ const GPIO_HI_OE_SET = 0x044; // QSPI output enable set
23
+ const GPIO_HI_OE_CLR = 0x048; // QSPI output enable clear
24
+ const GPIO_HI_OE_XOR = 0x04c; // QSPI output enable XOR
25
+ const GPIO_MASK = 0x3fffffff;
26
+ //HARDWARE DIVIDER
27
+ const DIV_UDIVIDEND = 0x060; // Divider unsigned dividend
28
+ const DIV_UDIVISOR = 0x064; // Divider unsigned divisor
29
+ const DIV_SDIVIDEND = 0x068; // Divider signed dividend
30
+ const DIV_SDIVISOR = 0x06c; // Divider signed divisor
31
+ const DIV_QUOTIENT = 0x070; // Divider result quotient
32
+ const DIV_REMAINDER = 0x074; //Divider result remainder
33
+ const DIV_CSR = 0x078;
34
+ //INTERPOLATOR
35
+ const INTERP0_ACCUM0 = 0x080; // Read/write access to accumulator 0
36
+ const INTERP0_ACCUM1 = 0x084; // Read/write access to accumulator 1
37
+ const INTERP0_BASE0 = 0x088; // Read/write access to BASE0 register
38
+ const INTERP0_BASE1 = 0x08c; // Read/write access to BASE1 register
39
+ const INTERP0_BASE2 = 0x090; // Read/write access to BASE2 register
40
+ const INTERP0_POP_LANE0 = 0x094; // Read LANE0 result, and simultaneously write lane results to both accumulators (POP)
41
+ const INTERP0_POP_LANE1 = 0x098; // Read LANE1 result, and simultaneously write lane results to both accumulators (POP)
42
+ const INTERP0_POP_FULL = 0x09c; // Read FULL result, and simultaneously write lane results to both accumulators (POP)
43
+ const INTERP0_PEEK_LANE0 = 0x0a0; // Read LANE0 result, without altering any internal state (PEEK)
44
+ const INTERP0_PEEK_LANE1 = 0x0a4; // Read LANE1 result, without altering any internal state (PEEK)
45
+ const INTERP0_PEEK_FULL = 0x0a8; // Read FULL result, without altering any internal state (PEEK)
46
+ const INTERP0_CTRL_LANE0 = 0x0ac; // Control register for lane 0
47
+ const INTERP0_CTRL_LANE1 = 0x0b0; // Control register for lane 1
48
+ const INTERP0_ACCUM0_ADD = 0x0b4; // Values written here are atomically added to ACCUM0
49
+ const INTERP0_ACCUM1_ADD = 0x0b8; // Values written here are atomically added to ACCUM1
50
+ const INTERP0_BASE_1AND0 = 0x0bc; // On write, the lower 16 bits go to BASE0, upper bits to BASE1 simultaneously
51
+ const INTERP1_ACCUM0 = 0x0c0; // Read/write access to accumulator 0
52
+ const INTERP1_ACCUM1 = 0x0c4; // Read/write access to accumulator 1
53
+ const INTERP1_BASE0 = 0x0c8; // Read/write access to BASE0 register
54
+ const INTERP1_BASE1 = 0x0cc; // Read/write access to BASE1 register
55
+ const INTERP1_BASE2 = 0x0d0; // Read/write access to BASE2 register
56
+ const INTERP1_POP_LANE0 = 0x0d4; // Read LANE0 result, and simultaneously write lane results to both accumulators (POP)
57
+ const INTERP1_POP_LANE1 = 0x0d8; // Read LANE1 result, and simultaneously write lane results to both accumulators (POP)
58
+ const INTERP1_POP_FULL = 0x0dc; // Read FULL result, and simultaneously write lane results to both accumulators (POP)
59
+ const INTERP1_PEEK_LANE0 = 0x0e0; // Read LANE0 result, without altering any internal state (PEEK)
60
+ const INTERP1_PEEK_LANE1 = 0x0e4; // Read LANE1 result, without altering any internal state (PEEK)
61
+ const INTERP1_PEEK_FULL = 0x0e8; // Read FULL result, without altering any internal state (PEEK)
62
+ const INTERP1_CTRL_LANE0 = 0x0ec; // Control register for lane 0
63
+ const INTERP1_CTRL_LANE1 = 0x0f0; // Control register for lane 1
64
+ const INTERP1_ACCUM0_ADD = 0x0f4; // Values written here are atomically added to ACCUM0
65
+ const INTERP1_ACCUM1_ADD = 0x0f8; // Values written here are atomically added to ACCUM1
66
+ const INTERP1_BASE_1AND0 = 0x0fc; // On write, the lower 16 bits go to BASE0, upper bits to BASE1 simultaneously
67
+ //SPINLOCK
68
+ const SPINLOCK_ST = 0x5c;
69
+ const SPINLOCK0 = 0x100;
70
+ const SPINLOCK31 = 0x17c;
71
+ class RPSIO {
72
+ constructor(rp2040) {
73
+ this.rp2040 = rp2040;
74
+ this.gpioValue = 0;
75
+ this.gpioOutputEnable = 0;
76
+ this.qspiGpioValue = 0;
77
+ this.qspiGpioOutputEnable = 0;
78
+ this.divDividend = 0;
79
+ this.divDivisor = 1;
80
+ this.divQuotient = 0;
81
+ this.divRemainder = 0;
82
+ this.divCSR = 0;
83
+ this.spinLock = 0;
84
+ this.interp0 = new interpolator_js_1.Interpolator(0);
85
+ this.interp1 = new interpolator_js_1.Interpolator(1);
86
+ }
87
+ updateHardwareDivider(signed) {
88
+ if (this.divDivisor == 0) {
89
+ this.divQuotient = this.divDividend > 0 ? -1 : 1;
90
+ this.divRemainder = this.divDividend;
91
+ }
92
+ else {
93
+ if (signed) {
94
+ this.divQuotient = (this.divDividend | 0) / (this.divDivisor | 0);
95
+ this.divRemainder = (this.divDividend | 0) % (this.divDivisor | 0);
96
+ }
97
+ else {
98
+ this.divQuotient = (this.divDividend >>> 0) / (this.divDivisor >>> 0);
99
+ this.divRemainder = (this.divDividend >>> 0) % (this.divDivisor >>> 0);
100
+ }
101
+ }
102
+ this.divCSR = 0b11;
103
+ this.rp2040.core.cycles += 8;
104
+ }
105
+ readUint32(offset) {
106
+ if (offset >= SPINLOCK0 && offset <= SPINLOCK31) {
107
+ const bitIndexMask = 1 << ((offset - SPINLOCK0) / 4);
108
+ if (this.spinLock & bitIndexMask) {
109
+ return 0;
110
+ }
111
+ else {
112
+ this.spinLock |= bitIndexMask;
113
+ return bitIndexMask;
114
+ }
115
+ }
116
+ switch (offset) {
117
+ case GPIO_IN:
118
+ return this.rp2040.gpioValues;
119
+ case GPIO_HI_IN: {
120
+ const { qspi } = this.rp2040;
121
+ let result = 0;
122
+ for (let qspiIndex = 0; qspiIndex < qspi.length; qspiIndex++) {
123
+ if (qspi[qspiIndex].inputValue) {
124
+ result |= 1 << qspiIndex;
125
+ }
126
+ }
127
+ return result;
128
+ }
129
+ case GPIO_OUT:
130
+ return this.gpioValue;
131
+ case GPIO_OE:
132
+ return this.gpioOutputEnable;
133
+ case GPIO_HI_OUT:
134
+ return this.qspiGpioValue;
135
+ case GPIO_HI_OE:
136
+ return this.qspiGpioOutputEnable;
137
+ case GPIO_OUT_SET:
138
+ case GPIO_OUT_CLR:
139
+ case GPIO_OUT_XOR:
140
+ case GPIO_OE_SET:
141
+ case GPIO_OE_CLR:
142
+ case GPIO_OE_XOR:
143
+ case GPIO_HI_OUT_SET:
144
+ case GPIO_HI_OUT_CLR:
145
+ case GPIO_HI_OUT_XOR:
146
+ case GPIO_HI_OE_SET:
147
+ case GPIO_HI_OE_CLR:
148
+ case GPIO_HI_OE_XOR:
149
+ return 0; // TODO verify with silicone
150
+ case CPUID:
151
+ // Returns the current CPU core id (always 0 for now)
152
+ return 0;
153
+ case SPINLOCK_ST:
154
+ return this.spinLock;
155
+ case DIV_UDIVIDEND:
156
+ return this.divDividend;
157
+ case DIV_SDIVIDEND:
158
+ return this.divDividend;
159
+ case DIV_UDIVISOR:
160
+ return this.divDivisor;
161
+ case DIV_SDIVISOR:
162
+ return this.divDivisor;
163
+ case DIV_QUOTIENT:
164
+ this.divCSR &= ~0b10;
165
+ return this.divQuotient;
166
+ case DIV_REMAINDER:
167
+ return this.divRemainder;
168
+ case DIV_CSR:
169
+ return this.divCSR;
170
+ case INTERP0_ACCUM0:
171
+ return this.interp0.accum0;
172
+ case INTERP0_ACCUM1:
173
+ return this.interp0.accum1;
174
+ case INTERP0_BASE0:
175
+ return this.interp0.base0;
176
+ case INTERP0_BASE1:
177
+ return this.interp0.base1;
178
+ case INTERP0_BASE2:
179
+ return this.interp0.base2;
180
+ case INTERP0_CTRL_LANE0:
181
+ return this.interp0.ctrl0;
182
+ case INTERP0_CTRL_LANE1:
183
+ return this.interp0.ctrl1;
184
+ case INTERP0_PEEK_LANE0:
185
+ return this.interp0.result0;
186
+ case INTERP0_PEEK_LANE1:
187
+ return this.interp0.result1;
188
+ case INTERP0_PEEK_FULL:
189
+ return this.interp0.result2;
190
+ case INTERP0_POP_LANE0: {
191
+ const value = this.interp0.result0;
192
+ this.interp0.writeback();
193
+ return value;
194
+ }
195
+ case INTERP0_POP_LANE1: {
196
+ const value = this.interp0.result1;
197
+ this.interp0.writeback();
198
+ return value;
199
+ }
200
+ case INTERP0_POP_FULL: {
201
+ const value = this.interp0.result2;
202
+ this.interp0.writeback();
203
+ return value;
204
+ }
205
+ case INTERP0_ACCUM0_ADD:
206
+ return this.interp0.smresult0;
207
+ case INTERP0_ACCUM1_ADD:
208
+ return this.interp0.smresult1;
209
+ case INTERP1_ACCUM0:
210
+ return this.interp1.accum0;
211
+ case INTERP1_ACCUM1:
212
+ return this.interp1.accum1;
213
+ case INTERP1_BASE0:
214
+ return this.interp1.base0;
215
+ case INTERP1_BASE1:
216
+ return this.interp1.base1;
217
+ case INTERP1_BASE2:
218
+ return this.interp1.base2;
219
+ case INTERP1_CTRL_LANE0:
220
+ return this.interp1.ctrl0;
221
+ case INTERP1_CTRL_LANE1:
222
+ return this.interp1.ctrl1;
223
+ case INTERP1_PEEK_LANE0:
224
+ return this.interp1.result0;
225
+ case INTERP1_PEEK_LANE1:
226
+ return this.interp1.result1;
227
+ case INTERP1_PEEK_FULL:
228
+ return this.interp1.result2;
229
+ case INTERP1_POP_LANE0: {
230
+ const value = this.interp1.result0;
231
+ this.interp1.writeback();
232
+ return value;
233
+ }
234
+ case INTERP1_POP_LANE1: {
235
+ const value = this.interp1.result1;
236
+ this.interp1.writeback();
237
+ return value;
238
+ }
239
+ case INTERP1_POP_FULL: {
240
+ const value = this.interp1.result2;
241
+ this.interp1.writeback();
242
+ return value;
243
+ }
244
+ case INTERP1_ACCUM0_ADD:
245
+ return this.interp1.smresult0;
246
+ case INTERP1_ACCUM1_ADD:
247
+ return this.interp1.smresult1;
248
+ }
249
+ console.warn(`Read from invalid SIO address: ${offset.toString(16)}`);
250
+ return 0xffffffff;
251
+ }
252
+ writeUint32(offset, value) {
253
+ if (offset >= SPINLOCK0 && offset <= SPINLOCK31) {
254
+ const bitIndexMask = ~(1 << ((offset - SPINLOCK0) / 4));
255
+ this.spinLock &= bitIndexMask;
256
+ return;
257
+ }
258
+ const prevGpioValue = this.gpioValue;
259
+ const prevGpioOutputEnable = this.gpioOutputEnable;
260
+ switch (offset) {
261
+ case GPIO_OUT:
262
+ this.gpioValue = value & GPIO_MASK;
263
+ break;
264
+ case GPIO_OUT_SET:
265
+ this.gpioValue |= value & GPIO_MASK;
266
+ break;
267
+ case GPIO_OUT_CLR:
268
+ this.gpioValue &= ~value;
269
+ break;
270
+ case GPIO_OUT_XOR:
271
+ this.gpioValue ^= value & GPIO_MASK;
272
+ break;
273
+ case GPIO_OE:
274
+ this.gpioOutputEnable = value & GPIO_MASK;
275
+ break;
276
+ case GPIO_OE_SET:
277
+ this.gpioOutputEnable |= value & GPIO_MASK;
278
+ break;
279
+ case GPIO_OE_CLR:
280
+ this.gpioOutputEnable &= ~value;
281
+ break;
282
+ case GPIO_OE_XOR:
283
+ this.gpioOutputEnable ^= value & GPIO_MASK;
284
+ break;
285
+ case GPIO_HI_OUT:
286
+ this.qspiGpioValue = value & GPIO_MASK;
287
+ break;
288
+ case GPIO_HI_OUT_SET:
289
+ this.qspiGpioValue |= value & GPIO_MASK;
290
+ break;
291
+ case GPIO_HI_OUT_CLR:
292
+ this.qspiGpioValue &= ~value;
293
+ break;
294
+ case GPIO_HI_OUT_XOR:
295
+ this.qspiGpioValue ^= value & GPIO_MASK;
296
+ break;
297
+ case GPIO_HI_OE:
298
+ this.qspiGpioOutputEnable = value & GPIO_MASK;
299
+ break;
300
+ case GPIO_HI_OE_SET:
301
+ this.qspiGpioOutputEnable |= value & GPIO_MASK;
302
+ break;
303
+ case GPIO_HI_OE_CLR:
304
+ this.qspiGpioOutputEnable &= ~value;
305
+ break;
306
+ case GPIO_HI_OE_XOR:
307
+ this.qspiGpioOutputEnable ^= value & GPIO_MASK;
308
+ break;
309
+ case DIV_UDIVIDEND:
310
+ this.divDividend = value;
311
+ this.updateHardwareDivider(false);
312
+ break;
313
+ case DIV_SDIVIDEND:
314
+ this.divDividend = value;
315
+ this.updateHardwareDivider(true);
316
+ break;
317
+ case DIV_UDIVISOR:
318
+ this.divDivisor = value;
319
+ this.updateHardwareDivider(false);
320
+ break;
321
+ case DIV_SDIVISOR:
322
+ this.divDivisor = value;
323
+ this.updateHardwareDivider(true);
324
+ break;
325
+ case DIV_QUOTIENT:
326
+ this.divQuotient = value;
327
+ this.divCSR = 0b11;
328
+ break;
329
+ case DIV_REMAINDER:
330
+ this.divRemainder = value;
331
+ this.divCSR = 0b11;
332
+ break;
333
+ case INTERP0_ACCUM0:
334
+ this.interp0.accum0 = value;
335
+ this.interp0.update();
336
+ break;
337
+ case INTERP0_ACCUM1:
338
+ this.interp0.accum1 = value;
339
+ this.interp0.update();
340
+ break;
341
+ case INTERP0_BASE0:
342
+ this.interp0.base0 = value;
343
+ this.interp0.update();
344
+ break;
345
+ case INTERP0_BASE1:
346
+ this.interp0.base1 = value;
347
+ this.interp0.update();
348
+ break;
349
+ case INTERP0_BASE2:
350
+ this.interp0.base2 = value;
351
+ this.interp0.update();
352
+ break;
353
+ case INTERP0_CTRL_LANE0:
354
+ this.interp0.ctrl0 = value;
355
+ this.interp0.update();
356
+ break;
357
+ case INTERP0_CTRL_LANE1:
358
+ this.interp0.ctrl1 = value;
359
+ this.interp0.update();
360
+ break;
361
+ case INTERP0_ACCUM0_ADD:
362
+ this.interp0.accum0 += value;
363
+ this.interp0.update();
364
+ break;
365
+ case INTERP0_ACCUM1_ADD:
366
+ this.interp0.accum1 += value;
367
+ this.interp0.update();
368
+ break;
369
+ case INTERP0_BASE_1AND0:
370
+ this.interp0.setBase01(value);
371
+ break;
372
+ case INTERP1_ACCUM0:
373
+ this.interp1.accum0 = value;
374
+ this.interp1.update();
375
+ break;
376
+ case INTERP1_ACCUM1:
377
+ this.interp1.accum1 = value;
378
+ this.interp1.update();
379
+ break;
380
+ case INTERP1_BASE0:
381
+ this.interp1.base0 = value;
382
+ this.interp1.update();
383
+ break;
384
+ case INTERP1_BASE1:
385
+ this.interp1.base1 = value;
386
+ this.interp1.update();
387
+ break;
388
+ case INTERP1_BASE2:
389
+ this.interp1.base2 = value;
390
+ this.interp1.update();
391
+ break;
392
+ case INTERP1_CTRL_LANE0:
393
+ this.interp1.ctrl0 = value;
394
+ this.interp1.update();
395
+ break;
396
+ case INTERP1_CTRL_LANE1:
397
+ this.interp1.ctrl1 = value;
398
+ this.interp1.update();
399
+ break;
400
+ case INTERP1_ACCUM0_ADD:
401
+ this.interp1.accum0 += value;
402
+ this.interp1.update();
403
+ break;
404
+ case INTERP1_ACCUM1_ADD:
405
+ this.interp1.accum1 += value;
406
+ this.interp1.update();
407
+ break;
408
+ case INTERP1_BASE_1AND0:
409
+ this.interp1.setBase01(value);
410
+ break;
411
+ default:
412
+ console.warn(`Write to invalid SIO address: ${offset.toString(16)}, value=${value.toString(16)}`);
413
+ }
414
+ const pinsToUpdate = (this.gpioValue ^ prevGpioValue) | (this.gpioOutputEnable ^ prevGpioOutputEnable);
415
+ if (pinsToUpdate) {
416
+ const { gpio } = this.rp2040;
417
+ for (let gpioIndex = 0; gpioIndex < gpio.length; gpioIndex++) {
418
+ if (pinsToUpdate & (1 << gpioIndex)) {
419
+ gpio[gpioIndex].checkForUpdates();
420
+ }
421
+ }
422
+ }
423
+ }
424
+ }
425
+ exports.RPSIO = RPSIO;