TI TM4C1294XL Problema de programación

0

Estoy trabajando en una plataforma de lanzamiento TM4C1294XL de TI con KEIL y tuve un problema al principio. Instalé todos los controladores, tanto para USB como para KEIL, luego subí con éxito el ejemplo de TI a bordo para que funcionara sin ningún problema. Después de eso agrego un código muy básico, en el programa predeterminado solo parpadea el LED de usuario del PN0 y agrego un poco de código para parpadear PN1 adicionalmente, pero nada ha cambiado. El LED PN0 sigue parpadeando pero PN1 no lo está. Intenté parpadear otros LEDS PF0, PF4 integrados, pero el resultado es el mismo. Aquí está el código:

#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_memmap.h"
#include "driverlib/debug.h"
#include "driverlib/gpio.h"
#include "driverlib/sysctl.h"

/**
  * @brief  Program main function
  * @param  void    
  * @retval none
  */
int main(void)
{
    volatile uint32_t ui32Loop;

        /* Enable PORTN peripheral access */
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPION);

    /* Check if the peripheral access is enabled. */
    while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPION))
    {
    }

    /* Enable the GPIO pin for the LEDS (PN0, PN1).  Set the direction as output, and
       enable the GPIO pin for digital function. */
    GPIOPinTypeGPIOOutput(GPIO_PORTN_BASE, GPIO_PIN_0);     
    GPIOPinTypeGPIOOutput(GPIO_PORTN_BASE, GPIO_PIN_1);

    while(1)
    { 
        /* Turn on the LEDS. */
        GPIOPinWrite(GPIO_PORTN_BASE, GPIO_PIN_0, 0x01);        
        GPIOPinWrite(GPIO_PORTN_BASE, GPIO_PIN_1, 0x01);

        /* Delay for a bit. */       
        for(ui32Loop = 0; ui32Loop < 1200000; ui32Loop++)
        {
        }

        /* Turn off the LEDS. */
        GPIOPinWrite(GPIO_PORTN_BASE, GPIO_PIN_0, 0x00);
        GPIOPinWrite(GPIO_PORTN_BASE, GPIO_PIN_1, 0x00);

        /* Delay for a bit. */   
        for(ui32Loop = 0; ui32Loop < 1200000; ui32Loop++)
        {
        }
    }
}

He estado trabajando en los microcontroladores de ST durante más de 2 años, pero nunca tuve ese tipo de problema. ¿Es posible un problema causado por alguna característica de protección contra escritura?

    
pregunta Batu92k

1 respuesta

3

Esto se debe a la forma en que funciona la función driverlib GPIOPinWrite .

void GPIOPinWrite(uint32_t ui32Port, uint8_t ui8Pins, uint8_t ui8Val)
  • ui32Port es la dirección base del puerto GPIO.
  • ui8Pins es la representación de los pin (s) empaquetados en bits.
  • ui8Val es el valor para escribir en el pin (s).

El ui8Val es el valor que se escribirá en los pines del puerto que se seleccionan con los ui8Pins , no en el único pin específico. Por lo tanto, su código funcionará si lo vuelve a escribir de la siguiente manera:

// Turn on the LEDs.
GPIOPinWrite(GPIO_PORTN_BASE, (GPIO_PIN_0 | GPIO_PIN_1), (GPIO_PIN_0 | GPIO_PIN_1));
// Turn off the LEDs.
GPIOPinWrite(GPIO_PORTN_BASE, GPIO_PIN_0 | GPIO_PIN_1, 0x00);
    
respondido por el GAttuso

Lea otras preguntas en las etiquetas