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
@@ -1,18 +1,18 @@
1
- import { BasePeripheral } from './peripheral';
2
- const CHIP_ID = 0;
3
- const PLATFORM = 0x4;
4
- const GITREF_RP2040 = 0x40;
5
- export class RP2040SysInfo extends BasePeripheral {
6
- readUint32(offset) {
7
- // All the values here were verified against the silicon
8
- switch (offset) {
9
- case CHIP_ID:
10
- return 0x10002927;
11
- case PLATFORM:
12
- return 0x00000002;
13
- case GITREF_RP2040:
14
- return 0xe0c912e8;
15
- }
16
- return super.readUint32(offset);
17
- }
18
- }
1
+ import { BasePeripheral } from './peripheral.js';
2
+ const CHIP_ID = 0;
3
+ const PLATFORM = 0x4;
4
+ const GITREF_RP2040 = 0x40;
5
+ export class RP2040SysInfo extends BasePeripheral {
6
+ readUint32(offset) {
7
+ // All the values here were verified against the silicon
8
+ switch (offset) {
9
+ case CHIP_ID:
10
+ return 0x10002927;
11
+ case PLATFORM:
12
+ return 0x00000002;
13
+ case GITREF_RP2040:
14
+ return 0xe0c912e8;
15
+ }
16
+ return super.readUint32(offset);
17
+ }
18
+ }
@@ -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,13 +1,13 @@
1
- import { BasePeripheral } from './peripheral';
2
- const PLATFORM = 0;
3
- const ASIC = 1;
4
- export class RPTBMAN extends BasePeripheral {
5
- readUint32(offset) {
6
- switch (offset) {
7
- case PLATFORM:
8
- return ASIC;
9
- default:
10
- return super.readUint32(offset);
11
- }
12
- }
13
- }
1
+ import { BasePeripheral } from './peripheral.js';
2
+ const PLATFORM = 0;
3
+ const ASIC = 1;
4
+ export class RPTBMAN extends BasePeripheral {
5
+ readUint32(offset) {
6
+ switch (offset) {
7
+ case PLATFORM:
8
+ return ASIC;
9
+ default:
10
+ return super.readUint32(offset);
11
+ }
12
+ }
13
+ }
@@ -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,152 +1,152 @@
1
- import { IRQ } from '../irq';
2
- import { BasePeripheral } from './peripheral';
3
- const TIMEHR = 0x08;
4
- const TIMELR = 0x0c;
5
- const TIMERAWH = 0x24;
6
- const TIMERAWL = 0x28;
7
- const ALARM0 = 0x10;
8
- const ALARM1 = 0x14;
9
- const ALARM2 = 0x18;
10
- const ALARM3 = 0x1c;
11
- const ARMED = 0x20;
12
- const PAUSE = 0x30;
13
- const INTR = 0x34;
14
- const INTE = 0x38;
15
- const INTF = 0x3c;
16
- const INTS = 0x40;
17
- const ALARM_0 = 1 << 0;
18
- const ALARM_1 = 1 << 1;
19
- const ALARM_2 = 1 << 2;
20
- const ALARM_3 = 1 << 3;
21
- const timerInterrupts = [IRQ.TIMER_0, IRQ.TIMER_1, IRQ.TIMER_2, IRQ.TIMER_3];
22
- class RPTimerAlarm {
23
- constructor(name, bitValue) {
24
- this.name = name;
25
- this.bitValue = bitValue;
26
- this.armed = false;
27
- this.targetMicros = 0;
28
- this.timer = null;
29
- }
30
- }
31
- export class RPTimer extends BasePeripheral {
32
- constructor(rp2040, name) {
33
- super(rp2040, name);
34
- this.latchedTimeHigh = 0;
35
- this.alarms = [
36
- new RPTimerAlarm('Alarm 0', ALARM_0),
37
- new RPTimerAlarm('Alarm 1', ALARM_1),
38
- new RPTimerAlarm('Alarm 2', ALARM_2),
39
- new RPTimerAlarm('Alarm 3', ALARM_3),
40
- ];
41
- this.intRaw = 0;
42
- this.intEnable = 0;
43
- this.intForce = 0;
44
- this.paused = false;
45
- this.clock = rp2040.clock;
46
- }
47
- get intStatus() {
48
- return (this.intRaw & this.intEnable) | this.intForce;
49
- }
50
- readUint32(offset) {
51
- const time = this.clock.micros;
52
- switch (offset) {
53
- case TIMEHR:
54
- return this.latchedTimeHigh;
55
- case TIMELR:
56
- this.latchedTimeHigh = Math.floor(time / Math.pow(2, 32));
57
- return time >>> 0;
58
- case TIMERAWH:
59
- return Math.floor(time / Math.pow(2, 32));
60
- case TIMERAWL:
61
- return time >>> 0;
62
- case ALARM0:
63
- return this.alarms[0].targetMicros;
64
- case ALARM1:
65
- return this.alarms[1].targetMicros;
66
- case ALARM2:
67
- return this.alarms[2].targetMicros;
68
- case ALARM3:
69
- return this.alarms[3].targetMicros;
70
- case PAUSE:
71
- return this.paused ? 1 : 0;
72
- case INTR:
73
- return this.intRaw;
74
- case INTE:
75
- return this.intEnable;
76
- case INTF:
77
- return this.intForce;
78
- case INTS:
79
- return this.intStatus;
80
- case ARMED:
81
- return ((this.alarms[0].armed ? this.alarms[0].bitValue : 0) |
82
- (this.alarms[1].armed ? this.alarms[1].bitValue : 0) |
83
- (this.alarms[2].armed ? this.alarms[2].bitValue : 0) |
84
- (this.alarms[3].armed ? this.alarms[3].bitValue : 0));
85
- }
86
- return super.readUint32(offset);
87
- }
88
- writeUint32(offset, value) {
89
- switch (offset) {
90
- case ALARM0:
91
- case ALARM1:
92
- case ALARM2:
93
- case ALARM3: {
94
- const alarmIndex = (offset - ALARM0) / 4;
95
- const alarm = this.alarms[alarmIndex];
96
- const delta = (value - this.clock.micros) >>> 0;
97
- this.disarmAlarm(alarm);
98
- alarm.armed = true;
99
- alarm.targetMicros = value;
100
- alarm.timer = this.clock.createTimer(delta, () => this.fireAlarm(alarmIndex));
101
- break;
102
- }
103
- case ARMED:
104
- for (const alarm of this.alarms) {
105
- if (this.rawWriteValue & alarm.bitValue) {
106
- this.disarmAlarm(alarm);
107
- }
108
- }
109
- break;
110
- case PAUSE:
111
- this.paused = !!(value & 1);
112
- if (this.paused) {
113
- this.warn('Unimplemented Timer Pause');
114
- }
115
- // TODO actually pause the timer
116
- break;
117
- case INTR:
118
- this.intRaw &= ~this.rawWriteValue;
119
- this.checkInterrupts();
120
- break;
121
- case INTE:
122
- this.intEnable = value & 0xf;
123
- this.checkInterrupts();
124
- break;
125
- case INTF:
126
- this.intForce = value & 0xf;
127
- this.checkInterrupts();
128
- break;
129
- default:
130
- super.writeUint32(offset, value);
131
- }
132
- }
133
- fireAlarm(index) {
134
- const alarm = this.alarms[index];
135
- this.disarmAlarm(alarm);
136
- this.intRaw |= alarm.bitValue;
137
- this.checkInterrupts();
138
- }
139
- checkInterrupts() {
140
- const { intStatus } = this;
141
- for (let i = 0; i < this.alarms.length; i++) {
142
- this.rp2040.setInterrupt(timerInterrupts[i], !!(intStatus & (1 << i)));
143
- }
144
- }
145
- disarmAlarm(alarm) {
146
- if (alarm.timer) {
147
- this.clock.deleteTimer(alarm.timer);
148
- alarm.timer = null;
149
- }
150
- alarm.armed = false;
151
- }
152
- }
1
+ import { IRQ } from '../irq.js';
2
+ import { BasePeripheral } from './peripheral.js';
3
+ const TIMEHR = 0x08;
4
+ const TIMELR = 0x0c;
5
+ const TIMERAWH = 0x24;
6
+ const TIMERAWL = 0x28;
7
+ const ALARM0 = 0x10;
8
+ const ALARM1 = 0x14;
9
+ const ALARM2 = 0x18;
10
+ const ALARM3 = 0x1c;
11
+ const ARMED = 0x20;
12
+ const PAUSE = 0x30;
13
+ const INTR = 0x34;
14
+ const INTE = 0x38;
15
+ const INTF = 0x3c;
16
+ const INTS = 0x40;
17
+ const ALARM_0 = 1 << 0;
18
+ const ALARM_1 = 1 << 1;
19
+ const ALARM_2 = 1 << 2;
20
+ const ALARM_3 = 1 << 3;
21
+ const timerInterrupts = [IRQ.TIMER_0, IRQ.TIMER_1, IRQ.TIMER_2, IRQ.TIMER_3];
22
+ class RPTimerAlarm {
23
+ constructor(name, bitValue) {
24
+ this.name = name;
25
+ this.bitValue = bitValue;
26
+ this.armed = false;
27
+ this.targetMicros = 0;
28
+ this.timer = null;
29
+ }
30
+ }
31
+ export class RPTimer extends BasePeripheral {
32
+ constructor(rp2040, name) {
33
+ super(rp2040, name);
34
+ this.latchedTimeHigh = 0;
35
+ this.alarms = [
36
+ new RPTimerAlarm('Alarm 0', ALARM_0),
37
+ new RPTimerAlarm('Alarm 1', ALARM_1),
38
+ new RPTimerAlarm('Alarm 2', ALARM_2),
39
+ new RPTimerAlarm('Alarm 3', ALARM_3),
40
+ ];
41
+ this.intRaw = 0;
42
+ this.intEnable = 0;
43
+ this.intForce = 0;
44
+ this.paused = false;
45
+ this.clock = rp2040.clock;
46
+ }
47
+ get intStatus() {
48
+ return (this.intRaw & this.intEnable) | this.intForce;
49
+ }
50
+ readUint32(offset) {
51
+ const time = this.clock.micros;
52
+ switch (offset) {
53
+ case TIMEHR:
54
+ return this.latchedTimeHigh;
55
+ case TIMELR:
56
+ this.latchedTimeHigh = Math.floor(time / 2 ** 32);
57
+ return time >>> 0;
58
+ case TIMERAWH:
59
+ return Math.floor(time / 2 ** 32);
60
+ case TIMERAWL:
61
+ return time >>> 0;
62
+ case ALARM0:
63
+ return this.alarms[0].targetMicros;
64
+ case ALARM1:
65
+ return this.alarms[1].targetMicros;
66
+ case ALARM2:
67
+ return this.alarms[2].targetMicros;
68
+ case ALARM3:
69
+ return this.alarms[3].targetMicros;
70
+ case PAUSE:
71
+ return this.paused ? 1 : 0;
72
+ case INTR:
73
+ return this.intRaw;
74
+ case INTE:
75
+ return this.intEnable;
76
+ case INTF:
77
+ return this.intForce;
78
+ case INTS:
79
+ return this.intStatus;
80
+ case ARMED:
81
+ return ((this.alarms[0].armed ? this.alarms[0].bitValue : 0) |
82
+ (this.alarms[1].armed ? this.alarms[1].bitValue : 0) |
83
+ (this.alarms[2].armed ? this.alarms[2].bitValue : 0) |
84
+ (this.alarms[3].armed ? this.alarms[3].bitValue : 0));
85
+ }
86
+ return super.readUint32(offset);
87
+ }
88
+ writeUint32(offset, value) {
89
+ switch (offset) {
90
+ case ALARM0:
91
+ case ALARM1:
92
+ case ALARM2:
93
+ case ALARM3: {
94
+ const alarmIndex = (offset - ALARM0) / 4;
95
+ const alarm = this.alarms[alarmIndex];
96
+ const delta = (value - this.clock.micros) >>> 0;
97
+ this.disarmAlarm(alarm);
98
+ alarm.armed = true;
99
+ alarm.targetMicros = value;
100
+ alarm.timer = this.clock.createTimer(delta, () => this.fireAlarm(alarmIndex));
101
+ break;
102
+ }
103
+ case ARMED:
104
+ for (const alarm of this.alarms) {
105
+ if (this.rawWriteValue & alarm.bitValue) {
106
+ this.disarmAlarm(alarm);
107
+ }
108
+ }
109
+ break;
110
+ case PAUSE:
111
+ this.paused = !!(value & 1);
112
+ if (this.paused) {
113
+ this.warn('Unimplemented Timer Pause');
114
+ }
115
+ // TODO actually pause the timer
116
+ break;
117
+ case INTR:
118
+ this.intRaw &= ~this.rawWriteValue;
119
+ this.checkInterrupts();
120
+ break;
121
+ case INTE:
122
+ this.intEnable = value & 0xf;
123
+ this.checkInterrupts();
124
+ break;
125
+ case INTF:
126
+ this.intForce = value & 0xf;
127
+ this.checkInterrupts();
128
+ break;
129
+ default:
130
+ super.writeUint32(offset, value);
131
+ }
132
+ }
133
+ fireAlarm(index) {
134
+ const alarm = this.alarms[index];
135
+ this.disarmAlarm(alarm);
136
+ this.intRaw |= alarm.bitValue;
137
+ this.checkInterrupts();
138
+ }
139
+ checkInterrupts() {
140
+ const { intStatus } = this;
141
+ for (let i = 0; i < this.alarms.length; i++) {
142
+ this.rp2040.setInterrupt(timerInterrupts[i], !!(intStatus & (1 << i)));
143
+ }
144
+ }
145
+ disarmAlarm(alarm) {
146
+ if (alarm.timer) {
147
+ this.clock.deleteTimer(alarm.timer);
148
+ alarm.timer = null;
149
+ }
150
+ alarm.armed = false;
151
+ }
152
+ }
@@ -1,31 +1,31 @@
1
- import { RP2040 } from '../rp2040';
2
- import { DREQChannel } from './dma';
3
- import { BasePeripheral, Peripheral } from './peripheral';
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(): 8 | 6 | 5 | 7 | 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
- }
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
+ }