Hi,
Following this thread, I better understand the problems I had when I tried to
port RIOT on Arduino/Genuino Zero in [1]. I'll test your changes in
cpu/samd21/periph/uart.c to see if they fix them. Note that it uses an Atmel
ATSAMD21G18 MCU which is again another variant of samd21.
Alex
[1] https://github.com/RIOT-OS/RIOT/pull/5475
- Mail original -
> As promissed ...
>
> The final change to make it work was selecting the correct "mux". There
> were a few hardcoded things in
> * boards/samr21-xpro/include/periph_conf.h
> * cpu/samd21/periph/uart.c
>
> SAMR21_XPRO has the first serial connected to:
>RX - PA5
>TX - PA4
> static const uart_conf_t uart_config[] = {
> /* device, RX pin, TX pin, mux */
> {>USART, GPIO_PIN(PA,5), GPIO_PIN(PA,4), GPIO_MUX_D},
>
>
> My SODAQ Autonomo board has the first serial connected to:
>RX - PA9
>TX - PA10
> static const uart_conf_t uart_config[] = {
> /* device, RX pin, TX pin, mux */
> {>USART, GPIO_PIN(PA,9), GPIO_PIN(PA,10), GPIO_MUX_C},
>
> Is that all? No, welcome to the SERCOM world of ARM Cortex M0.
> In cpu/sam???/periph/uart.c some changes are needed too. In the next
> diff, the samr21
> is the "old" samd21.
>
> --- cpu/samd21/periph/uart.c2016-06-13 22:41:15.358773522 +0200
> +++ cpu/samr21/periph/uart.c2016-05-31 19:57:02.788554067 +0200
> @@ -86,10 +86,9 @@
> /* reset the UART device */
> dev->CTRLA.reg = SERCOM_USART_CTRLA_SWRST;
> while (dev->SYNCBUSY.reg & SERCOM_USART_SYNCBUSY_SWRST) {}
> -/* set asynchronous mode w/o parity, LSB first, PAD2 to TX, PAD1 to
> RX, sample rate 16x and
> +/* set asynchronous mode w/o parity, LSB first, PAD0 to TX, PAD1 to
> RX and
>* use internal clock */
> dev->CTRLA.reg = (SERCOM_USART_CTRLA_DORD |
> - SERCOM_USART_CTRLA_TXPO(0x1) |
> SERCOM_USART_CTRLA_RXPO(0x1) |
> SERCOM_USART_CTRLA_SAMPR(0x1) |
> SERCOM_USART_CTRLA_MODE_USART_INT_CLK);
>
>
> Notice the TXPO and RXPO. These indicate which "pads" the pin can use on
> a certain SERCOM.
> So, what we can learn from this is that we need to expand uart_conf_t.
> We need PAD configuration
> too. (BTW, Arduino Core is doing similar things.)
>
> Was this a TL;DR? Sorry about it then.
> -- Kees
>
>
> On 13-06-16 23:28, Peter Kietzmann wrote:
> > Congrats! Looking forward to hear the trick that did it :-).
> >
> > Good night
> > Peter
> >
> > Am 13.06.2016 um 23:21 schrieb Kees Bakker:
> >> On 13-06-16 20:55, Kees Bakker wrote:
> >>>
> >>> That is more or less already what I did. I filled in uart_config[]
> >>> with two devices
> >>> and I have a serial line connect to my PC. This configuration works
> >>> with the Arduino
> >>> setup. But not yet with RIOT.
> >>
> >> I almost gave up ..., but then ...
> >>
> >> �main(): This is RIOT! (Version:
> >> 2016.07-devel-191-g42127-rapper-sodaq-autonomo)
> >> Hello World!
> >> You are running RIOT on a(n) sodaq-autonomo board.
> >> This board features a(n) samd21 MCU.
> >>
> >> Yeah, it's working. Well, hello world is.
> >> (( It's getting too late now. I'll explain later this week what was
> >> needed to make it work. ))
> >>
> >
>
>
> --
> Kees Bakker
> Founder
> SODAQ
> M. 0031617737165
> www.sodaq.com
>
> ___
> devel mailing list
> devel@riot-os.org
> https://lists.riot-os.org/mailman/listinfo/devel
>
___
devel mailing list
devel@riot-os.org
https://lists.riot-os.org/mailman/listinfo/devel