0c1e003e |
1 | #include <stdint.h> |
2 | #include <stdio.h> |
3 | #include <string.h> |
4 | #include "teensy3/core_pins.h" |
5 | #include "teensy3/usb_seremu.h" |
6 | #include "teensy3/usb_rawhid.h" |
7 | |
9c4f55f4 |
8 | /* ?0SA 00DU, ?1CB RLDU */ |
9 | static uint8_t fixed_state[4] = { 0x33, 0x3f }; |
10 | |
0c1e003e |
11 | ssize_t _write(int fd, const void *buf, size_t nbyte) |
12 | { |
13 | char tbuf[64]; |
14 | int ret; |
15 | |
16 | if (fd != 1 && fd != 2) { |
17 | snprintf(tbuf, sizeof(tbuf), "write to fd %d\n", fd); |
18 | usb_seremu_write(tbuf, strlen(tbuf)); |
19 | } |
20 | |
21 | ret = usb_seremu_write(buf, nbyte); |
22 | return ret < 0 ? ret : nbyte; |
23 | } |
24 | |
25 | void yield(void) |
26 | { |
27 | } |
28 | |
9c4f55f4 |
29 | static void pin0_irq(void) |
30 | { |
31 | } |
32 | |
33 | void portb_isr(void) |
34 | { |
35 | uint32_t isfr; |
36 | |
37 | //printf("irq, GPIOB_PDIR: %08x\n", GPIOB_PDIR); |
38 | |
39 | GPIOD_PDOR = fixed_state[(GPIOB_PDIR >> CORE_PIN0_BIT) & 1]; |
40 | |
41 | isfr = PORTB_ISFR; |
42 | PORTB_ISFR = isfr; |
43 | } |
44 | |
0c1e003e |
45 | int main(void) |
46 | { |
9c4f55f4 |
47 | //int ret; |
0c1e003e |
48 | |
49 | delay(1000); // wait for usb.. |
50 | |
51 | printf("starting, rawhid: %d\n", usb_rawhid_available()); |
52 | |
9c4f55f4 |
53 | // md pin th tr tl r l d u |
54 | // md bit* 6 5 4 3 2 1 0 |
55 | // t bit b16 d5 d4 d3 d2 d1 d0 |
56 | // t pin 0 20 6 8 7 14 2 |
57 | // * - note: tl/tr mixed in most docs |
58 | pinMode(0, INPUT); |
59 | attachInterrupt(0, pin0_irq, CHANGE); |
60 | |
61 | pinMode( 2, OUTPUT); |
62 | pinMode(14, OUTPUT); |
63 | pinMode( 7, OUTPUT); |
64 | pinMode( 8, OUTPUT); |
65 | pinMode( 6, OUTPUT); |
66 | pinMode(20, OUTPUT); |
67 | |
68 | // led |
69 | pinMode(13, OUTPUT); |
70 | // CORE_PIN13_PORTSET = CORE_PIN13_BITMASK; |
71 | // CORE_PIN13_PORTCLEAR = CORE_PIN13_BITMASK; |
72 | |
73 | // CORE_PIN0_PORTSET CORE_PIN0_BITMASK PORTB_PCR16 |
74 | printf("GPIOC PDDR, PDIR: %08x %08x\n", GPIOC_PDIR, GPIOC_PDDR); |
75 | printf("GPIOD PDDR, PDIR: %08x %08x\n", GPIOD_PDIR, GPIOD_PDDR); |
76 | printf("PORTB_PCR16: %08x\n", PORTB_PCR16); |
77 | |
0c1e003e |
78 | // ret = usb_rawhid_recv(buf, 2000); |
79 | // ret = usb_rawhid_send(buf, 2000); |
80 | |
0c1e003e |
81 | while (1) { |
9c4f55f4 |
82 | delay(4000); |
83 | fixed_state[1] &= ~0x20; |
0c1e003e |
84 | CORE_PIN13_PORTSET = CORE_PIN13_BITMASK; |
9c4f55f4 |
85 | |
86 | delay(700); |
87 | fixed_state[1] |= 0x20; |
0c1e003e |
88 | CORE_PIN13_PORTCLEAR = CORE_PIN13_BITMASK; |
0c1e003e |
89 | } |
90 | } |