Пример #1
0
/**
 * \internal
 * \brief Initialize the hardware interface
 *
 * Depending on what interface used for interfacing the OLED controller this
 * function will initialize the necessary hardware.
 */
static void ssd1306_interface_init(void)
{
	struct spi_config config;
	struct spi_slave_inst_config slave_config;

	spi_slave_inst_get_config_defaults(&slave_config);
	slave_config.ss_pin = SSD1306_CS_PIN;
	spi_attach_slave(&ssd1306_slave, &slave_config);

	spi_get_config_defaults(&config);

	config.mux_setting = SSD1306_SPI_PINMUX_SETTING;
	config.pinmux_pad0 = SSD1306_SPI_PINMUX_PAD0;
	config.pinmux_pad1 = SSD1306_SPI_PINMUX_PAD1;
	config.pinmux_pad2 = SSD1306_SPI_PINMUX_PAD2;
	config.pinmux_pad3 = SSD1306_SPI_PINMUX_PAD3;
	config.mode_specific.master.baudrate = SSD1306_CLOCK_SPEED;

	spi_init(&ssd1306_master, SSD1306_SPI, &config);
	spi_enable(&ssd1306_master);

	struct port_config pin;
	port_get_config_defaults(&pin);
	pin.direction = PORT_PIN_DIR_OUTPUT;

	port_pin_set_config(SSD1306_DC_PIN, &pin);
	port_pin_set_config(SSD1306_RES_PIN, &pin);
}
Пример #2
0
/**
* \brief Initialize EDBG SPI communication for SAM0
*
*/
bool adp_interface_init(void)
{
	enum status_code return_value;

	system_init();

	struct spi_slave_inst_config slave_dev_config;

	struct spi_config config;

	spi_slave_inst_get_config_defaults(&slave_dev_config);
	slave_dev_config.ss_pin = EDBG_SPI_SS_PIN;
	spi_attach_slave(&slave, &slave_dev_config);

	spi_get_config_defaults(&config);
	config.mode_specific.master.baudrate = 1000000;
	config.mux_setting = EDBG_SPI_SERCOM_MUX_SETTING;
	config.pinmux_pad0 = EDBG_SPI_SERCOM_PINMUX_PAD0;
	config.pinmux_pad1 = PINMUX_UNUSED;
	config.pinmux_pad2 = EDBG_SPI_SERCOM_PINMUX_PAD2;
	config.pinmux_pad3 = EDBG_SPI_SERCOM_PINMUX_PAD3;

	return_value = spi_init(&edbg_spi, EDBG_SPI, &config);

	spi_enable(&edbg_spi);

	return return_value;
}
/**
 * \internal
 * \brief Initialize the hardware interface.
 */
static void ksz8851snl_interface_init(void)
{
	struct spi_config config;
	struct spi_slave_inst_config slave_config;

	spi_slave_inst_get_config_defaults(&slave_config);
	slave_config.ss_pin = KSZ8851SNL_CS_PIN;
	spi_attach_slave(&ksz8851snl_slave, &slave_config);

	spi_get_config_defaults(&config);

	config.mux_setting = KSZ8851SNL_SPI_PINMUX_SETTING;
	config.pinmux_pad0 = KSZ8851SNL_SPI_PINMUX_PAD0;
	config.pinmux_pad1 = KSZ8851SNL_SPI_PINMUX_PAD1;
	config.pinmux_pad2 = KSZ8851SNL_SPI_PINMUX_PAD2;
	config.pinmux_pad3 = KSZ8851SNL_SPI_PINMUX_PAD3;
	config.mode_specific.master.baudrate = KSZ8851SNL_CLOCK_SPEED;

	spi_init(&ksz8851snl_master, KSZ8851SNL_SPI, &config);
	spi_enable(&ksz8851snl_master);

	/* Configure RSTN pin. */
	struct port_config pin;
	port_get_config_defaults(&pin);
	pin.direction = PORT_PIN_DIR_OUTPUT;
	port_pin_set_config(KSZ8851SNL_RSTN_PIN, &pin);
}
Пример #4
0
void sd_mmc_spi_init(void)
{
	sd_mmc_spi_err = SD_MMC_SPI_NO_ERR;

	// Initialize card detect pin
	struct port_config pin_conf;
	port_get_config_defaults(&pin_conf);

	// Set card detect pin as inputs
	pin_conf.direction	= PORT_PIN_DIR_INPUT;
	pin_conf.input_pull = PORT_PIN_PULL_UP;
	port_pin_set_config(SD_MMC_0_CD_GPIO, &pin_conf);

	// Initialize SPI interface and enable it
	struct spi_config config;
	spi_get_config_defaults(&config);

	config.mux_setting = SD_MMC_SPI_PINMUX_SETTING;
	config.pinmux_pad0 = SD_MMC_SPI_PINMUX_PAD0;
	config.pinmux_pad1 = SD_MMC_SPI_PINMUX_PAD1;
	config.pinmux_pad2 = SD_MMC_SPI_PINMUX_PAD2;
	config.pinmux_pad3 = SD_MMC_SPI_PINMUX_PAD3;
	config.generator_source = SD_MMC_SPI_SOURCE_CLOCK;
	config.mode_specific.master.baudrate = SDMMC_CLOCK_INIT;

	spi_init(&sd_mmc_master, SD_MMC_SPI, &config);
	spi_enable(&sd_mmc_master);

	spi_slave_inst_get_config_defaults(&slave_configs[0]);
	slave_configs[0].ss_pin = ss_pins[0];
	spi_attach_slave(&sd_mmc_spi_devices[0], &slave_configs[0]);
}
Пример #5
0
/*==============================================================================
  hal_spiInit()
 =============================================================================*/
void * 	hal_spiInit(void)
{
	//! [slave_config]
		struct spi_slave_inst_config st_slaveDevConf;
	//! [slave_config]
	//! [master_config]
		struct spi_config st_masterConf;
	//! [master_config]

		/* Configure and initialize software device instance of peripheral slave */
	//! [slave_conf_defaults]
		spi_slave_inst_get_config_defaults(&st_slaveDevConf);
	//! [slave_conf_defaults]
	//! [ss_pin]
		st_slaveDevConf.ss_pin = st_ss;
	//! [ss_pin]
	//! [slave_init]
		spi_attach_slave(&st_spi, &st_slaveDevConf);
	//! [slave_init]
		/* Configure, initialize and enable SERCOM SPI module */
	//! [conf_defaults]
		spi_get_config_defaults(&st_masterConf);
	//! [conf_defaults]
	//! [mux_setting]
		st_masterConf.mux_setting = SAMD20_SPI0_SERCOM_MUX_SETTING;
	//! [mux_setting]
		/* Configure pad 0 for data in */
	//! [di]
		st_masterConf.pinmux_pad0 = SAMD20_SPI0_SERCOM_PMUX0;
	//! [di]
		/* Configure pad 1 as unused */
	//! [ss]
		st_masterConf.pinmux_pad1 = PINMUX_UNUSED;
	//! [ss]
		/* Configure pad 2 for data out */
	//! [do]
		st_masterConf.pinmux_pad2 = SAMD20_SPI0_SERCOM_PMUX2;
	//! [do]
		/* Configure pad 3 for SCK */
	//! [sck]
		st_masterConf.pinmux_pad3 = SAMD20_SPI0_SERCOM_PMUX3;
	//! [sck]
	//! [init]
		spi_init(&st_masterInst, SAMD20_SPI0_SERCOM, &st_masterConf);
	//! [init]

	//! [enable]
		spi_enable(&st_masterInst);
	//! [enable]

    return ((void *)&st_spi);
} /* hal_spiInit() */
//! [configure_spi]
void configure_spi_master(void)
{
//! [config]
	struct spi_config config_spi_master;
//! [config]
//! [slave_config]
	struct spi_slave_inst_config slave_dev_config;
//! [slave_config]
	/* Configure and initialize software device instance of peripheral slave */
//! [slave_conf_defaults]
	spi_slave_inst_get_config_defaults(&slave_dev_config);
//! [slave_conf_defaults]
//! [ss_pin]
	slave_dev_config.ss_pin = SLAVE_SELECT_PIN;
//! [ss_pin]
//! [slave_init]
	spi_attach_slave(&slave, &slave_dev_config);
//! [slave_init]
	/* Configure, initialize and enable SERCOM SPI module */
//! [conf_defaults]
	spi_get_config_defaults(&config_spi_master);
//! [conf_defaults]
//! [mux_setting]
	config_spi_master.mux_setting = EXT1_SPI_SERCOM_MUX_SETTING;
//! [mux_setting]
	/* Configure pad 0 for data in */
//! [di]
	config_spi_master.pinmux_pad0 = EXT1_SPI_SERCOM_PINMUX_PAD0;
//! [di]
	/* Configure pad 1 as unused */
//! [ss]
	config_spi_master.pinmux_pad1 = PINMUX_UNUSED;
//! [ss]
	/* Configure pad 2 for data out */
//! [do]
	config_spi_master.pinmux_pad2 = EXT1_SPI_SERCOM_PINMUX_PAD2;
//! [do]
	/* Configure pad 3 for SCK */
//! [sck]
	config_spi_master.pinmux_pad3 = EXT1_SPI_SERCOM_PINMUX_PAD3;
//! [sck]
//! [init]
	spi_init(&spi_master_instance, EXT1_SPI_MODULE, &config_spi_master);
//! [init]

//! [enable]
	spi_enable(&spi_master_instance);
//! [enable]

}
Пример #7
0
/*
*	@fn		nm_bus_init
*	@brief	Initialize the bus wrapper
*	@return	M2M_SUCCESS in case of success and M2M_ERR_BUS_FAIL in case of failure
*/
sint8 nm_bus_init(void *pvinit)
{
	sint8 result = M2M_SUCCESS;

#ifdef CONF_WINC_USE_I2C
	/* Initialize config structure and software module. */
	struct i2c_master_config config_i2c_master;
	i2c_master_get_config_defaults(&config_i2c_master);

	/* Change buffer timeout to something longer. */
	config_i2c_master.buffer_timeout = 1000;

	/* Initialize and enable device with config. */
	i2c_master_init(&i2c_master_instance, SERCOM2, &config_i2c_master);

	i2c_master_enable(&i2c_master_instance);

#elif defined CONF_WINC_USE_SPI
	/* Structure for SPI configuration. */
	struct spi_config config;
	struct spi_slave_inst_config slave_config;

	/* Select SPI slave CS pin. */
	/* This step will set the CS high */
	spi_slave_inst_get_config_defaults(&slave_config);
	slave_config.ss_pin = CONF_WINC_SPI_CS_PIN;
	spi_attach_slave(&slave_inst, &slave_config);

	/* Configure the SPI master. */
	spi_get_config_defaults(&config);
	config.mux_setting = CONF_WINC_SPI_SERCOM_MUX;
	config.pinmux_pad0 = CONF_WINC_SPI_PINMUX_PAD0;
	config.pinmux_pad1 = CONF_WINC_SPI_PINMUX_PAD1;
	config.pinmux_pad2 = CONF_WINC_SPI_PINMUX_PAD2;
	config.pinmux_pad3 = CONF_WINC_SPI_PINMUX_PAD3;
	config.master_slave_select_enable = false;

	config.mode_specific.master.baudrate = CONF_WINC_SPI_CLOCK;
	if (spi_init(&master, CONF_WINC_SPI_MODULE, &config) != STATUS_OK) {
		return M2M_ERR_BUS_FAIL;
	}

	/* Enable the SPI master. */
	spi_enable(&master);

	nm_bsp_reset();
	nm_bsp_sleep(1);
#endif
	return result;
}
/**
 * \internal
 * \brief Test initializing SPI master & slave.
 *
 * This initializes the SPI master & slave.
 *
 * Test passes if initialization succeeds fails otherwise.
 *
 * \param test Current test case.
 */
static void run_spi_init_test(const struct test_case *test)
{
	enum status_code status = STATUS_ERR_IO;

	/* Structure for SPI configuration */
	struct spi_config config;
	struct spi_slave_inst_config slave_config;

	/* Select SPI slave SS pin */
	spi_slave_inst_get_config_defaults(&slave_config);
	slave_config.ss_pin = CONF_SPI_SLAVE_SS_PIN;
	spi_attach_slave(&slave_inst, &slave_config);

	/* Configure the SPI master */
	spi_get_config_defaults(&config);
	config.mux_setting     = CONF_SPI_MASTER_SPI_MUX;
	config.pinmux_pad0     = CONF_SPI_MASTER_DATA_IN_PIN_MUX;
	config.pinmux_pad1     = PINMUX_UNUSED;
	config.pinmux_pad2     = CONF_SPI_MASTER_DATA_OUT_PIN_MUX;
	config.pinmux_pad3     = CONF_SPI_MASTER_SCK_PIN_MUX;
	config.mode_specific.master.baudrate = TEST_SPI_BAUDRATE;
	status = spi_init(&master, CONF_SPI_MASTER_MODULE, &config);
	test_assert_true(test, status == STATUS_OK,
			"SPI master initialization failed");

	/* Enable the SPI master */
	spi_enable(&master);

	status = STATUS_ERR_IO;
	/* Configure the SPI slave */
	spi_get_config_defaults(&config);
	config.mode                 = SPI_MODE_SLAVE;
	config.mux_setting          = CONF_SPI_SLAVE_SPI_MUX;
	config.pinmux_pad0          = CONF_SPI_SLAVE_DATA_IN_PIN_MUX;
	config.pinmux_pad1          = CONF_SPI_SLAVE_SS_PIN_MUX;
	config.pinmux_pad2          = CONF_SPI_SLAVE_DATA_OUT_PIN_MUX;
	config.pinmux_pad3          = CONF_SPI_SLAVE_SCK_PIN_MUX;
	config.mode_specific.slave.frame_format   = SPI_FRAME_FORMAT_SPI_FRAME;
	config.mode_specific.slave.preload_enable = true;
	status = spi_init(&slave, CONF_SPI_SLAVE_MODULE, &config);
	test_assert_true(test, status == STATUS_OK,
			"SPI slave initialization failed");

	/* Enable the SPI slave */
	spi_enable(&slave);
	if (status == STATUS_OK) {
		spi_init_success = true;
	}
}
Пример #9
0
void configure_spi_master_ADXL(void)
{
	
	struct spi_config config_spi_master_adxl;
	
	struct spi_slave_inst_config slave_dev_config_adxl;
	
	spi_slave_inst_get_config_defaults(&slave_dev_config_adxl);
	
	slave_dev_config_adxl.ss_pin = PIN_PA06;
	slave_dev_config_adxl.address_enabled = false;
	
	spi_attach_slave(&slave_ADXL, &slave_dev_config_adxl);
	
	spi_get_config_defaults(&config_spi_master_adxl);
	
	config_spi_master_adxl.mux_setting = SPI_SIGNAL_MUX_SETTING_D;	
	config_spi_master_adxl.pinmux_pad0 =  PINMUX_PA04D_SERCOM0_PAD0;	
	config_spi_master_adxl.pinmux_pad1 = PINMUX_PA05D_SERCOM0_PAD1;	
	config_spi_master_adxl.pinmux_pad2 = PINMUX_UNUSED;	
	
	
	config_spi_master_adxl.pinmux_pad3 = PINMUX_PA07D_SERCOM0_PAD3;
		
	config_spi_master_adxl.mode             = SPI_MODE_MASTER;
	config_spi_master_adxl.data_order       = SPI_DATA_ORDER_MSB;
	config_spi_master_adxl.transfer_mode    = SPI_TRANSFER_MODE_3;
	config_spi_master_adxl.character_size   = SPI_CHARACTER_SIZE_8BIT;
	config_spi_master_adxl.run_in_standby   = false;
	config_spi_master_adxl.receiver_enable  = true;
	config_spi_master_adxl.generator_source = GCLK_GENERATOR_2;
	config_spi_master_adxl.mode_specific.master.baudrate = 4000000;
	config_spi_master_adxl.master_slave_select_enable = true;
	config_spi_master_adxl.select_slave_low_detect_enable = false;
		
	spi_init(&spi_master_instance_ADXL, SERCOM0, &config_spi_master_adxl);
		
	spi_enable(&spi_master_instance_ADXL);
	

}
Пример #10
0
/*---------------------------------------------------------------------------*/
void
st7565s_arch_spi_init(void)
{
  struct spi_slave_inst_config slave_dev_config;

  /* Init SPI master interface */
  esd_spi_master_init();

  /* Congfigure slave SPI device */
  spi_slave_inst_get_config_defaults(&slave_dev_config);
  slave_dev_config.ss_pin = DISPLAY_CS;
  spi_attach_slave(&st7565s_spi_slave, &slave_dev_config);

  /* Configure backlight pin */
  struct port_config pin_conf;
  port_get_config_defaults(&pin_conf);
  /* Configure as output and turn off */
  pin_conf.direction = PORT_PIN_DIR_OUTPUT;
  port_pin_set_config(DISPLAY_BACKLIGHT_PIN, &pin_conf);
  port_pin_set_output_level(DISPLAY_BACKLIGHT_PIN, false);
}
Пример #11
0
void cph_deca_spi_init(void) {
	struct spi_config config_spi_master;
	struct spi_slave_inst_config slave_dev_config;

	spi_slave_inst_get_config_defaults(&slave_dev_config);
	slave_dev_config.ss_pin = DW_SPI_SS_PIN;
	spi_attach_slave(&spi_slave, &slave_dev_config);

	spi_get_config_defaults(&config_spi_master);
	// DOPO: 0x00						DIPO: 0x03
	// PA16/SERCOM1[0]: MOSI			PA19/SERCOM1[]3: MISO
	config_spi_master.mux_setting = DW_SPI_MUX;
	config_spi_master.pinmux_pad0 = DW_SPI_PAD0;
	config_spi_master.pinmux_pad1 = DW_SPI_PAD1;
	config_spi_master.pinmux_pad2 = DW_SPI_PAD2;
	config_spi_master.pinmux_pad3 = DW_SPI_PAD3;
	config_spi_master.transfer_mode = DW_SPI_TRANSFER_MODE;

	spi_init(&spi_master_instance, DW_SPI_HW, &config_spi_master);

	spi_enable(&spi_master_instance);

}
Пример #12
0
void configure_spi_master_AD5421(void)
{
	//! [config]
	struct spi_config config_spi_master;
	//! [config]
	//! [slave_config]
	struct spi_slave_inst_config slave_dev_config;
	//! [slave_config]
	/* Configure and initialize software device instance of peripheral slave */
	//! [slave_conf_defaults]
	spi_slave_inst_get_config_defaults(&slave_dev_config);
	//! [slave_conf_defaults]
	//! [ss_pin]
	slave_dev_config.ss_pin = PIN_PA18;
	slave_dev_config.address_enabled = false;
	//! [ss_pin]
	//! [slave_init]
	spi_attach_slave(&slave_AD5421, &slave_dev_config);
	//! [slave_init]
	/* Configure, initialize and enable SERCOM SPI module */
	//! [conf_defaults]
	spi_get_config_defaults(&config_spi_master);
	//! [conf_defaults]
	//! [mux_setting]
	config_spi_master.mux_setting = SPI_SIGNAL_MUX_SETTING_D;
	//! [mux_setting]
	
	/* Configure pad 0 for MOSI */
	//! [di]
	config_spi_master.pinmux_pad0 =  PINMUX_PA16D_SERCOM3_PAD0;
	//! [di]
	/* Configure pad 1 for CLOCK */
	//! [ss]
	config_spi_master.pinmux_pad1 = PINMUX_PA17D_SERCOM3_PAD1;
	//! [ss]
	/* Configure pad 2 for CS */
	//! [do]
	config_spi_master.pinmux_pad2 = PINMUX_UNUSED;
	//! [do]
	/* Configure pad 3 for MISO */
	//! [sck]
	config_spi_master.pinmux_pad3 = PINMUX_PA19D_SERCOM3_PAD3;
	//! [sck]
	
	
	config_spi_master.mode             = SPI_MODE_MASTER;
	config_spi_master.data_order       = SPI_DATA_ORDER_MSB;
	config_spi_master.transfer_mode    = SPI_TRANSFER_MODE_2;
	config_spi_master.character_size   = SPI_CHARACTER_SIZE_8BIT;
	config_spi_master.run_in_standby   = false;
	config_spi_master.receiver_enable  = true;
	config_spi_master.generator_source = GCLK_GENERATOR_2;
	config_spi_master.mode_specific.master.baudrate = 1000000;
	config_spi_master.master_slave_select_enable = true;
	config_spi_master.select_slave_low_detect_enable = false;
	
	//! [init]
	spi_init(&spi_master_instance_AD5421, SERCOM3, &config_spi_master);
	//! [init]

	//! [enable]
	spi_enable(&spi_master_instance_AD5421);
	//! [enable]

}