This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Fault at initializing UART console with UARTClockSource and UARTStudioConfig.

Hi, I'll hope you can help me with this problem.
I've added the  "utils/uartstdio.c"  to the workspace and also I tested the example code "hello" and works.
If I use UARTConfigSetExpClk  i cand send characteres.

Here is my code:

#define RED_LED        GPIO_PIN_1
#define    BLUE_LED    GPIO_PIN_2
#define GREEN_LED    GPIO_PIN_3
#define SW1            GPIO_PIN_4
#define    SW2            GPIO_PIN_0

// Variables para el control, directo, del angulo.
#define minAlpha    9000        //
#define maxAlpha    590000        //  La diferencia es de 581000
uint32_t alpha = maxAlpha;                                // Nos aseguramos que el motor inicie lento.

// Variables para usar con QEI
uint8_t QEI_fs = 0x01;            // Tiempo de captura en el QEI (1/QEI_fs)
float rpm = 0;

// Variables auxiliares para leds
uint8_t state = 0x00;            // Variable auxiliar para usar en el led verder, QEI
uint8_t state2 = 0x02;
uint8_t state4 = 0x04;

uint32_t V_rpm[20] ;
uint32_t V_alpha[20] ;
uint8_t count = 0;


void config()
{
    SysCtlClockSet(SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ);

    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);                                        // Reloj del puerto F, Led's e interruptores
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);                                        // Reloj del puerto D, QEI
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

    // Configuracion del puerto UART
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
    ROM_GPIOPinConfigure(GPIO_PA0_U0RX);
    ROM_GPIOPinConfigure(GPIO_PA1_U0TX);
    ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);                                                                    // Configure the pins for the receiver and transmitter using GPIOPinConfigure
    //UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(), 115200,(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));    // Initialize the parameters for the UART: 115200, 8-1-N
    UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC);

        //
        // Initialize the UART for console I/O.
        //
        UARTStdioConfig(0, 115200, 16000000);
        //
        UARTStdioConfig(0, 115200, 16000000);

    // Configuracion del puerto digital GPIOF
        // Se desbloquea el GPIOF_0, para poder ocupar SW2
        HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;
        HWREG(GPIO_PORTF_BASE + GPIO_O_CR) |= 0x01;
        HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = 0;
    GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, RED_LED|BLUE_LED|GREEN_LED);
    ROM_GPIOPinTypeGPIOInput(GPIO_PORTF_BASE, SW1 | SW2);                                // Se declara pin de entrada, SW1 y SW2
    //ROM_GPIOPadConfigSet(GPIO_PORTF_BASE, SW1 , GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);    // Se configura la resistencia pull-up PF_4
    ROM_GPIOPadConfigSet(GPIO_PORTF_BASE, SW2 , GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);    // Se configura la resistencia pull-up PF_0

    // CONFIGURACIONES DEL QEI
        // Se desbloquea le pin GPIOD7, para usarlo con el QEI
        HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;
        HWREG(GPIO_PORTD_BASE + GPIO_O_CR) |= 0x80;
        HWREG(GPIO_PORTD_BASE + GPIO_O_AFSEL) &= ~0x80;
        HWREG(GPIO_PORTD_BASE + GPIO_O_DEN) |= 0x80;
        HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = 0;
    SysCtlPeripheralEnable(SYSCTL_PERIPH_QEI0);                                                // Se habilita el periferioco QEI
    GPIOPinConfigure(GPIO_PD6_PHA0);                                                        // Pin GPIOD6 como PHA0 // GPIOPinConfigure(0x00031806);  //0x00031806 =>GPIO_PD6_PHA0
    GPIOPinTypeQEI(GPIO_PORTD_BASE, GPIO_PIN_6);                                            // Pin GPIOD6 como PHA0
    QEIConfigure(QEI0_BASE,(QEI_CONFIG_CAPTURE_A | QEI_CONFIG_NO_RESET | QEI_CONFIG_CLOCK_DIR | QEI_CONFIG_NO_SWAP), 1725);  // Configuracion del enconder de cuadratura
    QEIVelocityConfigure(QEI0_BASE, QEI_VELDIV_2, (SysCtlClockGet()/QEI_fs));                 // Divide by clock speed to get counts/sec
    QEIVelocityEnable(QEI0_BASE);                                                            // QEI velocidad activada

    // CONFIGURACIONES DEL TIMER
    SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
    TimerConfigure(TIMER0_BASE, TIMER_CFG_ONE_SHOT);
    TimerLoadSet(TIMER0_BASE, TIMER_A, minAlpha + alpha);

    // CONFIGURACION DE INTERRUPCIONES
    IntPrioritySet(INT_TIMER0A, 0x20);                        // Prioridad 1, del TIMER0
    IntEnable(INT_TIMER0A);
    TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);        // Interrupcion TIMER0, activada

    IntPrioritySet(INT_QEI0, 0x04);                            // Prioridad  2, de la interrupcion QEI
    IntEnable(INT_QEI0);                                    // Habilitada interrupcion de QEI
    QEIIntEnable(QEI0_BASE,QEI_INTTIMER);                    // Habilitada la interrupcion QEI

    IntPrioritySet(GPIO_PORTF_BASE,0x00);                    // Prioridad 0, para el cruce por cero.
    IntEnable(INT_GPIOF);                                    // Habilitada la interrupcion GPIOF PF_4
    GPIOIntEnable(GPIO_PORTF_BASE, GPIO_INT_PIN_4);            // Habilitada en el pin 4, SW1


    //Erase a block of the flash.
    //
    FlashErase(0x1000);
    //
    // Program some data into the newly erased block of the flash.
    //
    //pui32Data[0] = 0;

    IntMasterEnable();
    // ACTIVACION DE PERIFERICOS
    TimerEnable(TIMER0_BASE, TIMER_A);
    QEIEnable(QEI0_BASE);

}


void main(void){
    config();

    while(1){
        if(alpha <= 357600){
            FlashProgram(V_rpm,  0x1000, sizeof(V_rpm));
            FlashProgram(V_alpha,0x106C,sizeof(V_alpha));
            while(1);
            }
        }
}



// Envia el pulso para controlar los SCR's
void Timer0IntHandler(void){
    TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);            // Clear the timer interrupt
    IntMasterDisable();                                        // Se deshabilitan las interrupciones
    GPIOPinWrite(GPIO_PORTF_BASE, RED_LED, 0x02);
    ROM_SysCtlDelay(5333);                                    // (3 ciclos de reloj)(12.5ns)(5333) ~ 200us
    GPIOPinWrite(GPIO_PORTF_BASE, RED_LED, 0x00);
    IntMasterEnable();                                        // Habilitamos las interrupciones
}

// Obtiene la velocidad del encoder
void QEI0IntHandler(void){
    float velocidad;
    QEIIntClear(QEI0_BASE,QEI_INTTIMER);
    //GPIOPinWrite(GPIO_PORTF_BASE, GREEN_LED, state);
    state = ~ state;
    velocidad = QEIVelocityGet(QEI0_BASE);
    rpm = (velocidad/1024)*60*QEI_fs;                                    // Calculo de las revoluciones
    if (alpha > 357600){
        alpha -= 11620;
        V_rpm[count] =(uint32_t) rpm;
        V_alpha[count] = alpha;
        count ++;
    }
}

// Detecta el cruce por cero y manda el angulo para controlar la velocidad
void GPIOFIntHandler(void){
    GPIOIntClear(GPIO_PORTF_BASE, GPIO_INT_PIN_4);
    //GPIOPinWrite(GPIO_PORTF_BASE, BLUE_LED, state4);
    state4 = ~state4;
    TimerLoadSet(TIMER0_BASE, TIMER_A, minAlpha + alpha);
    TimerEnable(TIMER0_BASE, TIMER_A);
}