77 lines
2.1 KiB
C
77 lines
2.1 KiB
C
|
|
#include "pio.h"
|
|
#include "error.h"
|
|
#include "hardware.h"
|
|
#include "stm32f10x.h"
|
|
|
|
#include <stdint.h>
|
|
|
|
uint8_t InBuffer[SPI_BSIZE];
|
|
|
|
int8_t SPI_Initialize(void)
|
|
{
|
|
|
|
GPIO_InitTypeDef GPIO_Conf;
|
|
SPI_InitTypeDef SPI_Conf;
|
|
DMA_InitTypeDef DMA_Conf;
|
|
|
|
/* Zegar GPIOA,SPI1 */
|
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1, ENABLE);
|
|
//MOSI,SCK,CS - wyjście PER
|
|
GPIO_Conf.GPIO_Pin=MOSI1|SCK1;
|
|
GPIO_Conf.GPIO_Mode=GPIO_Mode_AF_PP;
|
|
GPIO_Conf.GPIO_Speed=GPIO_Speed_50MHz;
|
|
GPIO_Init(GPIOA,&GPIO_Conf);
|
|
|
|
//MISO - wejście
|
|
GPIO_Conf.GPIO_Pin=MISO1;
|
|
GPIO_Conf.GPIO_Mode=GPIO_Mode_IN_FLOATING;
|
|
GPIO_Init(GPIOA,&GPIO_Conf);
|
|
|
|
//Konfuiguracja portu
|
|
SPI_Conf.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
|
|
SPI_Conf.SPI_Mode = SPI_Mode_Slave;
|
|
SPI_Conf.SPI_DataSize = SPI_DataSize_8b;
|
|
SPI_Conf.SPI_CPOL = SPI_CPOL_Low; //mode 01
|
|
SPI_Conf.SPI_CPHA = SPI_CPHA_2Edge; //mode 01
|
|
SPI_Conf.SPI_NSS = SPI_NSS_Hard ;
|
|
SPI_Conf.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
|
|
SPI_Conf.SPI_FirstBit = SPI_FirstBit_MSB;
|
|
SPI_Conf.SPI_CRCPolynomial = 0;
|
|
SPI_Init(port, &SPI_Conf);
|
|
|
|
//CS wyłączony
|
|
SPI_SSOutputCmd(port,DISABLE);
|
|
|
|
//bez CRC
|
|
SPI_CalculateCRC(port,DISABLE);
|
|
|
|
//skonfiguruj DMA
|
|
//odbiór przez DMA - kanał 4
|
|
DMA_Cmd(DMA1_Channel4, DISABLE);
|
|
DMA_DeInit(DMA1_Channel4);
|
|
DMA_Conf.DMA_DIR = DMA_DIR_PeripheralSRC;
|
|
DMA_Conf.DMA_M2M = DMA_M2M_Disable;
|
|
DMA_Conf.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
|
|
DMA_Conf.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
|
DMA_Conf.DMA_MemoryBaseAddr = (uint32_t)InBuffer;
|
|
DMA_Conf.DMA_BufferSize = SPI_BSIZE;
|
|
DMA_Conf.DMA_Mode=DMA_Mode_Circular;
|
|
DMA_Conf.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);
|
|
DMA_Conf.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
|
|
DMA_Conf.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
|
DMA_Conf.DMA_Priority = DMA_Priority_VeryHigh;
|
|
DMA_Init(DMA1_Channel4,&DMA_Conf);
|
|
DMA_Cmd(DMA1_Channel4, ENABLE);
|
|
|
|
//włącz DMA
|
|
SPI_I2S_DMACmd(port,SPI_I2S_DMAReq_Tx|SPI_I2S_DMAReq_Rx,ENABLE);
|
|
|
|
//Włącz SPI
|
|
SPI_Cmd(port, ENABLE);
|
|
}
|
|
|
|
|
|
int8_t SPI_State(void);
|
|
int8_t SPI_Poll(uint8_t *measure,uint8_t length);
|