miniFOC 1.0.3
This open-source project aims to accomplish a FOC(Field Oriented Control) scheme that is operatable with minimum costs in China.
spi.c
Go to the documentation of this file.
1/**************************************************************************/
10#include "spi.h"
11#include "gd32f1x0.h"
12#include "config.h"
13
19unsigned short spi_readwrite_halfworld(unsigned short data) {
20 unsigned short buffer;
21 while (RESET == spi_i2s_flag_get(SPI0, SPI_FLAG_TBE));
22
23 /* send this data through spi0 */
24 spi_i2s_data_transmit(SPI0, data);
25 while (RESET == spi_i2s_flag_get(SPI0, SPI_FLAG_RBNE));
26
27 /* get data received through spi0 */
28 buffer = spi_i2s_data_receive(SPI0);
29 return buffer;
30}
31
35void spi_config(void) {
36 spi_parameter_struct spi_init_struct;
37
38 /* enable GPIO clock and SPI0 clock*/
39 rcu_periph_clock_enable(RCU_GPIOA);
40 rcu_periph_clock_enable(RCU_SPI0);
41
42 /* SPI0 GPIO config: SCK/PA5, MISO/PA6, MOSI/PA7 */
43 gpio_af_set(GPIOA, GPIO_AF_0, GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
44 gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
45 gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
46
47 /* SPI0 GPIO config: CS/PA4 */
48 gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_4);
49 gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4);
50
51 /* pull up CS pin to end sending data */
52 gpio_bit_set(GPIOA, GPIO_PIN_4);
53
54 /* SPI0 parameter config */
55 spi_init_struct.trans_mode = SPI_TRANSMODE_FULLDUPLEX;
56 spi_init_struct.device_mode = SPI_MASTER;
57 spi_init_struct.frame_size = SPI_FRAMESIZE_16BIT;
58 spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_2EDGE;
59 spi_init_struct.nss = SPI_NSS_SOFT;
60 spi_init_struct.prescale = SPI_PRESCALE;
61 spi_init_struct.endian = SPI_ENDIAN_MSB;
62 spi_crc_off(SPI0);
63 spi_init(SPI0, &spi_init_struct);
64
65 /* SPI0 enable */
66 spi_enable(SPI0);
67}
used to place important parameter configurations for users
#define SPI_PRESCALE
set SPI frequency to 72 / 16 = 4.5MHz
Definition: config.h:34
void spi_config(void)
configure spi0 periph and its gpios
Definition: spi.c:35
unsigned short spi_readwrite_halfworld(unsigned short data)
spi0 transmit data for sc60228
Definition: spi.c:19
this is the header file of spi.c.