Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "spidrv.h"
- #include "uart.h"
- #include <stdio.h>
- #define MOD_NAME "spiddrv.c"
- #define DEBUG 1
- #define GYRO_CS GPIO_Pin_10
- #define AXEL_CS GPIO_Pin_11
- #define GYRO_RD 0x8000
- //#define AXEL_RD 0x0000
- void spi2_init()
- {
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
- GPIO_InitTypeDef GPIO_InitStructure;
- SPI_InitTypeDef SPI_InitStructure;
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Pin = GYRO_CS | AXEL_CS;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- GPIO_SetBits(GPIOB, GYRO_CS);
- GPIO_SetBits(GPIOB, AXEL_CS);
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
- SPI_I2S_DeInit(SPI2);
- SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
- SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
- SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
- SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
- SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
- SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
- SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;
- SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
- SPI_InitStructure.SPI_CRCPolynomial = 7;
- SPI_Init(SPI2, &SPI_InitStructure);
- //SPI_CalculateCRC(SPI2, DISABLE);
- SPI_Cmd(SPI2, ENABLE);
- #ifdef DEBUG
- //printf("%s %s - spi2_init() - OK\n\r", DBG,MOD_NAME);
- uart_print("spidrv.c - spi2_init() - OK\n\r");
- #endif
- }
- void spi2_write(spiDev dev, uint8_t reg, uint8_t val)
- {
- uint16_t data;
- switch (dev)
- {
- case SPI_GYRO:
- {
- GPIO_ResetBits(GPIOB, GYRO_CS);
- GPIO_SetBits(GPIOB, AXEL_CS);
- data = (reg << 8) | val;
- //while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
- SPI_I2S_SendData(SPI2, data);
- while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
- GPIO_SetBits(GPIOB, GYRO_CS | AXEL_CS);
- }
- break;
- case SPI_AXEL:
- {
- GPIO_ResetBits(GPIOB, AXEL_CS);
- GPIO_SetBits(GPIOB, GYRO_CS);
- GPIO_SetBits(GPIOB, GYRO_CS | AXEL_CS);
- }
- break;
- }
- }
- uint16_t spi2_read(spiDev dev, uint8_t reg)
- {
- uint16_t ret;
- uint16_t data;
- switch (dev)
- {
- case SPI_GYRO:
- {
- GPIO_ResetBits(GPIOB, GYRO_CS);
- GPIO_SetBits(GPIOB, AXEL_CS);
- data = GYRO_RD | (reg << 8);
- while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
- SPI_I2S_SendData(SPI2, data);
- while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
- ret = SPI_I2S_ReceiveData(SPI2);
- GPIO_SetBits(GPIOB, GYRO_CS | AXEL_CS);
- }
- break;
- case SPI_AXEL:
- {
- GPIO_ResetBits(GPIOB, AXEL_CS);
- GPIO_SetBits(GPIOB, GYRO_CS);
- GPIO_SetBits(GPIOB, GYRO_CS | AXEL_CS);
- }
- break;
- }
- return ret;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement