Last active
February 18, 2020 07:09
-
-
Save firelizzard18/eaaa532f7ee18a7619b3b682490960ee to your computer and use it in GitHub Desktop.
TinyGo Teensy 3.6 Test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"device/nxp" | |
"machine" | |
"runtime" | |
"time" | |
) | |
const ( | |
C2_ENABLE = nxp.UART_C2_TE | nxp.UART_C2_RE | nxp.UART_C2_RIE | nxp.UART_C2_ILIE | |
C2_TX_ACTIVE = C2_ENABLE | nxp.UART_C2_TIE | |
C2_TX_COMPLETING = C2_ENABLE | nxp.UART_C2_TCIE | |
C2_TX_INACTIVE = C2_ENABLE | |
IRQ_PRIORITY = 64 | |
) | |
func BAUD2DIV(baud uint32) uint32 { | |
return (((machine.CPUFrequency() * 2) + ((baud) >> 1)) / (baud)) | |
} | |
func main() { | |
// nxp.GPIOC.PDDR.SetBits(1 << 5) | |
// nxp.PORTC.PCR5.SetBits(nxp.PORT_PCR5_SRE | nxp.PORT_PCR5_DSE | 1<<nxp.PORT_PCR0_MUX_Pos) | |
// nxp.PORTC.PCR5.ClearBits(nxp.PORT_PCR5_ODE) | |
machine.LED.Configure(machine.PinConfig{Mode: machine.PinOutput}) | |
serialBegin(BAUD2DIV(9600)) | |
serialPutchar('\r') | |
serialPutchar('\n') | |
p := machine.LED.Fast() | |
for { | |
serialPutchar('a') | |
// nxp.GPIOC.PSOR.Set(1 << 5) | |
p.Set() | |
runtime.Sleep((time.Second / 4).Microseconds()) | |
// nxp.GPIOC.PCOR.Set(1 << 5) | |
p.Clear() | |
runtime.Sleep(time.Second.Microseconds()) | |
} | |
} | |
func serialBegin(divisor uint32) { | |
// turn on the clock | |
nxp.SIM.SCGC4.Set(nxp.SIM_SCGC4_UART0) | |
// configure pin 0 | |
nxp.PORTB.PCR16.Set(nxp.PORT_PCR0_PE | nxp.PORT_PCR0_PS | nxp.PORT_PCR0_PFE | nxp.PORT_PCR0_MUX(3)) | |
// configure pin 1 | |
nxp.PORTB.PCR17.Set(nxp.PORT_PCR0_DSE | nxp.PORT_PCR0_SRE | nxp.PORT_PCR0_MUX(3)) | |
if divisor < 32 { | |
divisor = 32 | |
} | |
nxp.UART0.BDH.Set(uint8((divisor >> 13) & 0x1F)) | |
nxp.UART0.BDL.Set(uint8((divisor >> 5) & 0xFF)) | |
nxp.UART0.C4.Set(uint8(divisor & 0x1F)) | |
nxp.UART0.C1.Set(nxp.UART_C1_ILT) | |
nxp.UART0.TWFIFO.Set(2) // tx watermark, causes S1_TDRE to set | |
nxp.UART0.RWFIFO.Set(4) // rx watermark, causes S1_RDRF to set | |
nxp.UART0.PFIFO.Set(nxp.UART_PFIFO_TXFE | nxp.UART_PFIFO_RXFE) | |
nxp.UART0.C2.Set(C2_TX_INACTIVE) | |
// arm.SetPriority(nxp.IRQ_UART0_RX_TX, IRQ_PRIORITY) | |
// arm.EnableIRQ(nxp.IRQ_UART0_RX_TX) | |
} | |
func serialPutchar(c byte) { | |
if !nxp.SIM.SCGC4.HasBits(nxp.SIM_SCGC4_UART0) { | |
return | |
} | |
if !nxp.UART0.S1.HasBits(nxp.UART_S1_TDRE) { | |
// not ready, discard | |
return | |
} | |
nxp.UART0.D.Set(c) | |
nxp.UART0.C2.Set(C2_TX_ACTIVE) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment