I'm following along with Stanford's new CS140e course and noticed something peculiar I cannot explain.
My kernel boots up and sets up GPIOs 16, 5, 6, 13, 19, 26 referring to pinouts 36, 29, 31, 33, 35, 37 as shown here:
I have connected 6 LEDs to the pins. During bootup, I let each of them blink 3 times (via FSELx -> Output, then Set/Clear). Works as expected.
Then I enable the Mini-UART, which is connected to a CP2102 to pins 4-10 (GPIO14/15 and 3.3V/GND). I then enter a mini-shell loop where I can issue commands to toggle the 6 GPIOs. This works as expected, except...
... that once I enable the Mini-UART, I can no longer toggle GPIO19. It stays off. I can still toggle all other 5.
Moreover, if I reinitialize all 6 GPIOs (by resetting their FSELx to the Output function), the Mini-UART ceases to function. (This is somewhat consistent with the manual, which recommends setting up the GPIOs before the mini-UART. Though it wasn't clear to me to which GPIOs they are referring - all of them or just GPIO14/15's Alt5 function which is needed for the mini-UART).
Is there a known conflict between using the mini-UART and GPIO19?
What, if anything, is known about the initialization order of the mini-UART vs GPIOs?