Skip to content

Instantly share code, notes, and snippets.

@firelizzard18
Last active February 18, 2020 07:09
Show Gist options
  • Save firelizzard18/eaaa532f7ee18a7619b3b682490960ee to your computer and use it in GitHub Desktop.
Save firelizzard18/eaaa532f7ee18a7619b3b682490960ee to your computer and use it in GitHub Desktop.
TinyGo Teensy 3.6 Test
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