12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #include "at32f403a_407.h"
- #include "spi_common.h"
- void common_spi_init(void)
- {
- gpio_init_type gpio_initstructure;
- spi_init_type spi_init_struct;
-
- crm_periph_clock_enable(CRM_IOMUX_PERIPH_CLOCK, TRUE);
- crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
- crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
-
- gpio_pin_remap_config(SWJTAG_MUX_010, TRUE);
- gpio_pin_remap_config(SPI3_GMUX_0010, TRUE);
-
- // SCK
- gpio_initstructure.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
- gpio_initstructure.gpio_pull = GPIO_PULL_DOWN;
- gpio_initstructure.gpio_mode = GPIO_MODE_MUX;
- gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
- gpio_initstructure.gpio_pins = GPIO_PINS_3;
- gpio_init(GPIOB, &gpio_initstructure);
-
- // MISO
- gpio_initstructure.gpio_pull = GPIO_PULL_UP;
- gpio_initstructure.gpio_mode = GPIO_MODE_INPUT;
- gpio_initstructure.gpio_pins = GPIO_PINS_4;
- gpio_init(GPIOB, &gpio_initstructure);
-
- // MOSI
- gpio_initstructure.gpio_pull = GPIO_PULL_UP;
- gpio_initstructure.gpio_mode = GPIO_MODE_MUX;
- gpio_initstructure.gpio_pins = GPIO_PINS_5;
- gpio_init(GPIOB, &gpio_initstructure);
-
- // CS
- gpio_initstructure.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
- gpio_initstructure.gpio_pull = GPIO_PULL_UP;
- gpio_initstructure.gpio_mode = GPIO_MODE_OUTPUT;
- gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
- gpio_initstructure.gpio_pins = GPIO_PINS_15;
- gpio_init(GPIOA, &gpio_initstructure);
-
-
- SPI_FLASH_CS_H();
- crm_periph_clock_enable(CRM_SPI3_PERIPH_CLOCK, TRUE);
-
- spi_default_para_init(&spi_init_struct);
- spi_init_struct.transmission_mode = SPI_TRANSMIT_FULL_DUPLEX;
- spi_init_struct.master_slave_mode = SPI_MODE_MASTER;
- spi_init_struct.mclk_freq_division = SPI_MCLK_DIV_32; //SPI_MCLK_DIV_2;
- spi_init_struct.first_bit_transmission = SPI_FIRST_BIT_MSB;
- spi_init_struct.frame_bit_num = SPI_FRAME_8BIT;
- spi_init_struct.clock_polarity = SPI_CLOCK_POLARITY_HIGH;
- spi_init_struct.clock_phase = SPI_CLOCK_PHASE_2EDGE;
- spi_init_struct.cs_mode_selection = SPI_CS_SOFTWARE_MODE;
-
- spi_init(SPI3, &spi_init_struct);
-
- //spi_hardware_cs_output_enable(SPI3, TRUE);
-
- spi_enable(SPI3, TRUE);
- }
- void common_spi_send(spi_type *spi, uint16_t data)
- {
- while (spi_i2s_flag_get(spi, SPI_I2S_TDBE_FLAG) == RESET);
- spi->dt = data;
- }
- uint8_t common_spi_receive(spi_type *spi)
- {
- while (spi_i2s_flag_get(spi, SPI_I2S_RDBF_FLAG) == RESET);
- return spi->dt;
- }
- uint8_t common_spi_tx_rx(spi_type *spi, uint8_t data)
- {
- while (spi_i2s_flag_get(spi, SPI_I2S_TDBE_FLAG) == RESET);
- spi->dt = data;
-
- while (spi_i2s_flag_get(spi, SPI_I2S_RDBF_FLAG) == RESET);
- return spi->dt;
- }
|