]> jspc29.x-matter.uni-frankfurt.de Git - mvd_firmware.git/commitdiff
added delay_us function, spi1 working
authorMichael Wiebusch <antiquark@gmx.net>
Tue, 7 Jan 2014 14:03:54 +0000 (15:03 +0100)
committerMichael Wiebusch <antiquark@gmx.net>
Tue, 7 Jan 2014 14:03:54 +0000 (15:03 +0100)
firmware/src/CB_functions.c
firmware/src/main.c
firmware/src/misc_utils.c
firmware/src/misc_utils.h
firmware/src/spi1.c
firmware/src/spi1.h
firmware/src/stm32f10x_it.c
firmware/src/stm32f10x_it.h

index e563b3543cd68e7d119663dbbf8a4d2c55746341..8f655679500580e966b42228284ed2de330d4feb 100644 (file)
@@ -10,6 +10,7 @@
 #include "periph_conf.h"
 #include "stm32f10x_conf.h"
 #include "misc_utils.h"
+#include "spi1.h"
 
 
 
@@ -97,7 +98,12 @@ void decode_register(uint8_t addr) {
       uart_word_to_dac(((thisRegister&0xFFFF)>>4) | (6<<12));
      
     case 0xF: //SPI Debug
-      uart_word_to_dac( (uint16_t) (thisRegister&0xFFFF));
+//       uart_word_to_dac( (uint16_t) (thisRegister&0xFFFF));
+//       CB_GPIO_Out_Lo(ADC_CONV0);
+//       spi_writeTwoBytes(((thisRegister&0xFF00)>>8),(thisRegister&0xFF));
+      spi_writeWord(thisRegister);
+//       delay_us(1500);
+//       CB_GPIO_Out_Hi(ADC_CONV0);
       break;
       
     case 0x11: // LEDs
index 2babe91932a3e239eb719321b7ae40c79bfd74aa..2146131f5acfbf70161c0549e675ca3465c7ff8f 100644 (file)
@@ -15,6 +15,7 @@
 
 #include "CB_functions.h"
 #include "usart1.h"
+#include "spi1.h"
 #include "spi2.h"
 #include "dac.h"
 #include "periph_conf.h"
@@ -63,7 +64,7 @@ int main(int argc, char *argv[]) {
 //     SysTick_Config(72000); // 1000 hz
 
 
-  
+  init_SPI1();
   init_SPI2();
 
 
index e1d84c28b7d45e5e208749fa164e455819178a0c..8af2bb380c7ba416b9887b000d65c6c1943eebb0 100644 (file)
@@ -19,6 +19,21 @@ void delay_ms(uint16_t time_ms) {
   counter = time_ms;\r
   SysTick_Config(72000); // 1000 hz\r
   while(counter != 0);\r
+  // disable SysTick interrupt\r
+  SysTick->CTRL  &= ~(SysTick_CTRL_CLKSOURCE_Msk | \r
+    SysTick_CTRL_TICKINT_Msk   | \r
+    SysTick_CTRL_ENABLE_Msk);       \r
+  \r
+} \r
+\r
+void delay_us(uint16_t time_us) {\r
+  counter = time_us;\r
+  SysTick_Config(72); // 1 MHz\r
+  while(counter != 0);\r
+  // disable SysTick interrupt\r
+  SysTick->CTRL  &= ~(SysTick_CTRL_CLKSOURCE_Msk | \r
+    SysTick_CTRL_TICKINT_Msk   | \r
+    SysTick_CTRL_ENABLE_Msk);       \r
   \r
 }\r
 \r
@@ -30,7 +45,6 @@ void SysTick_Handler(void)
 \r
 \r
 \r
-\r
 // implementation of a ring buffer\r
 struct Buffer {\r
   uint8_t data[BUFFER_SIZE];\r
index 9172eb93c59d419ac2a8862795d933a2a32cbb1a..3d1a715b5234cad2c7a229e1a27d80a4c00266ab 100644 (file)
@@ -26,6 +26,7 @@
 void SysTick_Handler(void);\r
 //void delay_us(uint32_t time_us);\r
 void delay_ms(uint16_t time_ms);\r
+void delay_us(uint16_t time_us);\r
 \r
 uint8_t BufferIn(uint8_t byte);\r
 uint8_t BufferOut(uint8_t *pByte);\r
index c7b6ecad8726d8faac1af21e152a85dc3cd9446a..d029a69dcd56517b984a54976189bbb76fc71812 100644 (file)
@@ -1,4 +1,6 @@
 #include "spi1.h"
+#include "CB_functions.h"
+#include "periph_conf.h"
  
 #define BUFFER_SIZE 2
  
@@ -9,12 +11,17 @@ uint16_t CS_GPIO_Pin;
 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;
 }
  
@@ -27,11 +34,13 @@ void spi_disableTxInterrupt(void){
 }
  
 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){
@@ -44,6 +53,17 @@ 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){
@@ -64,4 +84,66 @@ void spi_handleSPI1Interrupt(void){
       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
index 24394b38e29b63b42967d23c37510d060af3ba30..5ff1482a99f1bcb9d0b93864531e771831cdea06 100644 (file)
@@ -1,5 +1,8 @@
 #include "stm32f10x_conf.h"
  
-void spi_create(SPI_TypeDef * SPIx, GPIO_TypeDef * CS_GPIOx, uint16_t CS_GPIO_Pin);
+void spi_create(SPI_TypeDef * SPIx, GPIO_TypeDef * CS_GPIOx);
 void spi_handleSPI1Interrupt(void);
-void spi_writeTwoBytes(uint8_t byte1, uint8_t byte0);
\ No newline at end of file
+void spi_writeTwoBytes(uint8_t byte1, uint8_t byte0);
+void spi_writeWord(uint16_t word);
+
+void init_SPI1(void);
\ No newline at end of file
index 0d7f1f8281c4f98165a87014030ed05a80317671..0044363a446c64c3cca8e6b11e2ef98c8737c457 100644 (file)
@@ -28,7 +28,7 @@
 \r
 /* custom includes for this project */\r
 // #include "serial.h"\r
-// #include "spi.h"\r
+#include "spi1.h"\r
 \r
 \r
 /** @addtogroup STM32F10x_StdPeriph_Template\r
 /* from diller-tech */\r
 \r
 \r
-// void SPI1_IRQHandler(void){\r
-//   spi_handleSPI1Interrupt();\r
-// }\r
+\r
+void SPI1_IRQHandler(void){\r
+  spi_handleSPI1Interrupt();\r
+}\r
 \r
 \r
 \r
index adb1f509a0ea3bf5ead00abd1960f09919e373e4..1e7a65e14c6b01cafda0c588ffe6e198ff09d861 100644 (file)
@@ -48,6 +48,10 @@ void SysTick_Handler(void);
 //for spi with dma\r
 void spi_handleDMA1Ch4Interrupt(void);\r
 \r
+//for spi1\r
+\r
+void SPI1_IRQHandler(void);\r
+\r
 \r
 #ifdef __cplusplus\r
 }\r