update teensy3 lib to latest, use new vector change mechanism
[teensytas.git] / main.c
CommitLineData
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 */
9static uint8_t fixed_state[4] = { 0x33, 0x3f };
10
0c1e003e 11ssize_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
25void yield(void)
26{
27}
28
a773ac06 29static void my_portb_isr(void)
9c4f55f4 30{
31 uint32_t isfr;
32
33 //printf("irq, GPIOB_PDIR: %08x\n", GPIOB_PDIR);
34
35 GPIOD_PDOR = fixed_state[(GPIOB_PDIR >> CORE_PIN0_BIT) & 1];
36
37 isfr = PORTB_ISFR;
38 PORTB_ISFR = isfr;
39}
40
0c1e003e 41int main(void)
42{
1cb2822f 43 char buf[64];
44 int timeout;
45 int ret;
0c1e003e 46
47 delay(1000); // wait for usb..
48
49 printf("starting, rawhid: %d\n", usb_rawhid_available());
50
9c4f55f4 51 // md pin th tr tl r l d u
52 // md bit* 6 5 4 3 2 1 0
53 // t bit b16 d5 d4 d3 d2 d1 d0
54 // t pin 0 20 6 8 7 14 2
55 // * - note: tl/tr mixed in most docs
56 pinMode(0, INPUT);
a773ac06 57 attachInterrupt(0, my_portb_isr, CHANGE);
58 attachInterruptVector(IRQ_PORTB, my_portb_isr);
9c4f55f4 59
60 pinMode( 2, OUTPUT);
61 pinMode(14, OUTPUT);
62 pinMode( 7, OUTPUT);
63 pinMode( 8, OUTPUT);
64 pinMode( 6, OUTPUT);
65 pinMode(20, OUTPUT);
66
67 // led
68 pinMode(13, OUTPUT);
69 // CORE_PIN13_PORTSET = CORE_PIN13_BITMASK;
70 // CORE_PIN13_PORTCLEAR = CORE_PIN13_BITMASK;
71
72 // CORE_PIN0_PORTSET CORE_PIN0_BITMASK PORTB_PCR16
73 printf("GPIOC PDDR, PDIR: %08x %08x\n", GPIOC_PDIR, GPIOC_PDDR);
74 printf("GPIOD PDDR, PDIR: %08x %08x\n", GPIOD_PDIR, GPIOD_PDDR);
75 printf("PORTB_PCR16: %08x\n", PORTB_PCR16);
76
0c1e003e 77 // ret = usb_rawhid_send(buf, 2000);
78
1cb2822f 79 timeout = 1000;
9c4f55f4 80
1cb2822f 81 while (1) {
82 ret = usb_rawhid_recv(buf, timeout);
83 if (ret == 64) {
84 CORE_PIN13_PORTSET = CORE_PIN13_BITMASK;
85
86 memcpy(fixed_state, buf, sizeof(fixed_state));
87 timeout = 20;
88 }
89 else if (ret == 0) {
90 CORE_PIN13_PORTCLEAR = CORE_PIN13_BITMASK;
91 timeout = 1000;
92 }
93 else {
94 printf("usb_rawhid_recv: %d\n", ret);
95 timeout = 1000;
96 }
0c1e003e 97 }
1cb2822f 98
99 return 0;
0c1e003e 100}