machine/atsamd21: correct pad/pin handling when using both UART and USBCDC interfaces at same time

Signed-off-by: Ron Evans <ron@hybridgroup.com>
Этот коммит содержится в:
Ron Evans 2019-04-17 11:45:42 +02:00
родитель 0d2a3ce532
коммит 8d3b5a58d1
2 изменённых файлов: 14 добавлений и 14 удалений

Просмотреть файл

@ -44,8 +44,8 @@ const (
// UART1 pins // UART1 pins
const ( const (
UART_TX_PIN = D1 UART_TX_PIN = D10
UART_RX_PIN = D0 UART_RX_PIN = D11
) )
// I2C pins // I2C pins

Просмотреть файл

@ -416,7 +416,7 @@ var (
UART0 = USBCDC{Buffer: NewRingBuffer()} UART0 = USBCDC{Buffer: NewRingBuffer()}
// The first hardware serial port on the SAMD21. Uses the SERCOM0 interface. // The first hardware serial port on the SAMD21. Uses the SERCOM0 interface.
UART1 = UART{Bus: sam.SERCOM0_USART, Buffer: NewRingBuffer()} UART1 = UART{Bus: sam.SERCOM1_USART, Buffer: NewRingBuffer()}
) )
const ( const (
@ -453,26 +453,26 @@ func (uart UART) Configure(config UARTConfig) {
// determine pads // determine pads
var txpad, rxpad int var txpad, rxpad int
switch config.TX { switch config.TX {
case UART_TX_PIN: case PA10:
txpad = sercomTXPad2 txpad = sercomTXPad2
case D10: case PA18:
txpad = sercomTXPad2 txpad = sercomTXPad2
case D11: case PA16:
txpad = sercomTXPad0 txpad = sercomTXPad0
default: default:
panic("Invalid TX pin for UART") panic("Invalid TX pin for UART")
} }
switch config.RX { switch config.RX {
case UART_RX_PIN: case PA11:
rxpad = sercomRXPad3 rxpad = sercomRXPad3
case D10: case PA18:
rxpad = sercomRXPad2 rxpad = sercomRXPad2
case D11: case PA16:
rxpad = sercomRXPad0 rxpad = sercomRXPad0
case D12: case PA19:
rxpad = sercomRXPad3 rxpad = sercomRXPad3
case D13: case PA17:
rxpad = sercomRXPad1 rxpad = sercomRXPad1
default: default:
panic("Invalid RX pin for UART") panic("Invalid RX pin for UART")
@ -531,11 +531,11 @@ func (uart UART) Configure(config UARTConfig) {
uart.Bus.INTENSET = sam.SERCOM_USART_INTENSET_RXC uart.Bus.INTENSET = sam.SERCOM_USART_INTENSET_RXC
// Enable RX IRQ. // Enable RX IRQ.
if config.TX == UART_TX_PIN { if config.TX == PA10 {
// UART0 // UART0
arm.EnableIRQ(sam.IRQ_SERCOM0) arm.EnableIRQ(sam.IRQ_SERCOM0)
} else { } else {
// UART1 // UART1 which is the normal default, since UART0 is used for USBCDC.
arm.EnableIRQ(sam.IRQ_SERCOM1) arm.EnableIRQ(sam.IRQ_SERCOM1)
} }
} }
@ -563,7 +563,7 @@ func (uart UART) WriteByte(c byte) error {
return nil return nil
} }
//go:export SERCOM0_IRQHandler //go:export SERCOM1_IRQHandler
func handleUART1() { func handleUART1() {
// should reset IRQ // should reset IRQ
UART1.Receive(byte((UART1.Bus.DATA & 0xFF))) UART1.Receive(byte((UART1.Bus.DATA & 0xFF)))