rp2040js 0.17.16 → 0.18.0

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 (183) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/clock/clock.d.ts +11 -11
  3. package/dist/cjs/clock/clock.js +2 -2
  4. package/dist/cjs/clock/mock-clock.d.ts +17 -17
  5. package/dist/cjs/clock/mock-clock.js +52 -52
  6. package/dist/cjs/clock/realtime-clock.d.ts +23 -23
  7. package/dist/cjs/clock/realtime-clock.js +73 -73
  8. package/dist/cjs/cortex-m0-core.d.ts +87 -87
  9. package/dist/cjs/cortex-m0-core.js +1251 -1251
  10. package/dist/cjs/gdb/gdb-connection.d.ts +11 -11
  11. package/dist/cjs/gdb/gdb-connection.js +57 -57
  12. package/dist/cjs/gdb/gdb-server.d.ts +23 -23
  13. package/dist/cjs/gdb/gdb-server.js +232 -232
  14. package/dist/cjs/gdb/gdb-tcp-server.d.ts +10 -10
  15. package/dist/cjs/gdb/gdb-tcp-server.js +34 -34
  16. package/dist/cjs/gdb/gdb-utils.d.ts +9 -9
  17. package/dist/cjs/gdb/gdb-utils.js +48 -48
  18. package/dist/cjs/gpio-pin.d.ts +56 -56
  19. package/dist/cjs/gpio-pin.js +216 -216
  20. package/dist/cjs/index.d.ts +11 -11
  21. package/dist/cjs/index.js +36 -36
  22. package/dist/cjs/interpolator.d.ts +36 -36
  23. package/dist/cjs/interpolator.js +150 -150
  24. package/dist/cjs/irq.d.ts +29 -29
  25. package/dist/cjs/irq.js +33 -33
  26. package/dist/cjs/peripherals/adc.d.ts +52 -52
  27. package/dist/cjs/peripherals/adc.js +261 -261
  28. package/dist/cjs/peripherals/busctrl.d.ts +10 -10
  29. package/dist/cjs/peripherals/busctrl.js +84 -84
  30. package/dist/cjs/peripherals/clocks.d.ts +9 -9
  31. package/dist/cjs/peripherals/clocks.js +42 -42
  32. package/dist/cjs/peripherals/dma.d.ts +109 -109
  33. package/dist/cjs/peripherals/dma.js +520 -520
  34. package/dist/cjs/peripherals/i2c.d.ts +54 -54
  35. package/dist/cjs/peripherals/i2c.js +458 -458
  36. package/dist/cjs/peripherals/io.d.ts +11 -11
  37. package/dist/cjs/peripherals/io.js +100 -100
  38. package/dist/cjs/peripherals/pads.d.ts +13 -13
  39. package/dist/cjs/peripherals/pads.js +58 -58
  40. package/dist/cjs/peripherals/peripheral.d.ts +22 -22
  41. package/dist/cjs/peripherals/peripheral.js +61 -61
  42. package/dist/cjs/peripherals/pio.d.ts +120 -120
  43. package/dist/cjs/peripherals/pio.js +1086 -1086
  44. package/dist/cjs/peripherals/ppb.d.ts +25 -25
  45. package/dist/cjs/peripherals/ppb.js +229 -229
  46. package/dist/cjs/peripherals/pwm.d.ts +65 -65
  47. package/dist/cjs/peripherals/pwm.js +372 -372
  48. package/dist/cjs/peripherals/reset.d.ts +8 -8
  49. package/dist/cjs/peripherals/reset.js +40 -40
  50. package/dist/cjs/peripherals/rtc.d.ts +10 -10
  51. package/dist/cjs/peripherals/rtc.js +74 -74
  52. package/dist/cjs/peripherals/spi.d.ts +38 -30
  53. package/dist/cjs/peripherals/spi.js +240 -218
  54. package/dist/cjs/peripherals/ssi.d.ts +6 -6
  55. package/dist/cjs/peripherals/ssi.js +43 -43
  56. package/dist/cjs/peripherals/syscfg.d.ts +5 -5
  57. package/dist/cjs/peripherals/syscfg.js +26 -26
  58. package/dist/cjs/peripherals/sysinfo.d.ts +4 -4
  59. package/dist/cjs/peripherals/sysinfo.js +22 -22
  60. package/dist/cjs/peripherals/tbman.d.ts +4 -4
  61. package/dist/cjs/peripherals/tbman.js +17 -17
  62. package/dist/cjs/peripherals/timer.d.ts +18 -18
  63. package/dist/cjs/peripherals/timer.js +156 -156
  64. package/dist/cjs/peripherals/uart.d.ts +31 -28
  65. package/dist/cjs/peripherals/uart.js +132 -135
  66. package/dist/cjs/peripherals/usb.d.ts +29 -29
  67. package/dist/cjs/peripherals/usb.js +309 -309
  68. package/dist/cjs/rp2040.d.ts +71 -71
  69. package/dist/cjs/rp2040.js +361 -346
  70. package/dist/cjs/sio.d.ts +21 -21
  71. package/dist/cjs/sio.js +425 -425
  72. package/dist/cjs/usb/cdc.d.ts +20 -20
  73. package/dist/cjs/usb/cdc.js +126 -126
  74. package/dist/cjs/usb/interfaces.d.ts +47 -47
  75. package/dist/cjs/usb/interfaces.js +46 -46
  76. package/dist/cjs/usb/setup.d.ts +5 -5
  77. package/dist/cjs/usb/setup.js +53 -53
  78. package/dist/cjs/utils/assembler.d.ts +79 -79
  79. package/dist/cjs/utils/assembler.js +328 -328
  80. package/dist/cjs/utils/bit.d.ts +3 -3
  81. package/dist/cjs/utils/bit.js +15 -15
  82. package/dist/cjs/utils/fifo.d.ts +15 -15
  83. package/dist/cjs/utils/fifo.js +56 -56
  84. package/dist/cjs/utils/logging.d.ts +23 -23
  85. package/dist/cjs/utils/logging.js +48 -48
  86. package/dist/cjs/utils/pio-assembler.d.ts +45 -45
  87. package/dist/cjs/utils/pio-assembler.js +87 -87
  88. package/dist/cjs/utils/time.d.ts +2 -2
  89. package/dist/cjs/utils/time.js +32 -32
  90. package/dist/cjs/utils/timer32.d.ts +57 -57
  91. package/dist/cjs/utils/timer32.js +208 -208
  92. package/dist/esm/clock/clock.d.ts +11 -11
  93. package/dist/esm/clock/clock.js +1 -1
  94. package/dist/esm/clock/mock-clock.d.ts +17 -17
  95. package/dist/esm/clock/mock-clock.js +47 -47
  96. package/dist/esm/clock/realtime-clock.d.ts +23 -23
  97. package/dist/esm/clock/realtime-clock.js +68 -68
  98. package/dist/esm/cortex-m0-core.d.ts +87 -87
  99. package/dist/esm/cortex-m0-core.js +1247 -1247
  100. package/dist/esm/gdb/gdb-connection.d.ts +11 -11
  101. package/dist/esm/gdb/gdb-connection.js +53 -53
  102. package/dist/esm/gdb/gdb-server.d.ts +23 -23
  103. package/dist/esm/gdb/gdb-server.js +228 -228
  104. package/dist/esm/gdb/gdb-tcp-server.d.ts +10 -10
  105. package/dist/esm/gdb/gdb-tcp-server.js +30 -30
  106. package/dist/esm/gdb/gdb-utils.d.ts +9 -9
  107. package/dist/esm/gdb/gdb-utils.js +36 -36
  108. package/dist/esm/gpio-pin.d.ts +56 -56
  109. package/dist/esm/gpio-pin.js +212 -212
  110. package/dist/esm/index.d.ts +11 -11
  111. package/dist/esm/index.js +11 -11
  112. package/dist/esm/interpolator.d.ts +36 -36
  113. package/dist/esm/interpolator.js +145 -145
  114. package/dist/esm/irq.d.ts +29 -29
  115. package/dist/esm/irq.js +30 -30
  116. package/dist/esm/peripherals/adc.d.ts +52 -52
  117. package/dist/esm/peripherals/adc.js +257 -257
  118. package/dist/esm/peripherals/busctrl.d.ts +10 -10
  119. package/dist/esm/peripherals/busctrl.js +80 -80
  120. package/dist/esm/peripherals/clocks.d.ts +9 -9
  121. package/dist/esm/peripherals/clocks.js +38 -38
  122. package/dist/esm/peripherals/dma.d.ts +109 -109
  123. package/dist/esm/peripherals/dma.js +515 -515
  124. package/dist/esm/peripherals/i2c.d.ts +54 -54
  125. package/dist/esm/peripherals/i2c.js +454 -454
  126. package/dist/esm/peripherals/io.d.ts +11 -11
  127. package/dist/esm/peripherals/io.js +96 -96
  128. package/dist/esm/peripherals/pads.d.ts +13 -13
  129. package/dist/esm/peripherals/pads.js +54 -54
  130. package/dist/esm/peripherals/peripheral.d.ts +22 -22
  131. package/dist/esm/peripherals/peripheral.js +55 -55
  132. package/dist/esm/peripherals/pio.d.ts +120 -120
  133. package/dist/esm/peripherals/pio.js +1081 -1081
  134. package/dist/esm/peripherals/ppb.d.ts +25 -25
  135. package/dist/esm/peripherals/ppb.js +225 -225
  136. package/dist/esm/peripherals/pwm.d.ts +65 -65
  137. package/dist/esm/peripherals/pwm.js +368 -368
  138. package/dist/esm/peripherals/reset.d.ts +8 -8
  139. package/dist/esm/peripherals/reset.js +36 -36
  140. package/dist/esm/peripherals/rtc.d.ts +10 -10
  141. package/dist/esm/peripherals/rtc.js +70 -70
  142. package/dist/esm/peripherals/spi.d.ts +38 -30
  143. package/dist/esm/peripherals/spi.js +236 -214
  144. package/dist/esm/peripherals/ssi.d.ts +6 -6
  145. package/dist/esm/peripherals/ssi.js +39 -39
  146. package/dist/esm/peripherals/syscfg.d.ts +5 -5
  147. package/dist/esm/peripherals/syscfg.js +22 -22
  148. package/dist/esm/peripherals/sysinfo.d.ts +4 -4
  149. package/dist/esm/peripherals/sysinfo.js +18 -18
  150. package/dist/esm/peripherals/tbman.d.ts +4 -4
  151. package/dist/esm/peripherals/tbman.js +13 -13
  152. package/dist/esm/peripherals/timer.d.ts +18 -18
  153. package/dist/esm/peripherals/timer.js +152 -152
  154. package/dist/esm/peripherals/uart.d.ts +31 -28
  155. package/dist/esm/peripherals/uart.js +128 -131
  156. package/dist/esm/peripherals/usb.d.ts +29 -29
  157. package/dist/esm/peripherals/usb.js +305 -305
  158. package/dist/esm/rp2040.d.ts +71 -71
  159. package/dist/esm/rp2040.js +357 -342
  160. package/dist/esm/sio.d.ts +21 -21
  161. package/dist/esm/sio.js +421 -421
  162. package/dist/esm/usb/cdc.d.ts +20 -20
  163. package/dist/esm/usb/cdc.js +121 -121
  164. package/dist/esm/usb/interfaces.d.ts +47 -47
  165. package/dist/esm/usb/interfaces.js +43 -43
  166. package/dist/esm/usb/setup.d.ts +5 -5
  167. package/dist/esm/usb/setup.js +46 -46
  168. package/dist/esm/utils/assembler.d.ts +79 -79
  169. package/dist/esm/utils/assembler.js +245 -245
  170. package/dist/esm/utils/bit.d.ts +3 -3
  171. package/dist/esm/utils/bit.js +9 -9
  172. package/dist/esm/utils/fifo.d.ts +15 -15
  173. package/dist/esm/utils/fifo.js +52 -52
  174. package/dist/esm/utils/logging.d.ts +23 -23
  175. package/dist/esm/utils/logging.js +44 -44
  176. package/dist/esm/utils/pio-assembler.d.ts +45 -45
  177. package/dist/esm/utils/pio-assembler.js +75 -75
  178. package/dist/esm/utils/time.d.ts +2 -2
  179. package/dist/esm/utils/time.js +27 -27
  180. package/dist/esm/utils/timer32.d.ts +57 -57
  181. package/dist/esm/utils/timer32.js +203 -203
  182. package/package.json +34 -22
  183. package/dist/esm/package.json +0 -1
@@ -1,22 +1,22 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RP2040SysInfo = void 0;
4
- const peripheral_1 = require("./peripheral");
5
- const CHIP_ID = 0;
6
- const PLATFORM = 0x4;
7
- const GITREF_RP2040 = 0x40;
8
- class RP2040SysInfo extends peripheral_1.BasePeripheral {
9
- readUint32(offset) {
10
- // All the values here were verified against the silicon
11
- switch (offset) {
12
- case CHIP_ID:
13
- return 0x10002927;
14
- case PLATFORM:
15
- return 0x00000002;
16
- case GITREF_RP2040:
17
- return 0xe0c912e8;
18
- }
19
- return super.readUint32(offset);
20
- }
21
- }
22
- exports.RP2040SysInfo = RP2040SysInfo;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RP2040SysInfo = void 0;
4
+ const peripheral_js_1 = require("./peripheral.js");
5
+ const CHIP_ID = 0;
6
+ const PLATFORM = 0x4;
7
+ const GITREF_RP2040 = 0x40;
8
+ class RP2040SysInfo extends peripheral_js_1.BasePeripheral {
9
+ readUint32(offset) {
10
+ // All the values here were verified against the silicon
11
+ switch (offset) {
12
+ case CHIP_ID:
13
+ return 0x10002927;
14
+ case PLATFORM:
15
+ return 0x00000002;
16
+ case GITREF_RP2040:
17
+ return 0xe0c912e8;
18
+ }
19
+ return super.readUint32(offset);
20
+ }
21
+ }
22
+ exports.RP2040SysInfo = RP2040SysInfo;
@@ -1,4 +1,4 @@
1
- import { BasePeripheral, Peripheral } from './peripheral';
2
- export declare class RPTBMAN extends BasePeripheral implements Peripheral {
3
- readUint32(offset: number): number;
4
- }
1
+ import { BasePeripheral, Peripheral } from './peripheral.js';
2
+ export declare class RPTBMAN extends BasePeripheral implements Peripheral {
3
+ readUint32(offset: number): number;
4
+ }
@@ -1,17 +1,17 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RPTBMAN = void 0;
4
- const peripheral_1 = require("./peripheral");
5
- const PLATFORM = 0;
6
- const ASIC = 1;
7
- class RPTBMAN extends peripheral_1.BasePeripheral {
8
- readUint32(offset) {
9
- switch (offset) {
10
- case PLATFORM:
11
- return ASIC;
12
- default:
13
- return super.readUint32(offset);
14
- }
15
- }
16
- }
17
- exports.RPTBMAN = RPTBMAN;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RPTBMAN = void 0;
4
+ const peripheral_js_1 = require("./peripheral.js");
5
+ const PLATFORM = 0;
6
+ const ASIC = 1;
7
+ class RPTBMAN extends peripheral_js_1.BasePeripheral {
8
+ readUint32(offset) {
9
+ switch (offset) {
10
+ case PLATFORM:
11
+ return ASIC;
12
+ default:
13
+ return super.readUint32(offset);
14
+ }
15
+ }
16
+ }
17
+ exports.RPTBMAN = RPTBMAN;
@@ -1,18 +1,18 @@
1
- import { RP2040 } from '../rp2040';
2
- import { BasePeripheral, Peripheral } from './peripheral';
3
- export declare class RPTimer extends BasePeripheral implements Peripheral {
4
- private readonly clock;
5
- private latchedTimeHigh;
6
- private readonly alarms;
7
- private intRaw;
8
- private intEnable;
9
- private intForce;
10
- private paused;
11
- constructor(rp2040: RP2040, name: string);
12
- get intStatus(): number;
13
- readUint32(offset: number): number;
14
- writeUint32(offset: number, value: number): void;
15
- private fireAlarm;
16
- private checkInterrupts;
17
- private disarmAlarm;
18
- }
1
+ import { RP2040 } from '../rp2040.js';
2
+ import { BasePeripheral, Peripheral } from './peripheral.js';
3
+ export declare class RPTimer extends BasePeripheral implements Peripheral {
4
+ private readonly clock;
5
+ private latchedTimeHigh;
6
+ private readonly alarms;
7
+ private intRaw;
8
+ private intEnable;
9
+ private intForce;
10
+ private paused;
11
+ constructor(rp2040: RP2040, name: string);
12
+ get intStatus(): number;
13
+ readUint32(offset: number): number;
14
+ writeUint32(offset: number, value: number): void;
15
+ private fireAlarm;
16
+ private checkInterrupts;
17
+ private disarmAlarm;
18
+ }
@@ -1,156 +1,156 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RPTimer = void 0;
4
- const irq_1 = require("../irq");
5
- const peripheral_1 = require("./peripheral");
6
- const TIMEHR = 0x08;
7
- const TIMELR = 0x0c;
8
- const TIMERAWH = 0x24;
9
- const TIMERAWL = 0x28;
10
- const ALARM0 = 0x10;
11
- const ALARM1 = 0x14;
12
- const ALARM2 = 0x18;
13
- const ALARM3 = 0x1c;
14
- const ARMED = 0x20;
15
- const PAUSE = 0x30;
16
- const INTR = 0x34;
17
- const INTE = 0x38;
18
- const INTF = 0x3c;
19
- const INTS = 0x40;
20
- const ALARM_0 = 1 << 0;
21
- const ALARM_1 = 1 << 1;
22
- const ALARM_2 = 1 << 2;
23
- const ALARM_3 = 1 << 3;
24
- const timerInterrupts = [irq_1.IRQ.TIMER_0, irq_1.IRQ.TIMER_1, irq_1.IRQ.TIMER_2, irq_1.IRQ.TIMER_3];
25
- class RPTimerAlarm {
26
- constructor(name, bitValue) {
27
- this.name = name;
28
- this.bitValue = bitValue;
29
- this.armed = false;
30
- this.targetMicros = 0;
31
- this.timer = null;
32
- }
33
- }
34
- class RPTimer extends peripheral_1.BasePeripheral {
35
- constructor(rp2040, name) {
36
- super(rp2040, name);
37
- this.latchedTimeHigh = 0;
38
- this.alarms = [
39
- new RPTimerAlarm('Alarm 0', ALARM_0),
40
- new RPTimerAlarm('Alarm 1', ALARM_1),
41
- new RPTimerAlarm('Alarm 2', ALARM_2),
42
- new RPTimerAlarm('Alarm 3', ALARM_3),
43
- ];
44
- this.intRaw = 0;
45
- this.intEnable = 0;
46
- this.intForce = 0;
47
- this.paused = false;
48
- this.clock = rp2040.clock;
49
- }
50
- get intStatus() {
51
- return (this.intRaw & this.intEnable) | this.intForce;
52
- }
53
- readUint32(offset) {
54
- const time = this.clock.micros;
55
- switch (offset) {
56
- case TIMEHR:
57
- return this.latchedTimeHigh;
58
- case TIMELR:
59
- this.latchedTimeHigh = Math.floor(time / Math.pow(2, 32));
60
- return time >>> 0;
61
- case TIMERAWH:
62
- return Math.floor(time / Math.pow(2, 32));
63
- case TIMERAWL:
64
- return time >>> 0;
65
- case ALARM0:
66
- return this.alarms[0].targetMicros;
67
- case ALARM1:
68
- return this.alarms[1].targetMicros;
69
- case ALARM2:
70
- return this.alarms[2].targetMicros;
71
- case ALARM3:
72
- return this.alarms[3].targetMicros;
73
- case PAUSE:
74
- return this.paused ? 1 : 0;
75
- case INTR:
76
- return this.intRaw;
77
- case INTE:
78
- return this.intEnable;
79
- case INTF:
80
- return this.intForce;
81
- case INTS:
82
- return this.intStatus;
83
- case ARMED:
84
- return ((this.alarms[0].armed ? this.alarms[0].bitValue : 0) |
85
- (this.alarms[1].armed ? this.alarms[1].bitValue : 0) |
86
- (this.alarms[2].armed ? this.alarms[2].bitValue : 0) |
87
- (this.alarms[3].armed ? this.alarms[3].bitValue : 0));
88
- }
89
- return super.readUint32(offset);
90
- }
91
- writeUint32(offset, value) {
92
- switch (offset) {
93
- case ALARM0:
94
- case ALARM1:
95
- case ALARM2:
96
- case ALARM3: {
97
- const alarmIndex = (offset - ALARM0) / 4;
98
- const alarm = this.alarms[alarmIndex];
99
- const delta = (value - this.clock.micros) >>> 0;
100
- this.disarmAlarm(alarm);
101
- alarm.armed = true;
102
- alarm.targetMicros = value;
103
- alarm.timer = this.clock.createTimer(delta, () => this.fireAlarm(alarmIndex));
104
- break;
105
- }
106
- case ARMED:
107
- for (const alarm of this.alarms) {
108
- if (this.rawWriteValue & alarm.bitValue) {
109
- this.disarmAlarm(alarm);
110
- }
111
- }
112
- break;
113
- case PAUSE:
114
- this.paused = !!(value & 1);
115
- if (this.paused) {
116
- this.warn('Unimplemented Timer Pause');
117
- }
118
- // TODO actually pause the timer
119
- break;
120
- case INTR:
121
- this.intRaw &= ~this.rawWriteValue;
122
- this.checkInterrupts();
123
- break;
124
- case INTE:
125
- this.intEnable = value & 0xf;
126
- this.checkInterrupts();
127
- break;
128
- case INTF:
129
- this.intForce = value & 0xf;
130
- this.checkInterrupts();
131
- break;
132
- default:
133
- super.writeUint32(offset, value);
134
- }
135
- }
136
- fireAlarm(index) {
137
- const alarm = this.alarms[index];
138
- this.disarmAlarm(alarm);
139
- this.intRaw |= alarm.bitValue;
140
- this.checkInterrupts();
141
- }
142
- checkInterrupts() {
143
- const { intStatus } = this;
144
- for (let i = 0; i < this.alarms.length; i++) {
145
- this.rp2040.setInterrupt(timerInterrupts[i], !!(intStatus & (1 << i)));
146
- }
147
- }
148
- disarmAlarm(alarm) {
149
- if (alarm.timer) {
150
- this.clock.deleteTimer(alarm.timer);
151
- alarm.timer = null;
152
- }
153
- alarm.armed = false;
154
- }
155
- }
156
- exports.RPTimer = RPTimer;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RPTimer = void 0;
4
+ const irq_js_1 = require("../irq.js");
5
+ const peripheral_js_1 = require("./peripheral.js");
6
+ const TIMEHR = 0x08;
7
+ const TIMELR = 0x0c;
8
+ const TIMERAWH = 0x24;
9
+ const TIMERAWL = 0x28;
10
+ const ALARM0 = 0x10;
11
+ const ALARM1 = 0x14;
12
+ const ALARM2 = 0x18;
13
+ const ALARM3 = 0x1c;
14
+ const ARMED = 0x20;
15
+ const PAUSE = 0x30;
16
+ const INTR = 0x34;
17
+ const INTE = 0x38;
18
+ const INTF = 0x3c;
19
+ const INTS = 0x40;
20
+ const ALARM_0 = 1 << 0;
21
+ const ALARM_1 = 1 << 1;
22
+ const ALARM_2 = 1 << 2;
23
+ const ALARM_3 = 1 << 3;
24
+ const timerInterrupts = [irq_js_1.IRQ.TIMER_0, irq_js_1.IRQ.TIMER_1, irq_js_1.IRQ.TIMER_2, irq_js_1.IRQ.TIMER_3];
25
+ class RPTimerAlarm {
26
+ constructor(name, bitValue) {
27
+ this.name = name;
28
+ this.bitValue = bitValue;
29
+ this.armed = false;
30
+ this.targetMicros = 0;
31
+ this.timer = null;
32
+ }
33
+ }
34
+ class RPTimer extends peripheral_js_1.BasePeripheral {
35
+ constructor(rp2040, name) {
36
+ super(rp2040, name);
37
+ this.latchedTimeHigh = 0;
38
+ this.alarms = [
39
+ new RPTimerAlarm('Alarm 0', ALARM_0),
40
+ new RPTimerAlarm('Alarm 1', ALARM_1),
41
+ new RPTimerAlarm('Alarm 2', ALARM_2),
42
+ new RPTimerAlarm('Alarm 3', ALARM_3),
43
+ ];
44
+ this.intRaw = 0;
45
+ this.intEnable = 0;
46
+ this.intForce = 0;
47
+ this.paused = false;
48
+ this.clock = rp2040.clock;
49
+ }
50
+ get intStatus() {
51
+ return (this.intRaw & this.intEnable) | this.intForce;
52
+ }
53
+ readUint32(offset) {
54
+ const time = this.clock.micros;
55
+ switch (offset) {
56
+ case TIMEHR:
57
+ return this.latchedTimeHigh;
58
+ case TIMELR:
59
+ this.latchedTimeHigh = Math.floor(time / 2 ** 32);
60
+ return time >>> 0;
61
+ case TIMERAWH:
62
+ return Math.floor(time / 2 ** 32);
63
+ case TIMERAWL:
64
+ return time >>> 0;
65
+ case ALARM0:
66
+ return this.alarms[0].targetMicros;
67
+ case ALARM1:
68
+ return this.alarms[1].targetMicros;
69
+ case ALARM2:
70
+ return this.alarms[2].targetMicros;
71
+ case ALARM3:
72
+ return this.alarms[3].targetMicros;
73
+ case PAUSE:
74
+ return this.paused ? 1 : 0;
75
+ case INTR:
76
+ return this.intRaw;
77
+ case INTE:
78
+ return this.intEnable;
79
+ case INTF:
80
+ return this.intForce;
81
+ case INTS:
82
+ return this.intStatus;
83
+ case ARMED:
84
+ return ((this.alarms[0].armed ? this.alarms[0].bitValue : 0) |
85
+ (this.alarms[1].armed ? this.alarms[1].bitValue : 0) |
86
+ (this.alarms[2].armed ? this.alarms[2].bitValue : 0) |
87
+ (this.alarms[3].armed ? this.alarms[3].bitValue : 0));
88
+ }
89
+ return super.readUint32(offset);
90
+ }
91
+ writeUint32(offset, value) {
92
+ switch (offset) {
93
+ case ALARM0:
94
+ case ALARM1:
95
+ case ALARM2:
96
+ case ALARM3: {
97
+ const alarmIndex = (offset - ALARM0) / 4;
98
+ const alarm = this.alarms[alarmIndex];
99
+ const delta = (value - this.clock.micros) >>> 0;
100
+ this.disarmAlarm(alarm);
101
+ alarm.armed = true;
102
+ alarm.targetMicros = value;
103
+ alarm.timer = this.clock.createTimer(delta, () => this.fireAlarm(alarmIndex));
104
+ break;
105
+ }
106
+ case ARMED:
107
+ for (const alarm of this.alarms) {
108
+ if (this.rawWriteValue & alarm.bitValue) {
109
+ this.disarmAlarm(alarm);
110
+ }
111
+ }
112
+ break;
113
+ case PAUSE:
114
+ this.paused = !!(value & 1);
115
+ if (this.paused) {
116
+ this.warn('Unimplemented Timer Pause');
117
+ }
118
+ // TODO actually pause the timer
119
+ break;
120
+ case INTR:
121
+ this.intRaw &= ~this.rawWriteValue;
122
+ this.checkInterrupts();
123
+ break;
124
+ case INTE:
125
+ this.intEnable = value & 0xf;
126
+ this.checkInterrupts();
127
+ break;
128
+ case INTF:
129
+ this.intForce = value & 0xf;
130
+ this.checkInterrupts();
131
+ break;
132
+ default:
133
+ super.writeUint32(offset, value);
134
+ }
135
+ }
136
+ fireAlarm(index) {
137
+ const alarm = this.alarms[index];
138
+ this.disarmAlarm(alarm);
139
+ this.intRaw |= alarm.bitValue;
140
+ this.checkInterrupts();
141
+ }
142
+ checkInterrupts() {
143
+ const { intStatus } = this;
144
+ for (let i = 0; i < this.alarms.length; i++) {
145
+ this.rp2040.setInterrupt(timerInterrupts[i], !!(intStatus & (1 << i)));
146
+ }
147
+ }
148
+ disarmAlarm(alarm) {
149
+ if (alarm.timer) {
150
+ this.clock.deleteTimer(alarm.timer);
151
+ alarm.timer = null;
152
+ }
153
+ alarm.armed = false;
154
+ }
155
+ }
156
+ exports.RPTimer = RPTimer;
@@ -1,28 +1,31 @@
1
- import { RP2040 } from '../rp2040';
2
- import { BasePeripheral, Peripheral } from './peripheral';
3
- export declare class RPUART extends BasePeripheral implements Peripheral {
4
- readonly index: number;
5
- readonly irq: number;
6
- private ctrlRegister;
7
- private lineCtrlRegister;
8
- private rxFIFO;
9
- private interruptMask;
10
- private interruptStatus;
11
- private readonly rxDREQ;
12
- private readonly txDREQ;
13
- onByte?: (value: number) => void;
14
- constructor(rp2040: RP2040, name: string, index: number, irq: number);
15
- get enabled(): boolean;
16
- get txEnabled(): boolean;
17
- get rxEnabled(): boolean;
18
- get fifosEnabled(): boolean;
19
- /**
20
- * Number of bits per UART character
21
- */
22
- get wordLength(): 8 | 6 | 5 | 7 | undefined;
23
- get flags(): number;
24
- checkInterrupts(): void;
25
- feedByte(value: number): void;
26
- readUint32(offset: number): number;
27
- writeUint32(offset: number, value: number): void;
28
- }
1
+ import { RP2040 } from '../rp2040.js';
2
+ import { DREQChannel } from './dma.js';
3
+ import { BasePeripheral, Peripheral } from './peripheral.js';
4
+ export interface IUARTDMAChannels {
5
+ rx: DREQChannel;
6
+ tx: DREQChannel;
7
+ }
8
+ export declare class RPUART extends BasePeripheral implements Peripheral {
9
+ readonly irq: number;
10
+ readonly dreq: IUARTDMAChannels;
11
+ private ctrlRegister;
12
+ private lineCtrlRegister;
13
+ private rxFIFO;
14
+ private interruptMask;
15
+ private interruptStatus;
16
+ onByte?: (value: number) => void;
17
+ constructor(rp2040: RP2040, name: string, irq: number, dreq: IUARTDMAChannels);
18
+ get enabled(): boolean;
19
+ get txEnabled(): boolean;
20
+ get rxEnabled(): boolean;
21
+ get fifosEnabled(): boolean;
22
+ /**
23
+ * Number of bits per UART character
24
+ */
25
+ get wordLength(): 5 | 6 | 7 | 8 | undefined;
26
+ get flags(): number;
27
+ checkInterrupts(): void;
28
+ feedByte(value: number): void;
29
+ readUint32(offset: number): number;
30
+ writeUint32(offset: number, value: number): void;
31
+ }