コード例 #1
0
ファイル: gpio_stm32f4xx.c プロジェクト: robert-b/baseflight
void gpioStart(void)
{

    gpio_config_t gpio;

    //set swd
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource13, GPIO_AF_SWJ);
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource14, GPIO_AF_SWJ);

    // Make all GPIO in by default to save power and reduce noise
    gpio.pin = Pin_All & ~(Pin_13 | Pin_14 | Pin_15);
    gpio.mode = Mode_AIN;
    gpioInit(GPIOA, &gpio);
    gpio.pin = Pin_All;
    gpioInit(GPIOB, &gpio);
    gpioInit(GPIOC, &gpio);
    gpioInit(GPIOD, &gpio);

    struct {
        GPIO_TypeDef *gpio;
        gpio_config_t cfg;
    } gpio_setup[] = {
#ifdef LED0
            { .gpio = LED0_GPIO, .cfg = { LED0_PIN, Mode_Out_OD, Speed_50MHz } },
#endif
#ifdef LED1

            {
                .gpio = LED1_GPIO,
コード例 #2
0
static void mpu6050GyroInit(void)
{
    gpio_config_t gpio;

    // MPU_INT output on rev4/5 hardware (PB13, PC13)
    gpio.pin = Pin_13;
    gpio.speed = Speed_2MHz;
    gpio.mode = Mode_IN_FLOATING;
    if (hse_value == 8000000)
        gpioInit(GPIOB, &gpio);
    else if (hse_value == 12000000)
        gpioInit(GPIOC, &gpio);

    i2cWrite(MPU6050_ADDRESS, MPU_RA_PWR_MGMT_1, 0x80);      //PWR_MGMT_1    -- DEVICE_RESET 1
    delay(5);
    i2cWrite(MPU6050_ADDRESS, MPU_RA_SMPLRT_DIV, 0x00); //SMPLRT_DIV    -- SMPLRT_DIV = 0  Sample Rate = Gyroscope Output Rate / (1 + SMPLRT_DIV)
    i2cWrite(MPU6050_ADDRESS, MPU_RA_PWR_MGMT_1, 0x03); //PWR_MGMT_1    -- SLEEP 0; CYCLE 0; TEMP_DIS 0; CLKSEL 3 (PLL with Z Gyro reference)
    i2cWrite(MPU6050_ADDRESS, MPU_RA_INT_PIN_CFG,
            0 << 7 | 0 << 6 | 0 << 5 | 0 << 4 | 0 << 3 | 0 << 2 | 1 << 1 | 0 << 0); // INT_PIN_CFG   -- INT_LEVEL_HIGH, INT_OPEN_DIS, LATCH_INT_DIS, INT_RD_CLEAR_DIS, FSYNC_INT_LEVEL_HIGH, FSYNC_INT_DIS, I2C_BYPASS_EN, CLOCK_DIS
    i2cWrite(MPU6050_ADDRESS, MPU_RA_CONFIG, mpuLowPassFilter); //CONFIG        -- EXT_SYNC_SET 0 (disable input pin for data sync) ; default DLPF_CFG = 0 => ACC bandwidth = 260Hz  GYRO bandwidth = 256Hz)
    i2cWrite(MPU6050_ADDRESS, MPU_RA_GYRO_CONFIG, 0x18);   //GYRO_CONFIG   -- FS_SEL = 3: Full scale set to 2000 deg/sec

    // ACC Init stuff. Moved into gyro init because the reset above would screw up accel config. Oops.
    // Accel scale 8g (4096 LSB/g)
    i2cWrite(MPU6050_ADDRESS, MPU_RA_ACCEL_CONFIG, 2 << 3);
}
コード例 #3
0
void ledInit(bool alternative_led)
{
#if defined(LED0) || defined(LED1) || defined(LED2)
    gpio_config_t cfg;
    cfg.mode = Mode_Out_PP;
    cfg.speed = Speed_2MHz;
#ifdef LED0
    if (alternative_led) {
#ifdef LED0_PERIPHERAL_2
        RCC_AHBPeriphClockCmd(LED0_PERIPHERAL_2, ENABLE);
        led_config[0].gpio = LED0_GPIO_2;
        led_config[0].pin = LED0_PIN_2;
#endif
    } else {
        RCC_AHBPeriphClockCmd(LED0_PERIPHERAL, ENABLE);
        led_config[0].gpio = LED0_GPIO;
        led_config[0].pin = LED0_PIN;
    }
    cfg.pin = led_config[0].pin;
    LED0_OFF;
    gpioInit(led_config[0].gpio, &cfg);
#endif
#ifdef LED1
    if (alternative_led) {
#ifdef LED1_PERIPHERAL_2
        RCC_AHBPeriphClockCmd(LED1_PERIPHERAL_2, ENABLE);
        led_config[1].gpio = LED1_GPIO_2;
        led_config[1].pin = LED1_PIN_2;
#endif
    } else {
        RCC_AHBPeriphClockCmd(LED1_PERIPHERAL, ENABLE);
        led_config[1].gpio = LED1_GPIO;
        led_config[1].pin = LED1_PIN;
    }
    cfg.pin = led_config[1].pin;
    LED1_OFF;
    gpioInit(led_config[1].gpio, &cfg);
#endif
#ifdef LED2
    if (alternative_led) {
#ifdef LED2_PERIPHERAL_2
        RCC_AHBPeriphClockCmd(LED2_PERIPHERAL_2, ENABLE);
        led_config[2].gpio = LED2_GPIO_2;
        led_config[2].pin = LED2_PIN_2;
#endif
    } else {
        RCC_AHBPeriphClockCmd(LED2_PERIPHERAL, ENABLE);
        led_config[2].gpio = LED2_GPIO;
        led_config[2].pin = LED2_PIN;
    }
    cfg.pin = led_config[2].pin;
    LED2_OFF;
    gpioInit(led_config[2].gpio, &cfg);
#endif
#else
    UNUSED(alternative_led);
#endif
}
コード例 #4
0
void hcsr04_init(const sonarHardware_t *initialSonarHardware)
{
    gpio_config_t gpio;
    EXTI_InitTypeDef EXTIInit;

    sonarHardware = initialSonarHardware;

#ifdef STM32F10X
    // enable AFIO for EXTI support
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
#endif

#ifdef STM32F303xC
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);

    /* Enable SYSCFG clock otherwise the EXTI irq handlers are not called */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
#endif

    // trigger pin
    gpio.pin = sonarHardware->trigger_pin;
    gpio.mode = Mode_Out_PP;
    gpio.speed = Speed_2MHz;
    gpioInit(GPIOB, &gpio);

    // echo pin
    gpio.pin = sonarHardware->echo_pin;
    gpio.mode = Mode_IN_FLOATING;
    gpioInit(GPIOB, &gpio);

#ifdef STM32F10X
    // setup external interrupt on echo pin
    gpioExtiLineConfig(GPIO_PortSourceGPIOB, sonarHardware->exti_pin_source);
#endif

#ifdef STM32F303xC
    gpioExtiLineConfig(EXTI_PortSourceGPIOB, sonarHardware->exti_pin_source);
#endif

    EXTI_ClearITPendingBit(sonarHardware->exti_line);

    EXTIInit.EXTI_Line = sonarHardware->exti_line;
    EXTIInit.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTIInit.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
    EXTIInit.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTIInit);

    NVIC_InitTypeDef NVIC_InitStructure;

    NVIC_InitStructure.NVIC_IRQChannel = sonarHardware->exti_irqn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = NVIC_PRIORITY_BASE(NVIC_PRIO_SONAR_ECHO);
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = NVIC_PRIORITY_SUB(NVIC_PRIO_SONAR_ECHO);
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    lastMeasurementAt = millis() - 60; // force 1st measurement in hcsr04_get_distance()
}
コード例 #5
0
static void mpu6050GyroInit(void)
{
    uint8_t DLPFCFG;
    gpio_config_t gpio;

    // MPU_INT output on rev4/5 hardware (PB13, PC13)
    gpio.pin = Pin_13;
    gpio.speed = Speed_2MHz;
    gpio.mode = Mode_IN_FLOATING;
    if (hse_value == 8000000) gpioInit(GPIOB, &gpio);
    else if (hse_value == 12000000) gpioInit(GPIOC, &gpio);

    i2cWrite(MPU6050_ADDRESS, MPU_RA_PWR_MGMT_1, 0x80);      //PWR_MGMT_1    -- DEVICE_RESET 1
    delay(5);
    i2cWrite(MPU6050_ADDRESS, MPU_RA_SMPLRT_DIV, 0x00);      //SMPLRT_DIV    -- SMPLRT_DIV = 0  Sample Rate = Gyroscope Output Rate / (1 + SMPLRT_DIV)
    i2cWrite(MPU6050_ADDRESS, MPU_RA_PWR_MGMT_1, 0x03);      //PWR_MGMT_1    -- SLEEP 0; CYCLE 0; TEMP_DIS 0; CLKSEL 3 (PLL with Z Gyro reference)
    i2cWrite(MPU6050_ADDRESS, MPU_RA_INT_PIN_CFG, 0 << 7 | 0 << 6 | 0 << 5 | 0 << 4 | 0 << 3 | 0 << 2 | 1 << 1 | 0 << 0);  // INT_PIN_CFG   -- INT_LEVEL_HIGH, INT_OPEN_DIS, LATCH_INT_DIS, INT_RD_CLEAR_DIS, FSYNC_INT_LEVEL_HIGH, FSYNC_INT_DIS, I2C_BYPASS_EN, CLOCK_DIS
    /*  DLPF_CFG 0: ACC 260Hz // GYRO 256Hz
    	  DLPF_CFG 1: ACC 184Hz // GYRO 188Hz
    	  DLPF_CFG 2: ACC 94Hz  // GYRO  98Hz
    	  DLPF_CFG 3: ACC 44Hz  // GYRO  42Hz
    	  DLPF_CFG 4: ACC 21Hz  // GYRO  20Hz
    	  DLPF_CFG 5: ACC 10Hz  // GYRO  10Hz
    	  DLPF_CFG 6: ACC  5Hz  // GYRO   5Hz*/
    switch (cfg.gy_lpf)
    {
    case 256:
        DLPFCFG = 0;
        break;
    case 188:
        DLPFCFG = 1;
        break;
    case 98:
        DLPFCFG = 2;
        break;
    default:
    case 42:
        DLPFCFG = 3;
        break;
    case 20:
        DLPFCFG = 4;
        break;
    case 10:
        DLPFCFG = 5;
        break;
    case 5:
        DLPFCFG = 6;
        break;
    }
    i2cWrite(MPU6050_ADDRESS, MPU_RA_CONFIG, DLPFCFG);       // CONFIG        -- EXT_SYNC_SET 0 (disable input pin for data sync) ; default DLPF_CFG = 0 => ACC bandwidth = 260Hz  GYRO bandwidth = 256Hz)
    i2cWrite(MPU6050_ADDRESS, MPU_RA_GYRO_CONFIG, 0x18);     // GYRO_CONFIG   -- FS_SEL = 3: Full scale set to 2000 deg/sec
//    i2cWrite(MPU6050_ADDRESS, MPU_RA_ACCEL_CONFIG, 2 << 3);// Accel scale 8g (4096 LSB/g)
    i2cWrite(MPU6050_ADDRESS, MPU_RA_ACCEL_CONFIG, 1 << 3);  // Accel scale 4g (8192 LSB/g)    
}
コード例 #6
0
ファイル: sonar_hcsr04.c プロジェクト: gurkenfolie/inav
void hcsr04_set_sonar_hardware(void)
{
#if !defined(UNIT_TEST)

#ifdef STM32F10X
    // enable AFIO for EXTI support
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
#endif

#ifdef STM32F303xC
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);

    /* Enable SYSCFG clock otherwise the EXTI irq handlers are not called */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
#endif

    gpio_config_t gpio;
    // trigger pin
    gpio.pin = sonarHcsr04Hardware.trigger_pin;
    gpio.mode = Mode_Out_PP;
    gpio.speed = Speed_2MHz;
    gpioInit(sonarHcsr04Hardware.trigger_gpio, &gpio);
    // echo pin
    gpio.pin = sonarHcsr04Hardware.echo_pin;
    gpio.mode = Mode_IN_FLOATING;
    gpioInit(sonarHcsr04Hardware.echo_gpio, &gpio);

#ifdef STM32F10X
    // setup external interrupt on echo pin
    gpioExtiLineConfig(GPIO_PortSourceGPIOB, sonarHcsr04Hardware.exti_pin_source);
#endif

#ifdef STM32F303xC
    gpioExtiLineConfig(EXTI_PortSourceGPIOB, sonarHcsr04Hardware.exti_pin_source);
#endif

    EXTI_ClearITPendingBit(sonarHcsr04Hardware.exti_line);

    EXTI_InitTypeDef EXTIInit;
    EXTIInit.EXTI_Line = sonarHcsr04Hardware.exti_line;
    EXTIInit.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTIInit.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
    EXTIInit.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTIInit);

    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_InitStructure.NVIC_IRQChannel = sonarHcsr04Hardware.exti_irqn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = NVIC_PRIORITY_BASE(NVIC_PRIO_SONAR_ECHO);
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = NVIC_PRIORITY_SUB(NVIC_PRIO_SONAR_ECHO);
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
#endif
}
コード例 #7
0
void enableGPIOPowerUsageAndNoiseReductions(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, ENABLE);

    gpio_config_t gpio;

    gpio.mode = Mode_AIN;
    gpio.pin = Pin_All;
    gpioInit(GPIOA, &gpio);
    gpioInit(GPIOB, &gpio);
    gpioInit(GPIOC, &gpio);
}
コード例 #8
0
ファイル: serial_uart.c プロジェクト: Codeharp/cleanflight
void usartInitAllIOSignals(void)
{
#ifdef STM32F10X
    // Set UART1 TX to output and high state to prevent a rs232 break condition on reset.
    // See issue https://github.com/cleanflight/cleanflight/issues/1433
    gpio_config_t gpio;

    gpio.mode = Mode_Out_PP;
    gpio.speed = Speed_2MHz;
    gpio.pin = UART1_TX_PIN;
    digitalHi(UART1_GPIO, gpio.pin);
    gpioInit(UART1_GPIO, &gpio);

    // Set TX of UART2 and UART3 to input with pull-up to prevent floating TX outputs.
    gpio.mode = Mode_IPU;

#ifdef USE_UART2
    gpio.pin = UART2_TX_PIN;
    gpioInit(UART2_GPIO, &gpio);
#endif

#ifdef USE_UART3
    gpio.pin = UART3_TX_PIN;
    gpioInit(UART3_GPIO, &gpio);
#endif

#endif

#ifdef STM32F303
    // Set TX for UART1, UART2 and UART3 to input with pull-up to prevent floating TX outputs.
    gpio_config_t gpio;

    gpio.mode = Mode_IPU;
    gpio.speed = Speed_2MHz;

#ifdef USE_UART1
    gpio.pin = UART1_TX_PIN;
    gpioInit(UART1_GPIO, &gpio);
#endif

//#ifdef USE_UART2
//    gpio.pin = UART2_TX_PIN;
//    gpioInit(UART2_GPIO, &gpio);
//#endif

#ifdef USE_UART3
    gpio.pin = UART3_TX_PIN;
    gpioInit(UART3_GPIO, &gpio);
#endif

#endif
}
コード例 #9
0
ファイル: drv_hcsr04.c プロジェクト: CamBl98/afrodevices
void hcsr04_init(sonar_config_t config)
{
    gpio_config_t gpio;
    EXTI_InitTypeDef EXTIInit;

    // enable AFIO for EXTI support - already done is drv_system.c
    // RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph, ENABLE);

    switch(config) {
        case sonar_pwm56:
            trigger_pin = Pin_8;   // PWM5 (PB8) - 5v tolerant
            echo_pin = Pin_9;      // PWM6 (PB9) - 5v tolerant
            exti_line = EXTI_Line9;
            exti_pin_source = GPIO_PinSource9;
            exti_irqn = EXTI9_5_IRQn;
            break;
        case sonar_rc78:
            trigger_pin = Pin_0;   // RX7 (PB0) - only 3.3v ( add a 1K Ohms resistor )
            echo_pin = Pin_1;      // RX8 (PB1) - only 3.3v ( add a 1K Ohms resistor )
            exti_line = EXTI_Line1;
            exti_pin_source = GPIO_PinSource1;
            exti_irqn = EXTI1_IRQn;
            break;
    }

    // tp - trigger pin
    gpio.pin = trigger_pin;
    gpio.mode = Mode_Out_PP;
    gpio.speed = Speed_2MHz;
    gpioInit(GPIOB, &gpio);

    // ep - echo pin
    gpio.pin = echo_pin;
    gpio.mode = Mode_IN_FLOATING;
    gpioInit(GPIOB, &gpio);

    // setup external interrupt on echo pin
    gpioExtiLineConfig(GPIO_PortSourceGPIOB, exti_pin_source);

    EXTI_ClearITPendingBit(exti_line);

    EXTIInit.EXTI_Line = exti_line;
    EXTIInit.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTIInit.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
    EXTIInit.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTIInit);

    NVIC_EnableIRQ(exti_irqn);

    last_measurement = millis() - 60; // force 1st measurement in hcsr04_get_distance()
}
コード例 #10
0
static void i2cUnstick(void)
{
    GPIO_TypeDef *gpio;
    gpio_config_t cfg;
    uint16_t scl, sda;
    int i;

    // prepare pins
    gpio = i2cHardwareMap[I2Cx_index].gpio;
    scl = i2cHardwareMap[I2Cx_index].scl;
    sda = i2cHardwareMap[I2Cx_index].sda;

    digitalHi(gpio, scl | sda);

    cfg.pin = scl | sda;
    cfg.speed = Speed_2MHz;
    cfg.mode = Mode_Out_OD;
    gpioInit(gpio, &cfg);

    for (i = 0; i < 8; i++) {
        // Wait for any clock stretching to finish
        while (!digitalIn(gpio, scl))
            delayMicroseconds(10);

        // Pull low
        digitalLo(gpio, scl); // Set bus low
        delayMicroseconds(10);
        // Release high again
        digitalHi(gpio, scl); // Set bus high
        delayMicroseconds(10);
    }

    // Generate a start then stop condition
    // SCL  PB10
    // SDA  PB11
    digitalLo(gpio, sda); // Set bus data low
    delayMicroseconds(10);
    digitalLo(gpio, scl); // Set bus scl low
    delayMicroseconds(10);
    digitalHi(gpio, scl); // Set bus scl high
    delayMicroseconds(10);
    digitalHi(gpio, sda); // Set bus sda high

    // Init pins
    cfg.pin = scl | sda;
    cfg.speed = Speed_2MHz;
    cfg.mode = Mode_AF_OD;
    gpioInit(gpio, &cfg);
}
コード例 #11
0
ファイル: test_TRAP.c プロジェクト: Raydivine/STM8-Simulator
void setUp(void){
  instantiateCPU();
  gpioInit(0x0, 0xFFFF);
 
  pcToLoad = malloc(sizeof(uint32_t));

}
コード例 #12
0
void boardInit() {

    // create queues for usart
    usartRxQueue = xQueueCreate(256, sizeof(char));
    usartTxQueue = xQueueCreate(256, sizeof(char));

    // create a queue from commTask to kalmanTask
    comm2kalmanQueue = xQueueCreate(1, sizeof(comm2kalmanMessage_t));

    // create a queue from mpcTask to commTask
    mpc2commQueue = xQueueCreate(1, sizeof(mpc2commMessage_t));

    // create a queue from kalmanTask to mpcTask
    kalman2mpcQueue = xQueueCreate(1, sizeof(kalman2mpcMessage_t));

    // create a queue from kalmanTask to commTask
    kalman2commQueue = xQueueCreate(1, sizeof(kalman2commMessage_t));

    // create a queue from commTask to mpcTask
    comm2mpcQueue = xQueueCreate(50, sizeof(comm2mpcMessage_t));

    // create a queue from commTask to mpcTask
    resetKalmanQueue = xQueueCreate(1, sizeof(resetKalmanMessage_t));

    // queue for setting particular value of KF
    setKalmanQueue = xQueueCreate(1, sizeof(resetKalmanMessage_t));

	// set th clock and initialize the GPIO
	gpioInit();

	// set the UART
    init_USART4(115200);
}
コード例 #13
0
ファイル: gpio.c プロジェクト: Bediko/r0ket
void gpioSetValue (uint32_t portNum, uint32_t bitPos, uint32_t bitVal)
{
  if (!_gpioInitialised) gpioInit();

  // Get the appropriate register (handled this way to optimise code size)
  REG32 *gpiodata = &GPIO_GPIO0DATA;
  switch (portNum)
  {
    case 0:
      gpiodata = &GPIO_GPIO0DATA;
      break;
    case 1:
      gpiodata = &GPIO_GPIO1DATA;
      break;
    case 2:
      gpiodata = &GPIO_GPIO2DATA;
      break;
    case 3:
      gpiodata = &GPIO_GPIO3DATA;
      break;
  }

  // Toggle value
  bitVal == 1 ? (*gpiodata |= (1 << bitPos)) : (*gpiodata &= ~(1 << bitPos));
}
コード例 #14
0
ファイル: main.c プロジェクト: fabienroyer/NetduinoGo
int main()
{
  while(true){
    Reset();
    systickInit();
    gpioInit();
    adcInit();
    lcdInit();
    tsInit();
    welcomeScreen();
    #ifdef DEBUG
      ledInit();
    #endif
    spiInit();
    while(!IsRebootRequired()){
      if(IsSynchronizationRequired()){
        AssertGoBusIRQ();
      }
      #ifdef DEBUG
        GPIO_ToggleBits(GPIOC, GPIO_Pin_13);
        delay(5);
      #endif
    }
  }
}
コード例 #15
0
ファイル: sysinit.c プロジェクト: garychan/usb-motor-stepper
void systemInit() {
    cpuInit(); // Configure the CPU
    systickInit(CFG_SYSTICK_DELAY_IN_MS); // Start systick timer
    gpioInit(); // Enable GPIO
    pmuInit(); // Configure power management
    step_timer_init();

    // Initialise USB CDC
#ifdef CFG_USBCDC
    lastTick = systickGetTicks(); // Used to control output/printf timing
    CDC_Init(); // Initialise VCOM
    USB_Init(); // USB Initialization
    USB_Connect(TRUE); // USB Connect
    // Wait until USB is configured or timeout occurs
    uint32_t usbTimeout = 0;
    while (usbTimeout < CFG_USBCDC_INITTIMEOUT / 10) {
        if (USB_Configuration)
            break;
        systickDelay(10); // Wait 10ms
        usbTimeout++;
    }
#endif

    // Printf can now be used with UART or USBCDC

}
コード例 #16
0
ファイル: gpio.c プロジェクト: PSU-UROV/Control
uint32_t gpioGetValue (uint32_t portNum, uint32_t bitPos)
{
  if (!_gpioInitialised) gpioInit();

  uint32_t value = 0;

  switch (portNum)
  {
    case 0:
      value = (GPIO_GPIO0DATA & (1 << bitPos)) ? 1 : 0;
      break;
    case 1:
      value = (GPIO_GPIO1DATA & (1 << bitPos)) ? 1 : 0;
      break;
    case 2:
      value = (GPIO_GPIO2DATA & (1 << bitPos)) ? 1 : 0;
      break;
    case 3:
      value = (GPIO_GPIO3DATA & (1 << bitPos)) ? 1 : 0;
      break;
    default:
      break;
  }

  return value;
}
コード例 #17
0
ファイル: gpio.c プロジェクト: TheSeven/LPC1343CodeBase
void gpioSetDir (uint32_t portNum, uint32_t bitPos, gpioDirection_t dir)
{
  if (!_gpioInitialised) gpioInit();

  // Get the appropriate register (handled this way to optimise code size)
  REG32 *gpiodir = &GPIO_GPIO0DIR;
  switch (portNum)
  {
    case 0:
      gpiodir = &GPIO_GPIO0DIR;
      break;
    case 1:
      gpiodir = &GPIO_GPIO1DIR;
      break;
    case 2:
      gpiodir = &GPIO_GPIO2DIR;
      break;
    case 3:
      gpiodir = &GPIO_GPIO3DIR;
      break;
  }

  // Toggle dir
  dir == gpioDirection_Output ? (*gpiodir |= (1 << bitPos)) : (*gpiodir &= ~(1 << bitPos));
}
コード例 #18
0
ファイル: ea_gpio.c プロジェクト: TeamUnix/Project4
/******************************************************************************
 * Initialize gpio
 *****************************************************************************/
static int __init gpio_mod_init(void){
	int ret;
	dev_t dev;

	DPRINT("\ngpio_mod_init\n");

	gpioInit();

	dev = MKDEV(GPIO_MAJOR, 0);

	ret = register_chrdev_region(dev, NUM_GPIO_DEVICES, "gpio");

	if(ret){
		printk("gpio: failed to register char device\n");
		return ret;
	}

	gpio_cdev = cdev_alloc();

	cdev_init(gpio_cdev, &gpio_fops);
	gpio_cdev->owner = THIS_MODULE;
	gpio_cdev->ops   = &gpio_fops;

	ret = cdev_add(gpio_cdev, dev, NUM_GPIO_DEVICES);

	if(ret){
		printk("gpio: Error adding\n");
	}
	
	return ret;
}
コード例 #19
0
ファイル: main.c プロジェクト: quailson/synthBuddy
//MAIN
int main(void)
{
	printf("Hello World!\r\n"); //confirm dingus program has started

	//INITS
	SystemInit();
	gpioInit();
	timInit();
	TIM_ITConfig(TIM6, TIM_IT_Update, DISABLE);	//DISABLE INTERRUPTS FOR AUDIO INITS

	EVAL_AUDIO_Init(OUTPUT_DEVICE_AUTO, 100, SAMPLE_FREQ); //should default to headphones, full volume, 48kHz
	EVAL_AUDIO_Play((uint16_t*) audio_buffer, BUFF); //add once there's audio to hear

	TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE); 	//ENABLE INTERRUPTS AFTER

	printf("Ready!\n"); //print when everythin' is done

	voiceInit(&voice, 1.f, 1.f);


	//YEAH BABY
    while(1)
    {
    	printf("\nP\nI\nZ\nZ\nA\n"); //confirm in loop with pizza spelling contest
    	delay(80000);
    }
}
コード例 #20
0
ファイル: accgyro_mpu.c プロジェクト: gamani/betaflight-bak
void mpuIntExtiInit(void)
{
    gpio_config_t gpio;

    static bool mpuExtiInitDone = false;

    if (mpuExtiInitDone || !mpuIntExtiConfig) {
        return;
    }

#ifdef STM32F303
        if (mpuIntExtiConfig->gpioAHBPeripherals) {
            RCC_AHBPeriphClockCmd(mpuIntExtiConfig->gpioAHBPeripherals, ENABLE);
        }
#endif
#ifdef STM32F10X
        if (mpuIntExtiConfig->gpioAPB2Peripherals) {
            RCC_APB2PeriphClockCmd(mpuIntExtiConfig->gpioAPB2Peripherals, ENABLE);
        }
#endif

    gpio.pin = mpuIntExtiConfig->gpioPin;
    gpio.speed = Speed_2MHz;
    gpio.mode = Mode_IN_FLOATING;
    gpioInit(mpuIntExtiConfig->gpioPort, &gpio);

    configureMPUDataReadyInterruptHandling();

    mpuExtiInitDone = true;
}
コード例 #21
0
ファイル: drv_mpu6050.c プロジェクト: lit1088/baseflight
static void mpu6050GyroInit(sensor_align_e align)
{
    gpio_config_t gpio;

    // MPU_INT output on rev5 hardware (PC13). rev4 was on PB13, conflicts with SPI devices
    if (hw_revision >= NAZE32_REV5) {
        gpio.pin = Pin_13;
        gpio.speed = Speed_2MHz;
        gpio.mode = Mode_IN_FLOATING;
        gpioInit(GPIOC, &gpio);
    }

    i2cWrite(MPU6050_ADDRESS, MPU_RA_PWR_MGMT_1, 0x80);      //PWR_MGMT_1    -- DEVICE_RESET 1
    delay(100);
    i2cWrite(MPU6050_ADDRESS, MPU_RA_SMPLRT_DIV, 0x00);      //SMPLRT_DIV    -- SMPLRT_DIV = 0  Sample Rate = Gyroscope Output Rate / (1 + SMPLRT_DIV)
    i2cWrite(MPU6050_ADDRESS, MPU_RA_PWR_MGMT_1, 0x03);      //PWR_MGMT_1    -- SLEEP 0; CYCLE 0; TEMP_DIS 0; CLKSEL 3 (PLL with Z Gyro reference)
    i2cWrite(MPU6050_ADDRESS, MPU_RA_INT_PIN_CFG, 0 << 7 | 0 << 6 | 0 << 5 | 0 << 4 | 0 << 3 | 0 << 2 | 1 << 1 | 0 << 0);  // INT_PIN_CFG   -- INT_LEVEL_HIGH, INT_OPEN_DIS, LATCH_INT_DIS, INT_RD_CLEAR_DIS, FSYNC_INT_LEVEL_HIGH, FSYNC_INT_DIS, I2C_BYPASS_EN, CLOCK_DIS
    i2cWrite(MPU6050_ADDRESS, MPU_RA_CONFIG, mpuLowPassFilter);  //CONFIG        -- EXT_SYNC_SET 0 (disable input pin for data sync) ; default DLPF_CFG = 0 => ACC bandwidth = 260Hz  GYRO bandwidth = 256Hz)
    i2cWrite(MPU6050_ADDRESS, MPU_RA_GYRO_CONFIG, INV_FSR_2000DPS << 3);

    // ACC Init stuff. Moved into gyro init because the reset above would screw up accel config. Oops.
    // Accel scale 8g (4096 LSB/g)
    i2cWrite(MPU6050_ADDRESS, MPU_RA_ACCEL_CONFIG, INV_FSR_8G << 3);

    if (align > 0)
        gyroAlign = align;
}
コード例 #22
0
ファイル: serial_1wire.c プロジェクト: Aeroprobing/iNavFlight
static void gpio_set_mode(GPIO_TypeDef* gpio, uint16_t pin, GPIO_Mode mode) {
    gpio_config_t cfg;
    cfg.pin = pin;
    cfg.mode = mode;
    cfg.speed = Speed_10MHz;
    gpioInit(gpio, &cfg);
}
コード例 #23
0
ファイル: gpio.c プロジェクト: sdixon99/LPC1343CodeBase
inline void gpioSetValue (const uint32_t portNum, const uint32_t bitPos, const uint32_t bitVal)
{
  if (!_gpioInitialised) gpioInit();

  // Take advantage of the fact the GPIO registers are bit-banded
  (*(pREG32 ((GPIO_GPIO0_BASE + (portNum << 16)) + ((1 << bitPos) << 2)))) = bitVal ? 0xFFF : 0;
}
コード例 #24
0
ファイル: movement.c プロジェクト: cattnb/Senior-Design
void initSensors(void){
	// TODO: init the GPS here
       fd = init_I2C();
       init_compass(fd);
       gpioInit();
	gpsRet = init_GPS();
}
コード例 #25
0
ファイル: ipaq214-bluetooth.c プロジェクト: sergeyz/ipaq21x
int main(int argc, char *argv[]) {
	int i,j,k,portFD;
	unsigned char data[1024];

	gettimeofday(&tStart,NULL);

	output(1,"HP iPAQ 214 BT chip GPIO twiddling util v1.1\n----------------------------------\n");

#ifndef NOIO
	gpioInit(1);
#else
	output(1,"TESTING MODE - NOT USING IO\n");
#endif
	
	if(argc > 1 && strcmp(argv[1],"on")==0){
		portFD=openPort();
		if(portFD == -1){ return 0; }

		output(1,"Shutting down chip first...\n");
#ifndef NOIO
		shutdownChip();
		tcflush(portFD, TCIOFLUSH); //flush buffers again
#endif
		output(1,"Waiting 2 secs.\n");
		sleep(2);

		output(1,"Bringing up chip...\n");
		bringUpChip();

		output(1,"Resetting chip...\n");
#ifndef NOIO
		sendReset(portFD);	
#endif

		output(1,"Turning LED on.\n");
#ifndef NOIO
		gpioSet(3,1);
#endif
	
		output(1,"closing port...");	fflush(stdout);
		close(portFD);
		output(1,"done\n");

	}else if(argc > 1 && strcmp(argv[1],"off")==0){
		output(1,"Shutting down chip...\n");
#ifndef NOIO
		shutdownChip();
		gpioSet(3,0);	//turn LED off
#endif
	
	}else
		printf("usage %s on/off\n",argv[0]);
	
	
#ifndef NOIO
	gpioCleanup();
#endif
	
	return 0;
}
コード例 #26
0
/**
 *  \brief  CSL Audio Class main function
 *
 *  \param  None
 *
 *  \return None
 */
void main(void)
{
    CSL_Status status;
    Uint32 gpioIoDir;

    // Disable trace to reduce MHz load
    //TRC_disable(TRC_GBLTARG);

    /* Clock gate all peripherals */
    CSL_SYSCTRL_REGS->PCGCR1 = 0x7FFF;
    CSL_SYSCTRL_REGS->PCGCR2 = 0x007F;
#if defined(USE_I2S0_PB) || defined(USE_I2S0_REC)
    /* SP0 Mode 1 (I2S0 and GP[5:4]) */
    CSL_FINST(CSL_SYSCTRL_REGS->EBSR, SYS_EBSR_SP0MODE, MODE1);
#else
    /* SP0 Mode 2 (GP[5:0]) -- GPIO02/GPIO04 for debug  */
    CSL_FINST(CSL_SYSCTRL_REGS->EBSR, SYS_EBSR_SP0MODE, MODE2);
#endif
#if defined(USE_I2S1_PB) || defined(USE_I2S1_REC)
    /* SP1 Mode 1 (I2S1 and GP[11:10]) */
    CSL_FINST(CSL_SYSCTRL_REGS->EBSR, SYS_EBSR_SP1MODE, MODE1);
#else
    /* SP1 Mode 2 (GP[11:6]) */
    CSL_FINST(CSL_SYSCTRL_REGS->EBSR, SYS_EBSR_SP1MODE, MODE2); /* need GPIO10 for AIC3204 reset */
#endif
    /* PP Mode 1 (SPI, GPIO[17:12], UART, and I2S2) -- note this allows UART */
    CSL_FINST(CSL_SYSCTRL_REGS->EBSR, SYS_EBSR_PPMODE, MODE1);
    /* Reset C5515 -- ungates all peripherals */
    C5515_reset();

    /* Initialize DSP PLL */
    status = pll_sample();
    if (status != CSL_SOK)
    {
        LOG_printf(&trace, "ERROR: Unable to initialize PLL");
    }

    /* Clear pending timer interrupts */
    CSL_SYSCTRL_REGS->TIAFR = 0x7;

#if !defined(USE_I2S0_PB) && !defined(USE_I2S0_REC)
    /* GPIO02 and GPIO04 for debug */
    /* GPIO10 for AIC3204 reset */
    gpioIoDir = (((Uint32)CSL_GPIO_DIR_OUTPUT)<<CSL_GPIO_PIN2) | 
        (((Uint32)CSL_GPIO_DIR_OUTPUT)<<CSL_GPIO_PIN4) |
        (((Uint32)CSL_GPIO_DIR_OUTPUT)<<CSL_GPIO_PIN10);
#else
    /* GPIO10 for AIC3204 reset */
    gpioIoDir = (((Uint32)CSL_GPIO_DIR_OUTPUT)<<CSL_GPIO_PIN10)
#endif
    status = gpioInit(gpioIoDir, 0x00000000, 0x00000000);
    if (status != GPIOCTRL_SOK)
    {
        LOG_printf(&trace, "ERROR: Unable to initialize GPIO");
    }

    /* Enable the USB LDO */
    *(volatile ioport unsigned int *)(0x7004) |= 0x0001;
}
コード例 #27
0
ファイル: spi_fpga.c プロジェクト: nachiram/bootloader-8-core
void fpga_spiinitgpio(uint32_t DSP_FPGA_CSGPIO)
{

			gpioInit();
    		gpioSetDirection(DSP_FPGA_CSGPIO,GPIO_OUT);
    		gpioSetOutput(DSP_FPGA_CSGPIO);

}
コード例 #28
0
ファイル: pwm_rx.c プロジェクト: Aeroprobing/iNavFlight
static void pwmGPIOConfig(GPIO_TypeDef *gpio, uint32_t pin, GPIO_Mode mode)
{
    gpio_config_t cfg;

    cfg.pin = pin;
    cfg.mode = mode;
    cfg.speed = Speed_2MHz;
    gpioInit(gpio, &cfg);
}
コード例 #29
0
ファイル: lib_i2c.c プロジェクト: Mattnez/bradwii-X4
/*************************************************************************
Initialization of the I2C bus interface. Need to be called only once
*************************************************************************/
void lib_i2c_init(void)
{
    gpio_config_t gpio;

    gpio.pin = Pin_10 | Pin_11;
    gpio.speed = Speed_2MHz;
    gpio.mode = Mode_Out_OD;
    gpioInit(GPIOB, &gpio);
}
コード例 #30
0
ファイル: drv_i2c_soft.c プロジェクト: AlienWiiBF/baseflight
void i2cInit(I2CDevice index)
{
    gpio_config_t gpio;

    gpio.pin = I2C_PINS;
    gpio.speed = Speed_2MHz;
    gpio.mode = Mode_Out_OD;
    gpioInit(I2C_GPIO, &gpio);
}