En la placa mencionada anteriormente, el puerto C tiene 8 pines en los cuales se usan 0-3 para JTAG (¿Entonces 4-7 debería estar disponible GPIO, verdad?). Estoy usando el siguiente código:
#include <stdint.h>
#include <stdbool.h>
#include "inc/tm4c1294ncpdt.h"
#include "driverlib/gpio.h"
#include "driverlib/sysctl.h"
#include "inc/hw_types.h"
#include "inc/hw_gpio.h"
#include "inc/hw_memmap.h"
int main(void)
{
SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480), 12000000);
SYSCTL_RCGCUART_R = SYSCTL_RCGCUART_R3;
while((SYSCTL_PRUART_R & SYSCTL_PRUART_R3) == 0);
SYSCTL_RCGCGPIO_R = SYSCTL_RCGCGPIO_R0;
while((SYSCTL_PRGPIO_R & SYSCTL_PRGPIO_R0) == 0);
// HWREG(GPIO_PORTC_BASE+ GPIO_O_LOCK) = GPIO_LOCK_KEY;
// HWREG(GPIO_PORTC_BASE + GPIO_O_CR) |= (GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
GPIO_PORTA_AHB_AFSEL_R = GPIO_PIN_4 | GPIO_PIN_5;
GPIO_PORTA_AHB_PCTL_R = 0x00110000;
GPIO_PORTA_AHB_DEN_R = GPIO_PIN_4 | GPIO_PIN_5;
// UART3_LCRH_R &= ~UART_LCRH_FEN;
UART3_IBRD_R = 78;
UART3_FBRD_R = 8;
UART3_LCRH_R |= UART_LCRH_WLEN_8;
UART3_CC_R = 0x0;
// UART3_LCRH_R |= UART_LCRH_FEN;
// UART3_CTL_R |= UART_CTL_TXE | UART_CTL_UARTEN;
UART3_CTL_R |= UART_CTL_UARTEN;
while(1)
{
while( (UART3_FR_R & 0x0020) != 0);
UART3_DR_R = (char) 'a';
SysCtlDelay(1000000);
}
}
El código está configurado para funcionar con el módulo UART 3 ( RCGCUART_R3
) que reside en el puerto A ( RCGCGPIO_R0
), pines 4 y amp; 5. Cambiando la configuración a UART 5 que reside en los pines 6 y amp del puerto C; 7 descargará correctamente el binario al tablero solo por primera vez, en las pruebas posteriores siempre obtengo "No se puede inicializar el objetivo - 0". Todavía recibo el error después de la primera programación exitosa incluso después de hacer Secuencia de desbloqueo
Intentando desbloquear el puerto C incluso con el puerto A se usa en UART No funciona. El código anterior no imprimirá el carácter 'a' cuando la secuencia de desbloqueo no esté comentada. ¿La placa ve el puerto C como una unidad, así que tengo que desbloquear todo el registro? El esquema confirma que los pines 0-3 son para JTAG, mientras que el resto son para GPIO.
Otra pregunta es el uso de buffers UART FIFO . Corregir si me equivoco, FIFO es un búfer utilizado para recibir / escribir datos entre el puerto serie y la memoria. Pero, ¿de qué no estoy seguro, cuándo lo necesito realmente y cuándo no lo necesito?
Otra pregunta, en general, ¿es posible detectar que el puerto UART está conectado? Por ejemplo, detecte un chip FTDI FT232 cuando esté conectado a los pines apropiados.
Muchas gracias!