#include "spi1.h"
+#include "CB_functions.h"
+#include "periph_conf.h"
#define BUFFER_SIZE 2
uint8_t spiRxCounter;
uint8_t spiTxCounter;
uint8_t spiBusyFlag;
-uint8_t spiDataBuffer[BUFFER_SIZE];
+uint16_t spiDataBuffer[BUFFER_SIZE];
+
+
+GPIO_InitTypeDef GPIO_InitStructure;
+NVIC_InitTypeDef NVIC_InitStructure;
+SPI_InitTypeDef SPI_InitStructure;
-void spi_create(SPI_TypeDef * SPIx, GPIO_TypeDef * CS_GPIOx, uint16_t CS_GPIO_Pin_x){
+void spi_create(SPI_TypeDef * SPIx, GPIO_TypeDef * CS_GPIOx){
SPI_Module = SPIx;
CS_GPIO = CS_GPIOx;
- CS_GPIO_Pin = CS_GPIO_Pin_x;
+// CS_GPIO_Pin = CS_GPIO_Pin_x;
spiBusyFlag = 0;
}
}
void spi_chipSelect(void){
- GPIO_WriteBit(CS_GPIO, CS_GPIO_Pin, RESET);
+// GPIO_WriteBit(CS_GPIO, CS_GPIO_Pin, RESET);
+ CB_GPIO_Out_Lo(ADC_CONV0); // spi nCS -> idle Hi
}
void spi_chipDeselect(void){
- GPIO_WriteBit(CS_GPIO, CS_GPIO_Pin, SET);
+// GPIO_WriteBit(CS_GPIO, CS_GPIO_Pin, SET);
+ CB_GPIO_Out_Hi(ADC_CONV0); // spi nCS -> idle Hi
}
void spi_writeTwoBytes(uint8_t byte1, uint8_t byte0){
spi_chipSelect();
spi_enableTxInterrupt();
}
+
+void spi_writeWord(uint16_t word){
+ while(spiBusyFlag){}
+ spiTxCounter = 1;
+ spiRxCounter = 1;
+ spiBusyFlag = 1;
+ spiDataBuffer[0] = word;
+ spi_chipSelect();
+ spi_enableTxInterrupt();
+
+}
void spi_handleSPI1Interrupt(void){
if(SPI_I2S_GetFlagStatus(SPI_Module, SPI_I2S_FLAG_RXNE) == SET){
spi_disableTxInterrupt();
}
}
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+void init_SPI1(void){
+
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO | RCC_APB2Periph_SPI1, ENABLE);
+
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
+ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+ GPIO_Init(GPIOA, &GPIO_InitStructure);
+
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
+ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+ GPIO_Init(GPIOA, &GPIO_InitStructure);
+
+
+ // CS pin is already initialized by CB_functions
+// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
+// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
+// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+// GPIO_Init(GPIOA, &GPIO_InitStructure);
+
+// GPIO_WriteBit(GPIOA, GPIO_Pin_8, SET);
+
+ NVIC_InitStructure.NVIC_IRQChannel = SPI1_IRQn;
+ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
+ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
+ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
+ NVIC_Init(&NVIC_InitStructure);
+
+ SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;
+ SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
+ SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
+ SPI_InitStructure.SPI_CRCPolynomial = 0;
+ SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
+ SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
+ SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
+ SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
+ SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
+ SPI_Init(SPI1, &SPI_InitStructure);
+
+ SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_RXNE, ENABLE);
+
+ SPI_Cmd(SPI1, ENABLE);
+
+ // on top :D
+ spi_create(SPI1, GPIOA);
+
}
\ No newline at end of file