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.
- package/README.md +1 -1
- package/dist/cjs/clock/clock.d.ts +11 -11
- package/dist/cjs/clock/clock.js +2 -2
- package/dist/cjs/clock/mock-clock.d.ts +17 -17
- package/dist/cjs/clock/mock-clock.js +52 -52
- package/dist/cjs/clock/realtime-clock.d.ts +23 -23
- package/dist/cjs/clock/realtime-clock.js +73 -73
- package/dist/cjs/cortex-m0-core.d.ts +87 -87
- package/dist/cjs/cortex-m0-core.js +1251 -1251
- package/dist/cjs/gdb/gdb-connection.d.ts +11 -11
- package/dist/cjs/gdb/gdb-connection.js +57 -57
- package/dist/cjs/gdb/gdb-server.d.ts +23 -23
- package/dist/cjs/gdb/gdb-server.js +232 -232
- package/dist/cjs/gdb/gdb-tcp-server.d.ts +10 -10
- package/dist/cjs/gdb/gdb-tcp-server.js +34 -34
- package/dist/cjs/gdb/gdb-utils.d.ts +9 -9
- package/dist/cjs/gdb/gdb-utils.js +48 -48
- package/dist/cjs/gpio-pin.d.ts +56 -56
- package/dist/cjs/gpio-pin.js +216 -216
- package/dist/cjs/index.d.ts +11 -11
- package/dist/cjs/index.js +36 -36
- package/dist/cjs/interpolator.d.ts +36 -36
- package/dist/cjs/interpolator.js +150 -150
- package/dist/cjs/irq.d.ts +29 -29
- package/dist/cjs/irq.js +33 -33
- package/dist/cjs/peripherals/adc.d.ts +52 -52
- package/dist/cjs/peripherals/adc.js +261 -261
- package/dist/cjs/peripherals/busctrl.d.ts +10 -10
- package/dist/cjs/peripherals/busctrl.js +84 -84
- package/dist/cjs/peripherals/clocks.d.ts +9 -9
- package/dist/cjs/peripherals/clocks.js +42 -42
- package/dist/cjs/peripherals/dma.d.ts +109 -109
- package/dist/cjs/peripherals/dma.js +520 -520
- package/dist/cjs/peripherals/i2c.d.ts +54 -54
- package/dist/cjs/peripherals/i2c.js +458 -458
- package/dist/cjs/peripherals/io.d.ts +11 -11
- package/dist/cjs/peripherals/io.js +100 -100
- package/dist/cjs/peripherals/pads.d.ts +13 -13
- package/dist/cjs/peripherals/pads.js +58 -58
- package/dist/cjs/peripherals/peripheral.d.ts +22 -22
- package/dist/cjs/peripherals/peripheral.js +61 -61
- package/dist/cjs/peripherals/pio.d.ts +120 -120
- package/dist/cjs/peripherals/pio.js +1086 -1086
- package/dist/cjs/peripherals/ppb.d.ts +25 -25
- package/dist/cjs/peripherals/ppb.js +229 -229
- package/dist/cjs/peripherals/pwm.d.ts +65 -65
- package/dist/cjs/peripherals/pwm.js +372 -372
- package/dist/cjs/peripherals/reset.d.ts +8 -8
- package/dist/cjs/peripherals/reset.js +40 -40
- package/dist/cjs/peripherals/rtc.d.ts +10 -10
- package/dist/cjs/peripherals/rtc.js +74 -74
- package/dist/cjs/peripherals/spi.d.ts +38 -30
- package/dist/cjs/peripherals/spi.js +240 -218
- package/dist/cjs/peripherals/ssi.d.ts +6 -6
- package/dist/cjs/peripherals/ssi.js +43 -43
- package/dist/cjs/peripherals/syscfg.d.ts +5 -5
- package/dist/cjs/peripherals/syscfg.js +26 -26
- package/dist/cjs/peripherals/sysinfo.d.ts +4 -4
- package/dist/cjs/peripherals/sysinfo.js +22 -22
- package/dist/cjs/peripherals/tbman.d.ts +4 -4
- package/dist/cjs/peripherals/tbman.js +17 -17
- package/dist/cjs/peripherals/timer.d.ts +18 -18
- package/dist/cjs/peripherals/timer.js +156 -156
- package/dist/cjs/peripherals/uart.d.ts +31 -28
- package/dist/cjs/peripherals/uart.js +132 -135
- package/dist/cjs/peripherals/usb.d.ts +29 -29
- package/dist/cjs/peripherals/usb.js +309 -309
- package/dist/cjs/rp2040.d.ts +71 -71
- package/dist/cjs/rp2040.js +361 -346
- package/dist/cjs/sio.d.ts +21 -21
- package/dist/cjs/sio.js +425 -425
- package/dist/cjs/usb/cdc.d.ts +20 -20
- package/dist/cjs/usb/cdc.js +126 -126
- package/dist/cjs/usb/interfaces.d.ts +47 -47
- package/dist/cjs/usb/interfaces.js +46 -46
- package/dist/cjs/usb/setup.d.ts +5 -5
- package/dist/cjs/usb/setup.js +53 -53
- package/dist/cjs/utils/assembler.d.ts +79 -79
- package/dist/cjs/utils/assembler.js +328 -328
- package/dist/cjs/utils/bit.d.ts +3 -3
- package/dist/cjs/utils/bit.js +15 -15
- package/dist/cjs/utils/fifo.d.ts +15 -15
- package/dist/cjs/utils/fifo.js +56 -56
- package/dist/cjs/utils/logging.d.ts +23 -23
- package/dist/cjs/utils/logging.js +48 -48
- package/dist/cjs/utils/pio-assembler.d.ts +45 -45
- package/dist/cjs/utils/pio-assembler.js +87 -87
- package/dist/cjs/utils/time.d.ts +2 -2
- package/dist/cjs/utils/time.js +32 -32
- package/dist/cjs/utils/timer32.d.ts +57 -57
- package/dist/cjs/utils/timer32.js +208 -208
- package/dist/esm/clock/clock.d.ts +11 -11
- package/dist/esm/clock/clock.js +1 -1
- package/dist/esm/clock/mock-clock.d.ts +17 -17
- package/dist/esm/clock/mock-clock.js +47 -47
- package/dist/esm/clock/realtime-clock.d.ts +23 -23
- package/dist/esm/clock/realtime-clock.js +68 -68
- package/dist/esm/cortex-m0-core.d.ts +87 -87
- package/dist/esm/cortex-m0-core.js +1247 -1247
- package/dist/esm/gdb/gdb-connection.d.ts +11 -11
- package/dist/esm/gdb/gdb-connection.js +53 -53
- package/dist/esm/gdb/gdb-server.d.ts +23 -23
- package/dist/esm/gdb/gdb-server.js +228 -228
- package/dist/esm/gdb/gdb-tcp-server.d.ts +10 -10
- package/dist/esm/gdb/gdb-tcp-server.js +30 -30
- package/dist/esm/gdb/gdb-utils.d.ts +9 -9
- package/dist/esm/gdb/gdb-utils.js +36 -36
- package/dist/esm/gpio-pin.d.ts +56 -56
- package/dist/esm/gpio-pin.js +212 -212
- package/dist/esm/index.d.ts +11 -11
- package/dist/esm/index.js +11 -11
- package/dist/esm/interpolator.d.ts +36 -36
- package/dist/esm/interpolator.js +145 -145
- package/dist/esm/irq.d.ts +29 -29
- package/dist/esm/irq.js +30 -30
- package/dist/esm/peripherals/adc.d.ts +52 -52
- package/dist/esm/peripherals/adc.js +257 -257
- package/dist/esm/peripherals/busctrl.d.ts +10 -10
- package/dist/esm/peripherals/busctrl.js +80 -80
- package/dist/esm/peripherals/clocks.d.ts +9 -9
- package/dist/esm/peripherals/clocks.js +38 -38
- package/dist/esm/peripherals/dma.d.ts +109 -109
- package/dist/esm/peripherals/dma.js +515 -515
- package/dist/esm/peripherals/i2c.d.ts +54 -54
- package/dist/esm/peripherals/i2c.js +454 -454
- package/dist/esm/peripherals/io.d.ts +11 -11
- package/dist/esm/peripherals/io.js +96 -96
- package/dist/esm/peripherals/pads.d.ts +13 -13
- package/dist/esm/peripherals/pads.js +54 -54
- package/dist/esm/peripherals/peripheral.d.ts +22 -22
- package/dist/esm/peripherals/peripheral.js +55 -55
- package/dist/esm/peripherals/pio.d.ts +120 -120
- package/dist/esm/peripherals/pio.js +1081 -1081
- package/dist/esm/peripherals/ppb.d.ts +25 -25
- package/dist/esm/peripherals/ppb.js +225 -225
- package/dist/esm/peripherals/pwm.d.ts +65 -65
- package/dist/esm/peripherals/pwm.js +368 -368
- package/dist/esm/peripherals/reset.d.ts +8 -8
- package/dist/esm/peripherals/reset.js +36 -36
- package/dist/esm/peripherals/rtc.d.ts +10 -10
- package/dist/esm/peripherals/rtc.js +70 -70
- package/dist/esm/peripherals/spi.d.ts +38 -30
- package/dist/esm/peripherals/spi.js +236 -214
- package/dist/esm/peripherals/ssi.d.ts +6 -6
- package/dist/esm/peripherals/ssi.js +39 -39
- package/dist/esm/peripherals/syscfg.d.ts +5 -5
- package/dist/esm/peripherals/syscfg.js +22 -22
- package/dist/esm/peripherals/sysinfo.d.ts +4 -4
- package/dist/esm/peripherals/sysinfo.js +18 -18
- package/dist/esm/peripherals/tbman.d.ts +4 -4
- package/dist/esm/peripherals/tbman.js +13 -13
- package/dist/esm/peripherals/timer.d.ts +18 -18
- package/dist/esm/peripherals/timer.js +152 -152
- package/dist/esm/peripherals/uart.d.ts +31 -28
- package/dist/esm/peripherals/uart.js +128 -131
- package/dist/esm/peripherals/usb.d.ts +29 -29
- package/dist/esm/peripherals/usb.js +305 -305
- package/dist/esm/rp2040.d.ts +71 -71
- package/dist/esm/rp2040.js +357 -342
- package/dist/esm/sio.d.ts +21 -21
- package/dist/esm/sio.js +421 -421
- package/dist/esm/usb/cdc.d.ts +20 -20
- package/dist/esm/usb/cdc.js +121 -121
- package/dist/esm/usb/interfaces.d.ts +47 -47
- package/dist/esm/usb/interfaces.js +43 -43
- package/dist/esm/usb/setup.d.ts +5 -5
- package/dist/esm/usb/setup.js +46 -46
- package/dist/esm/utils/assembler.d.ts +79 -79
- package/dist/esm/utils/assembler.js +245 -245
- package/dist/esm/utils/bit.d.ts +3 -3
- package/dist/esm/utils/bit.js +9 -9
- package/dist/esm/utils/fifo.d.ts +15 -15
- package/dist/esm/utils/fifo.js +52 -52
- package/dist/esm/utils/logging.d.ts +23 -23
- package/dist/esm/utils/logging.js +44 -44
- package/dist/esm/utils/pio-assembler.d.ts +45 -45
- package/dist/esm/utils/pio-assembler.js +75 -75
- package/dist/esm/utils/time.d.ts +2 -2
- package/dist/esm/utils/time.js +27 -27
- package/dist/esm/utils/timer32.d.ts +57 -57
- package/dist/esm/utils/timer32.js +203 -203
- package/package.json +34 -22
- 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
|
|
5
|
-
const CHIP_ID = 0;
|
|
6
|
-
const PLATFORM = 0x4;
|
|
7
|
-
const GITREF_RP2040 = 0x40;
|
|
8
|
-
class RP2040SysInfo extends
|
|
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
|
|
5
|
-
const PLATFORM = 0;
|
|
6
|
-
const ASIC = 1;
|
|
7
|
-
class RPTBMAN extends
|
|
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
|
|
5
|
-
const
|
|
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 = [
|
|
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
|
|
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 /
|
|
60
|
-
return time >>> 0;
|
|
61
|
-
case TIMERAWH:
|
|
62
|
-
return Math.floor(time /
|
|
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 {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
private
|
|
12
|
-
private
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
get
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
+
}
|