]> jspc29.x-matter.uni-frankfurt.de Git - mvd_firmware.git/commitdiff
can now correctly send back registers from microcontroller to fpga
authorMichael Wiebusch <stratomaster@gmx.net>
Thu, 19 Dec 2013 19:27:21 +0000 (20:27 +0100)
committerMichael Wiebusch <stratomaster@gmx.net>
Thu, 19 Dec 2013 19:27:21 +0000 (20:27 +0100)
firmware/Makefile.common
firmware/src/CB_functions.c
firmware/src/CB_functions.h
firmware/src/main.c

index a787deca00d648e67f328b30115d3a26fde0d5ef..ade154629b6c024771f3410cdcda7998555f5d40 100644 (file)
@@ -32,4 +32,5 @@ CFLAGS+=$(COMMONFLAGS) -Wall -Werror $(INCLUDE)
 #Adust the following line to the type of MCU used
 CFLAGS+=-D STM32F10X_MD
 CFLAGS+=-D VECT_TAB_FLASH
+CFLAGS+=-std=c99
 
index 553dc18e5c9617d089372a3062c5f3706461fa86..14e24283c4c676a422f2723d1f12ef4863cd6737 100644 (file)
 #include "stm32f10x_conf.h"
 
 
-extern uint16_t uC_regs[];
+
+uint16_t uC_regs[UC_NO_REGS];
+
+void report_register(uint8_t addr) {
+
+  USART_SendData(USART1, addr); // send address
+  while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
+  USART_SendData(USART1, (uint8_t) (uC_regs[addr]>>8)); // upper nibble
+  while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
+  USART_SendData(USART1, (uint8_t) (uC_regs[addr]& 0x00FF)); // lower nibble
+  while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
+  
+}
+
+void report_all_registers(void) {
+  
+  for(uint8_t i=0; i < UC_NO_REGS; i++){
+    report_register(i);
+  }
+  
+}
 
 void decode_register(uint8_t addr) {
   uint16_t thisRegister = uC_regs[addr];
+
   switch (addr){
     case 0x0:
-//       thisRegister[thisRegister]++; // just for debug reasons
-      USART_SendData(USART1, addr);
-      while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
-      USART_SendData(USART1, (uint8_t) (thisRegister>>8)); // upper nibble
-      while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
-      USART_SendData(USART1, (uint8_t) (thisRegister & 0x00FF)); // lower nibble
-      while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
-      
+      if (thisRegister & 0xFF00) {
+        report_all_registers();
+      } else {
+        report_register( (uint8_t) (thisRegister & 0x00FF) );
+      }
+
       break;
     case 0x1: // Switches0
       CB_GPIO_Out(ENAA0,thisRegister & 1<<5);
index 9a1d00f146f28f6bc2928a5539072361616461f5..919aca24ab15718048f670492971c1b8a1df66a0 100644 (file)
@@ -9,5 +9,10 @@
 #include "stm32f10x.h"
 
 
+#define UC_NO_REGS 18
+
 void init_CB_GPIO_Outputs(void);
-void decode_register(uint8_t addr);
\ No newline at end of file
+void decode_register(uint8_t addr);
+
+void report_register(uint8_t addr);
+void report_all_registers(void);
\ No newline at end of file
index cee88b54abc3d56a2668c5defecc3dd010225deb..72cd60c718f64231e4d3e79958c3b95caa40f8d3 100644 (file)
 #include "periph_conf.h"
 
 
-#define UC_NO_REGS 17
+
 
 
 extern uint16_t SPIBuffer[];
-uint16_t uC_regs[UC_NO_REGS];
+extern uint16_t uC_regs[];
 
 GPIO_InitTypeDef GPIO_InitStructure;
 NVIC_InitTypeDef NVIC_InitStructure;
@@ -86,6 +86,8 @@ int main(int argc, char *argv[]) {
   
   init_USART1();
   
+//   report_all_registers();
+  
   
 
 
@@ -103,49 +105,16 @@ int main(int argc, char *argv[]) {
 
 void SysTick_Handler(void)
 {
-//   comm_puts("SysTick_Handler");
-//   spi_writeTwoBytes(0x0F, 0xAB);
-//   STM_EVAL_LEDToggle(LED1);
-//   STM_EVAL_LEDToggle(LED2);
-//   STM_EVAL_LEDToggle(LED3);
-//   STM_EVAL_LEDToggle(LED4);
-//   
-
-//   CB_GPIO_Out_Toggle(LED1);
-//   CB_GPIO_Out_Toggle(LED2);
-  CB_GPIO_Out_Toggle(LED3);
-//   CB_GPIO_Out_Toggle(LED4);
-/*  
-  CB_GPIO_Out_Toggle(MUXADDR0);
-  CB_GPIO_Out_Toggle(MUXADDR1);
-  CB_GPIO_Out_Toggle(ZEROCALIB); */
-
-//   return;
-  
-//   static uint8_t character = 'A';
-//   uint8_t i;
-//   for( i = 0; i<10; i++){
-//     USART_SendData(EVAL_COM1, character);
-//       /* Loop until the end of transmission */
-//     while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET)
-//       {}
-//     }
-//   character++;
-//   
-//   if (character > 'Z') {
-//       character = 'A';
-//   }
   
   static uint8_t spi_addr = 0;
   
-//     USART_SendData(EVAL_COM1, (uint8_t) 0);
   
   SPIBuffer[0] = (uint16_t) spi_addr; // address
   SPIBuffer[1] = (uint16_t) uC_regs[spi_addr]; // data content
 //   SPIBuffer[1] = 0x5678; // data content
   spi_dma_shovel();
   
-  spi_addr=(spi_addr+1)%16;
+  spi_addr=(spi_addr+1)%18;
 }