Exemple #1
0
int main()
{

  /* Clear .bss.  We'll do this inline (vs. calling memset) just to be
   * certain that there are no issues with the state of global variables.
   */
	uint32_t *dest;
  	for (dest = _START_BSS; dest < _END_BSS; )
    {
      *dest++ = 0;
    }
    
    /* enable clock on GPIOD peripheral */
    putreg32((getreg32(STM32_RCC_AHB1ENR) | 0x00000008),STM32_RCC_AHB1ENR);
     
    /* set LED pin output mode */
	putreg32(((uint32_t)GPIO_MODER_OUTPUT << GPIO_MODER_SHIFT(LED_PIN_INDICATE)),STM32_GPIOD_MODER);
	
	// go to c++ code
    _g_globalvar = myclass_main(0, NULL);
	
    while(1)
    {
        putreg32(GPIO_BSRR_SET(LED_PIN_INDICATE),STM32_GPIOD_BSRR);  // set LED pin high
        delay(200000);
        putreg32(GPIO_BSRR_RESET(LED_PIN_INDICATE),STM32_GPIOD_BSRR);  // set LED pin low
        delay(200000);
    }
}
Exemple #2
0
int stm32_hardfault(void) {
    /* enable clock on GPIOD peripheral */
    putreg32((getreg32(STM32_RCC_AHB1ENR) | 0x00000008),STM32_RCC_AHB1ENR);
     
    /* set LED pin output mode */
	putreg32(((uint32_t)GPIO_MODER_OUTPUT << GPIO_MODER_SHIFT(LED_PIN_PANIC)),STM32_GPIOD_MODER);

	for (;;) {
        putreg32(GPIO_BSRR_SET(LED_PIN_PANIC),STM32_GPIOD_BSRR);  // set LED pin high
        delay(200000);
        putreg32(GPIO_BSRR_RESET(LED_PIN_PANIC),STM32_GPIOD_BSRR);  // set LED pin low
        delay(200000);
	}
}
Exemple #3
0
int stm32_configgpio(uint32_t cfgset)
{
  uintptr_t base;
  uint32_t regval;
  uint32_t setting;
  unsigned int regoffset;
  unsigned int port;
  unsigned int pin;
  unsigned int pos;
  unsigned int pinmode;
  //irqstate_t flags;

  /* Verify that this hardware supports the select GPIO port */

  port = (cfgset & GPIO_PORT_MASK) >> GPIO_PORT_SHIFT;
  if (port >= STM32_NGPIO_PORTS)
    {
      return -EINVAL;
    }

  /* Get the port base address */

  base = g_gpiobase[port];

  /* Get the pin number and select the port configuration register for that
   * pin
   */

  pin = (cfgset & GPIO_PIN_MASK) >> GPIO_PIN_SHIFT;

  /* Set up the mode register (and remember whether the pin mode) */

  switch (cfgset & GPIO_MODE_MASK)
    {
      default:
      case GPIO_INPUT:      /* Input mode */
        pinmode = GPIO_MODER_INPUT;
        break;

      case GPIO_OUTPUT:     /* General purpose output mode */
        pinmode = GPIO_MODER_OUTPUT;
        break;

      case GPIO_ALT:        /* Alternate function mode */
        pinmode = GPIO_MODER_ALT;
        break;

      case GPIO_ANALOG:     /* Analog mode */
        pinmode = GPIO_MODER_ANALOG;
        break;
    }

  /* Interrupts must be disabled from here on out so that we have mutually
   * exclusive access to all of the GPIO configuration registers.
   */

  //flags = irqsave();
  CoSchedLock();

  /* Now apply the configuration to the mode register */

  regval  = getreg32(base + STM32_GPIO_MODER_OFFSET);
  regval &= ~GPIO_MODER_MASK(pin);
  regval |= ((uint32_t)pinmode << GPIO_MODER_SHIFT(pin));
  putreg32(regval, base + STM32_GPIO_MODER_OFFSET);

  /* Set up the pull-up/pull-down configuration (all but analog pins) */

  setting = GPIO_PUPDR_NONE;
  if (pinmode != GPIO_MODER_ANALOG)
    {
      switch (cfgset & GPIO_PUPD_MASK)
        {
          default:
          case GPIO_FLOAT:      /* No pull-up, pull-down */
            break;

          case GPIO_PULLUP:     /* Pull-up */
            setting = GPIO_PUPDR_PULLUP;
            break;

          case GPIO_PULLDOWN:   /* Pull-down */
            setting = GPIO_PUPDR_PULLDOWN;
            break;
        }
    }

  regval  = getreg32(base + STM32_GPIO_PUPDR_OFFSET);
  regval &= ~GPIO_PUPDR_MASK(pin);
  regval |= (setting << GPIO_PUPDR_SHIFT(pin));
  putreg32(regval, base + STM32_GPIO_PUPDR_OFFSET);

  /* Set the alternate function (Only alternate function pins) */

  if (pinmode == GPIO_MODER_ALT)
    {
      setting = (cfgset & GPIO_AF_MASK) >> GPIO_AF_SHIFT;
    }