From: Michael Wiebusch Date: Thu, 19 Dec 2013 19:27:21 +0000 (+0100) Subject: can now correctly send back registers from microcontroller to fpga X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=fd36fcc650cf8fbc8a055dc48a988dcfb05b85cf;p=mvd_firmware.git can now correctly send back registers from microcontroller to fpga --- diff --git a/firmware/Makefile.common b/firmware/Makefile.common index a787dec..ade1546 100644 --- a/firmware/Makefile.common +++ b/firmware/Makefile.common @@ -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 diff --git a/firmware/src/CB_functions.c b/firmware/src/CB_functions.c index 553dc18..14e2428 100644 --- a/firmware/src/CB_functions.c +++ b/firmware/src/CB_functions.c @@ -11,20 +11,39 @@ #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); diff --git a/firmware/src/CB_functions.h b/firmware/src/CB_functions.h index 9a1d00f..919aca2 100644 --- a/firmware/src/CB_functions.h +++ b/firmware/src/CB_functions.h @@ -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 diff --git a/firmware/src/main.c b/firmware/src/main.c index cee88b5..72cd60c 100644 --- a/firmware/src/main.c +++ b/firmware/src/main.c @@ -19,11 +19,11 @@ #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; }