/* Tell the host that the device is ready to start communication */ static void usbs_at91_set_pullup (bool set) { #ifndef CYGDAT_DEVS_USB_AT91_GPIO_SET_PULLUP_PIN_NONE if ( #ifdef CYGNUM_DEVS_USB_AT91_GPIO_SET_PULLUP_INVERTED !set #else set #endif ) { HAL_ARM_AT91_GPIO_SET(CYGDAT_DEVS_USB_AT91_GPIO_SET_PULLUP_PIN); } else { HAL_ARM_AT91_GPIO_RESET(CYGDAT_DEVS_USB_AT91_GPIO_SET_PULLUP_PIN); } #endif }
static void spi_at91_init_bus(cyg_spi_at91_bus_t * spi_bus) { cyg_uint32 ctr; // Create and attach SPI interrupt object cyg_drv_interrupt_create(spi_bus->interrupt_number, 4, (cyg_addrword_t)spi_bus, spi_at91_ISR, spi_at91_DSR, &spi_bus->spi_interrupt_handle, &spi_bus->spi_interrupt); cyg_drv_interrupt_attach(spi_bus->spi_interrupt_handle); // Init transfer mutex and condition cyg_drv_mutex_init(&spi_bus->transfer_mx); cyg_drv_cond_init(&spi_bus->transfer_cond, &spi_bus->transfer_mx); // Init flags spi_bus->transfer_end = true; spi_bus->cs_up = false; // Soft reset the SPI controller HAL_WRITE_UINT32(spi_bus->base+AT91_SPI_CR, AT91_SPI_CR_SWRST); // Configure SPI pins // Put SPI chip select pins in IO output mode for(ctr = 0;ctr<4;ctr++) { if(spi_bus->cs_en[ctr]) { HAL_ARM_AT91_GPIO_CFG_DIRECTION(spi_bus->cs_gpio[ctr],AT91_PIN_OUT); HAL_ARM_AT91_GPIO_SET(spi_bus->cs_gpio[ctr]); } } // Call upper layer bus init CYG_SPI_BUS_COMMON_INIT(&spi_bus->spi_bus); }