WIZlib Library API  ver 1.0
WIZlib Library API User Menual
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
wizspi.c
Go to the documentation of this file.
1 
12 //#define FILE_LOG_SILENCE
13 #include "host/wizspi.h"
14 
15 
28 {
29  SPI_TypeDef *SPIx;
30  SPI_InitTypeDef SPI_InitStructure;
31  GPIO_InitTypeDef GPIO_InitStructure;
32 
33  switch(spi) {
34  case WIZ_SPI1:
35  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
36  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
37  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
38  GPIO_InitStructure.GPIO_Pin = SPI1_SCS_PIN;
39  GPIO_Init(SPI1_SCS_PORT, &GPIO_InitStructure);
40  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
41  GPIO_InitStructure.GPIO_Pin = SPI1_SCLK_PIN;
42  GPIO_Init(SPI1_SCLK_PORT, &GPIO_InitStructure);
43  GPIO_InitStructure.GPIO_Pin = SPI1_MISO_PIN;
44  GPIO_Init(SPI1_MISO_PORT, &GPIO_InitStructure);
45  GPIO_InitStructure.GPIO_Pin = SPI1_MOSI_PIN;
46  GPIO_Init(SPI1_MOSI_PORT, &GPIO_InitStructure);
47  GPIO_SetBits(SPI1_SCS_PORT, SPI1_SCS_PIN);
48  SPIx = SPI1;
49  break;
50  case WIZ_SPI2:
51  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
52  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
53  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
54  GPIO_InitStructure.GPIO_Pin = SPI2_SCS_PIN;
55  GPIO_Init(SPI2_SCS_PORT, &GPIO_InitStructure);
56  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
57  GPIO_InitStructure.GPIO_Pin = SPI2_SCLK_PIN;
58  GPIO_Init(SPI2_SCLK_PORT, &GPIO_InitStructure);
59  GPIO_InitStructure.GPIO_Pin = SPI2_MISO_PIN;
60  GPIO_Init(SPI2_MISO_PORT, &GPIO_InitStructure);
61  GPIO_InitStructure.GPIO_Pin = SPI2_MOSI_PIN;
62  GPIO_Init(SPI2_MOSI_PORT, &GPIO_InitStructure);
63  GPIO_SetBits(SPI2_SCS_PORT, SPI2_SCS_PIN);
64  SPIx = SPI2;
65  break;
66  //case WIZ_SPI3:
67  // break;
68  default:
69  ERRA("SPI(%d) is not allowed", spi);
70  return RET_NOK;
71  }
72 
73  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
74  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
75  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
76  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
77  SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
78  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
79  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
80  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
81  SPI_InitStructure.SPI_CRCPolynomial = 7;
82  SPI_Init(SPIx, &SPI_InitStructure);
83  SPI_Cmd(SPIx, ENABLE);
84 
85  return RET_OK;
86 }
87 
93 void wizspi_cs(wizpf_spi spi, uint8 val)
94 {
95  GPIO_TypeDef* GPIOx;
96  uint16 GPIO_Pin;
97 
98  switch(spi) {
99  case WIZ_SPI1:
100  GPIOx = SPI1_SCS_PORT;
101  GPIO_Pin = SPI1_SCS_PIN;
102  break;
103  case WIZ_SPI2:
104  GPIOx = SPI2_SCS_PORT;
105  GPIO_Pin = SPI2_SCS_PIN;
106  break;
107  //case WIZ_SPI3:
108  // break;
109  default:
110  ERRA("SPI(%d) is not allowed", spi);
111  return;
112  }
113 
114  if (val == VAL_LOW) {
115  GPIO_ResetBits(GPIOx, GPIO_Pin);
116  }else if (val == VAL_HIGH){
117  GPIO_SetBits(GPIOx, GPIO_Pin);
118  }
119 }
120 
127 uint8 wizspi_byte(wizpf_spi spi, uint8 byte)
128 {
129  SPI_TypeDef *SPIx;
130 
131  switch(spi) {
132  case WIZ_SPI1:
133  SPIx = SPI1;
134  break;
135  case WIZ_SPI2:
136  SPIx = SPI2;
137  break;
138  //case WIZ_SPI3:
139  // break;
140  default:
141  ERRA("SPI(%d) is not allowed", spi);
142  return 0;
143  }
144 
145  while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);
146  SPI_I2S_SendData(SPIx, byte);
147  while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE) == RESET);
148  return (uint8)SPI_I2S_ReceiveData(SPIx);
149 }
150 
151 /* @} */
152 
153 
154 
155 
156 
157