summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFredrik Thulin <fredrik@thulin.net>2015-09-10 10:43:44 +0200
committerFredrik Thulin <fredrik@thulin.net>2015-09-10 10:43:44 +0200
commitf194c02df057411c0b4b4bb86a629a931901e80f (patch)
tree65a256c8736a258a366735a1569b53bd5990a06c
parent1ee0be1ef00f2be29210edee155716e6f359d2f5 (diff)
emacs indentation
-rw-r--r--src/fmc-test/src/main.c220
-rw-r--r--src/fmc-test/src/stm-fmc.c232
-rw-r--r--src/fmc-test/src/stm32f4xx_hal_msp.c98
-rw-r--r--src/fmc-test/src/stm32f4xx_it.c66
4 files changed, 308 insertions, 308 deletions
diff --git a/src/fmc-test/src/main.c b/src/fmc-test/src/main.c
index ce04bee..38165b8 100644
--- a/src/fmc-test/src/main.c
+++ b/src/fmc-test/src/main.c
@@ -61,67 +61,67 @@ int main(void)
//------------------------------------------------------------------------------
{
int i;
- // initialize hal
+ // initialize hal
HAL_Init();
- // configure system clock
+ // configure system clock
SystemClock_Config();
- // initialize gpio
- MX_GPIO_Init();
+ // initialize gpio
+ MX_GPIO_Init();
- // Blink blue LED for six seconds to not upset the Novena at boot.
- led_on(GPIO_PIN_LED_BLUE);
- for (i = 0; i < 12; i++) {
- HAL_Delay(500);
- led_toggle(GPIO_PIN_LED_BLUE);
- }
+ // Blink blue LED for six seconds to not upset the Novena at boot.
+ led_on(GPIO_PIN_LED_BLUE);
+ for (i = 0; i < 12; i++) {
+ HAL_Delay(500);
+ led_toggle(GPIO_PIN_LED_BLUE);
+ }
- // initialize rng
- MX_RNG_Init();
+ // initialize rng
+ MX_RNG_Init();
- // prepare fmc interface
- fmc_init();
+ // prepare fmc interface
+ fmc_init();
- // turn on green led, turn off other leds
- led_on(GPIO_PIN_LED_GREEN);
- led_off(GPIO_PIN_LED_YELLOW);
- led_off(GPIO_PIN_LED_RED);
- led_off(GPIO_PIN_LED_BLUE);
+ // turn on green led, turn off other leds
+ led_on(GPIO_PIN_LED_GREEN);
+ led_off(GPIO_PIN_LED_YELLOW);
+ led_off(GPIO_PIN_LED_RED);
+ led_off(GPIO_PIN_LED_BLUE);
- // vars
- volatile int data_test_ok = 0, addr_test_ok = 0, successful_runs = 0;
+ // vars
+ volatile int data_test_ok = 0, addr_test_ok = 0, successful_runs = 0;
- // main loop (test, until an error is detected)
+ // main loop (test, until an error is detected)
while (1)
- {
- // test data bus
- data_test_ok = test_fpga_data_bus();
- // test address bus
- addr_test_ok = test_fpga_address_bus();
+ {
+ // test data bus
+ data_test_ok = test_fpga_data_bus();
+ // test address bus
+ addr_test_ok = test_fpga_address_bus();
- // check for errors (abort testing in case of error)
- if (data_test_ok < TEST_NUM_ROUNDS) break;
+ // check for errors (abort testing in case of error)
+ if (data_test_ok < TEST_NUM_ROUNDS) break;
- // check for errors (abort testing in case of error)
- if (addr_test_ok < TEST_NUM_ROUNDS) break;
+ // check for errors (abort testing in case of error)
+ if (addr_test_ok < TEST_NUM_ROUNDS) break;
- // toggle yellow led to indicate, that we are alive
- led_toggle(GPIO_PIN_LED_YELLOW);
- successful_runs++;
- }
-
- // error handler
- while (1)
- {
- // turn on red led, turn off other leds
- led_on(GPIO_PIN_LED_RED);
- led_off(GPIO_PIN_LED_GREEN);
- led_off(GPIO_PIN_LED_YELLOW);
- led_off(GPIO_PIN_LED_BLUE);
- }
+ // toggle yellow led to indicate, that we are alive
+ led_toggle(GPIO_PIN_LED_YELLOW);
+ successful_runs++;
+ }
- // should never reach this line
+ // error handler
+ while (1)
+ {
+ // turn on red led, turn off other leds
+ led_on(GPIO_PIN_LED_RED);
+ led_off(GPIO_PIN_LED_GREEN);
+ led_off(GPIO_PIN_LED_YELLOW);
+ led_off(GPIO_PIN_LED_BLUE);
+ }
+
+ // should never reach this line
}
@@ -129,37 +129,37 @@ int main(void)
int test_fpga_data_bus(void)
//------------------------------------------------------------------------------
{
- int c, ok;
- uint32_t rnd, buf;
- HAL_StatusTypeDef hal_result;
+ int c, ok;
+ uint32_t rnd, buf;
+ HAL_StatusTypeDef hal_result;
- // run some rounds of data bus test
- for (c=0; c<TEST_NUM_ROUNDS; c++)
+ // run some rounds of data bus test
+ for (c=0; c<TEST_NUM_ROUNDS; c++)
+ {
+ data_diff = 0;
+ // try to generate "random" number
+ hal_result = HAL_RNG_GenerateRandomNumber(&rng_inst, &rnd);
+ if (hal_result != HAL_OK) break;
+
+ // write value to fpga at address 0
+ ok = fmc_write_32(0, &rnd);
+ if (ok != 0) break;
+
+ // read value from fpga
+ ok = fmc_read_32(0, &buf);
+ if (ok != 0) break;
+
+ // compare (abort testing in case of error)
+ if (buf != rnd)
{
- data_diff = 0;
- // try to generate "random" number
- hal_result = HAL_RNG_GenerateRandomNumber(&rng_inst, &rnd);
- if (hal_result != HAL_OK) break;
-
- // write value to fpga at address 0
- ok = fmc_write_32(0, &rnd);
- if (ok != 0) break;
-
- // read value from fpga
- ok = fmc_read_32(0, &buf);
- if (ok != 0) break;
-
- // compare (abort testing in case of error)
- if (buf != rnd)
- {
- data_diff = buf;
- data_diff ^= rnd;
- break;
- }
+ data_diff = buf;
+ data_diff ^= rnd;
+ break;
}
+ }
- // return number of successful tests
- return c;
+ // return number of successful tests
+ return c;
}
@@ -167,44 +167,44 @@ int test_fpga_data_bus(void)
int test_fpga_address_bus(void)
//------------------------------------------------------------------------------
{
- int c, ok;
+ int c, ok;
uint32_t rnd, buf;
HAL_StatusTypeDef hal_result;
- // run some rounds of address bus test
+ // run some rounds of address bus test
for (c=0; c<TEST_NUM_ROUNDS; c++)
- {
- addr_diff = 0;
- // try to generate "random" number
- hal_result = HAL_RNG_GenerateRandomNumber(&rng_inst, &rnd);
- if (hal_result != HAL_OK) break;
-
- // we only have 2^22 32-bit words
- rnd &= 0x00FFFFFC;
-
- // don't test zero addresses (fpga will store data, not address)
- if (rnd == 0) continue;
-
- // write dummy value to fpga at some non-zero address
- ok = fmc_write_32(rnd, &buf);
- if (ok != 0) break;
-
- // read value from fpga
- ok = fmc_read_32(0, &buf);
- if (ok != 0) break;
-
- // fpga receives address of 32-bit word, while we need
- // byte address here to compare
- buf <<= 2;
-
- // compare (abort testing in case of error)
- if (buf != rnd)
- {
- addr_diff = buf;
- addr_diff ^= rnd;
- break;
- }
- }
+ {
+ addr_diff = 0;
+ // try to generate "random" number
+ hal_result = HAL_RNG_GenerateRandomNumber(&rng_inst, &rnd);
+ if (hal_result != HAL_OK) break;
+
+ // we only have 2^22 32-bit words
+ rnd &= 0x00FFFFFC;
+
+ // don't test zero addresses (fpga will store data, not address)
+ if (rnd == 0) continue;
+
+ // write dummy value to fpga at some non-zero address
+ ok = fmc_write_32(rnd, &buf);
+ if (ok != 0) break;
+
+ // read value from fpga
+ ok = fmc_read_32(0, &buf);
+ if (ok != 0) break;
+
+ // fpga receives address of 32-bit word, while we need
+ // byte address here to compare
+ buf <<= 2;
+
+ // compare (abort testing in case of error)
+ if (buf != rnd)
+ {
+ addr_diff = buf;
+ addr_diff ^= rnd;
+ break;
+ }
+ }
return c;
}
@@ -236,7 +236,7 @@ void SystemClock_Config(void)
HAL_PWREx_ActivateOverDrive();
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1
- |RCC_CLOCKTYPE_PCLK2;
+ |RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
@@ -263,14 +263,14 @@ void MX_RNG_Init(void)
void MX_GPIO_Init(void)
//------------------------------------------------------------------------------
{
- GPIO_InitTypeDef GPIO_InitStruct;
+ GPIO_InitTypeDef GPIO_InitStruct;
__GPIOJ_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
+ GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
HAL_GPIO_Init(GPIOJ, &GPIO_InitStruct);
}
diff --git a/src/fmc-test/src/stm-fmc.c b/src/fmc-test/src/stm-fmc.c
index 5459965..ca1a38d 100644
--- a/src/fmc-test/src/stm-fmc.c
+++ b/src/fmc-test/src/stm-fmc.c
@@ -19,11 +19,11 @@ SRAM_HandleTypeDef _fmc_fpga_inst;
void fmc_init(void)
//------------------------------------------------------------------------------
{
- // configure fmc pins
- _fmc_init_gpio();
+ // configure fmc pins
+ _fmc_init_gpio();
- // configure fmc registers
- _fmc_init_params();
+ // configure fmc registers
+ _fmc_init_params();
}
@@ -31,59 +31,59 @@ void fmc_init(void)
int fmc_write_32(uint32_t addr, uint32_t *data)
//------------------------------------------------------------------------------
{
- // calculate target fpga address
- uint32_t ptr = FMC_FPGA_BASE_ADDR + (addr & FMC_FPGA_ADDR_MASK);
+ // calculate target fpga address
+ uint32_t ptr = FMC_FPGA_BASE_ADDR + (addr & FMC_FPGA_ADDR_MASK);
- // write data to fpga
- HAL_StatusTypeDef ok = HAL_SRAM_Write_32b(&_fmc_fpga_inst, (uint32_t *)ptr, data, 1);
+ // write data to fpga
+ HAL_StatusTypeDef ok = HAL_SRAM_Write_32b(&_fmc_fpga_inst, (uint32_t *)ptr, data, 1);
- // check for error
- if (ok != HAL_OK) return -1;
+ // check for error
+ if (ok != HAL_OK) return -1;
- // wait for transaction to complete
- int wait = _fmc_nwait_idle();
+ // wait for transaction to complete
+ int wait = _fmc_nwait_idle();
- // check for timeout
- if (wait != 0) return -1;
+ // check for timeout
+ if (wait != 0) return -1;
- // everything went ok
- return 0;
+ // everything went ok
+ return 0;
}
//------------------------------------------------------------------------------
int fmc_read_32(uint32_t addr, uint32_t *data)
- //------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
{
- // calculate target fpga address
- uint32_t ptr = FMC_FPGA_BASE_ADDR + (addr & FMC_FPGA_ADDR_MASK);
+ // calculate target fpga address
+ uint32_t ptr = FMC_FPGA_BASE_ADDR + (addr & FMC_FPGA_ADDR_MASK);
- // perform dummy read transaction
- HAL_StatusTypeDef ok = HAL_SRAM_Read_32b(&_fmc_fpga_inst, (uint32_t *)ptr, data, 1);
+ // perform dummy read transaction
+ HAL_StatusTypeDef ok = HAL_SRAM_Read_32b(&_fmc_fpga_inst, (uint32_t *)ptr, data, 1);
- // check for error
- if (ok != HAL_OK) return -1;
+ // check for error
+ if (ok != HAL_OK) return -1;
- // wait for dummy transaction to complete
- int wait = _fmc_nwait_idle();
+ // wait for dummy transaction to complete
+ int wait = _fmc_nwait_idle();
- // check for timeout
- if (wait != 0) return -1;
+ // check for timeout
+ if (wait != 0) return -1;
- // read data from fpga
- ok = HAL_SRAM_Read_32b(&_fmc_fpga_inst, (uint32_t *)ptr, data, 1);
+ // read data from fpga
+ ok = HAL_SRAM_Read_32b(&_fmc_fpga_inst, (uint32_t *)ptr, data, 1);
- // check for error
- if (ok != HAL_OK) return -1;
+ // check for error
+ if (ok != HAL_OK) return -1;
- // wait for read transaction to complete
- wait = _fmc_nwait_idle();
+ // wait for read transaction to complete
+ wait = _fmc_nwait_idle();
- // check for timeout
- if (wait != 0) return -1;
+ // check for timeout
+ if (wait != 0) return -1;
- // everything went ok
- return 0;
+ // everything went ok
+ return 0;
}
@@ -93,20 +93,20 @@ int _fmc_nwait_idle()
{
int cnt; // counter
- // poll NWAIT (number of iterations is limited)
+ // poll NWAIT (number of iterations is limited)
for (cnt=0; cnt<FMC_FPGA_NWAIT_MAX_POLL_TICKS; cnt++)
- {
+ {
// read pin state
- GPIO_PinState nwait = HAL_GPIO_ReadPin(FMC_GPIO_PORT_NWAIT, FMC_GPIO_PIN_NWAIT);
+ GPIO_PinState nwait = HAL_GPIO_ReadPin(FMC_GPIO_PORT_NWAIT, FMC_GPIO_PIN_NWAIT);
// stop waiting if fpga is ready
- if (nwait == FMC_NWAIT_IDLE) break;
- }
+ if (nwait == FMC_NWAIT_IDLE) break;
+ }
- // check for timeout
+ // check for timeout
if (cnt >= FMC_FPGA_NWAIT_MAX_POLL_TICKS) return -1;
- // ok
+ // ok
return 0;
}
@@ -114,93 +114,93 @@ int _fmc_nwait_idle()
void _fmc_init_gpio(void)
//------------------------------------------------------------------------------
{
- // enable gpio clocks
- __GPIOA_CLK_ENABLE();
- __GPIOB_CLK_ENABLE();
- __GPIOD_CLK_ENABLE();
+ // enable gpio clocks
+ __GPIOA_CLK_ENABLE();
+ __GPIOB_CLK_ENABLE();
+ __GPIOD_CLK_ENABLE();
__GPIOE_CLK_ENABLE();
- __GPIOF_CLK_ENABLE();
- __GPIOG_CLK_ENABLE();
- __GPIOH_CLK_ENABLE();
+ __GPIOF_CLK_ENABLE();
+ __GPIOG_CLK_ENABLE();
+ __GPIOH_CLK_ENABLE();
__GPIOI_CLK_ENABLE();
- // enable fmc clock
- __FMC_CLK_ENABLE();
+ // enable fmc clock
+ __FMC_CLK_ENABLE();
- // structure
- GPIO_InitTypeDef GPIO_InitStruct;
+ // structure
+ GPIO_InitTypeDef GPIO_InitStruct;
- // Port B
- GPIO_InitStruct.Pin = GPIO_PIN_7;
+ // Port B
+ GPIO_InitStruct.Pin = GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF12_FMC;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
- // Port D
- GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
- |GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15
- |GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_3|GPIO_PIN_4
- |GPIO_PIN_5|GPIO_PIN_7;
+ // Port D
+ GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
+ |GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15
+ |GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_3|GPIO_PIN_4
+ |GPIO_PIN_5|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF12_FMC;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
- /*
- * When FMC is working with fixed latency, NWAIT pin must not be
- * configured in AF mode, according to STM32F429 errata.
- */
+ /*
+ * When FMC is working with fixed latency, NWAIT pin must not be
+ * configured in AF mode, according to STM32F429 errata.
+ */
- // Port D (GPIO!)
+ // Port D (GPIO!)
GPIO_InitStruct.Pin = GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
- // Port E
- GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_7
- |GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
- |GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
+ // Port E
+ GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_7
+ |GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
+ |GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF12_FMC;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
- // Port F
- GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
- |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_12|GPIO_PIN_13
- |GPIO_PIN_14|GPIO_PIN_15;
+ // Port F
+ GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
+ |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_12|GPIO_PIN_13
+ |GPIO_PIN_14|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF12_FMC;
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
- // Port G
- GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
- |GPIO_PIN_4|GPIO_PIN_5;
+ // Port G
+ GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
+ |GPIO_PIN_4|GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF12_FMC;
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
- // Port H
- GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
- |GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
+ // Port H
+ GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
+ |GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF12_FMC;
HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
- // Port I
+ // Port I
GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_0|GPIO_PIN_1
- |GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_6|GPIO_PIN_7;
+ |GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
@@ -213,87 +213,87 @@ void _fmc_init_gpio(void)
void _fmc_init_params(void)
//------------------------------------------------------------------------------
{
- /*
- * fill internal fields
- */
- _fmc_fpga_inst.Instance = FMC_NORSRAM_DEVICE;
+ /*
+ * fill internal fields
+ */
+ _fmc_fpga_inst.Instance = FMC_NORSRAM_DEVICE;
_fmc_fpga_inst.Extended = FMC_NORSRAM_EXTENDED_DEVICE;
- /*
- * configure fmc interface settings
- */
+ /*
+ * configure fmc interface settings
+ */
- // use the first bank and corresponding chip select
+ // use the first bank and corresponding chip select
_fmc_fpga_inst.Init.NSBank = FMC_NORSRAM_BANK1;
- // data and address buses are separate
+ // data and address buses are separate
_fmc_fpga_inst.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE;
- // fpga mimics psram-type memory
+ // fpga mimics psram-type memory
_fmc_fpga_inst.Init.MemoryType = FMC_MEMORY_TYPE_PSRAM;
- // data bus is 32-bit
+ // data bus is 32-bit
_fmc_fpga_inst.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_32;
- // read transaction is sync
+ // read transaction is sync
_fmc_fpga_inst.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_ENABLE;
- // this _must_ be configured to high, according to errata, otherwise
- // the processor may hang after trying to access fpga via fmc
+ // this _must_ be configured to high, according to errata, otherwise
+ // the processor may hang after trying to access fpga via fmc
_fmc_fpga_inst.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_HIGH;
- // wrap mode is not supported
+ // wrap mode is not supported
_fmc_fpga_inst.Init.WrapMode = FMC_WRAP_MODE_DISABLE;
- // don't care in fixed latency mode
+ // don't care in fixed latency mode
_fmc_fpga_inst.Init.WaitSignalActive = FMC_WAIT_TIMING_DURING_WS;
- // allow write access to fpga
+ // allow write access to fpga
_fmc_fpga_inst.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE;
- // use fixed latency mode (ignore wait signal)
+ // use fixed latency mode (ignore wait signal)
_fmc_fpga_inst.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE;
- // write and read have same timing
+ // write and read have same timing
_fmc_fpga_inst.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE;
- // don't care in sync mode
+ // don't care in sync mode
_fmc_fpga_inst.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE;
- // write transaction is sync
+ // write transaction is sync
_fmc_fpga_inst.Init.WriteBurst = FMC_WRITE_BURST_ENABLE;
- // keep clock always active
+ // keep clock always active
_fmc_fpga_inst.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ASYNC;
- /*
- * configure fmc timing parameters
- */
+ /*
+ * configure fmc timing parameters
+ */
FMC_NORSRAM_TimingTypeDef fmc_timing;
- // don't care in sync mode
+ // don't care in sync mode
fmc_timing.AddressSetupTime = 15;
- // don't care in sync mode
+ // don't care in sync mode
fmc_timing.AddressHoldTime = 15;
- // don't care in sync mode
+ // don't care in sync mode
fmc_timing.DataSetupTime = 255;
- // not needed, since nwait will be polled manually
+ // not needed, since nwait will be polled manually
fmc_timing.BusTurnAroundDuration = 0;
- // use smallest allowed divisor for best performance
+ // use smallest allowed divisor for best performance
fmc_timing.CLKDivision = 2;
- // stm is too slow to work with min allowed 2-cycle latency
+ // stm is too slow to work with min allowed 2-cycle latency
fmc_timing.DataLatency = 3;
- // don't care in sync mode
+ // don't care in sync mode
fmc_timing.AccessMode = FMC_ACCESS_MODE_A;
- // initialize fmc
+ // initialize fmc
HAL_SRAM_Init(&_fmc_fpga_inst, &fmc_timing, NULL);
}
diff --git a/src/fmc-test/src/stm32f4xx_hal_msp.c b/src/fmc-test/src/stm32f4xx_hal_msp.c
index fcb10ad..f932c45 100644
--- a/src/fmc-test/src/stm32f4xx_hal_msp.c
+++ b/src/fmc-test/src/stm32f4xx_hal_msp.c
@@ -1,36 +1,36 @@
/**
- ******************************************************************************
- * File Name : stm32f4xx_hal_msp.c
- * Description : This file provides code for the MSP Initialization
- * and de-Initialization codes.
- ******************************************************************************
- *
- * COPYRIGHT(c) 2015 STMicroelectronics
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- ******************************************************************************
- */
+******************************************************************************
+* File Name : stm32f4xx_hal_msp.c
+* Description : This file provides code for the MSP Initialization
+* and de-Initialization codes.
+******************************************************************************
+*
+* COPYRIGHT(c) 2015 STMicroelectronics
+*
+* Redistribution and use in source and binary forms, with or without modification,
+* are permitted provided that the following conditions are met:
+* 1. Redistributions of source code must retain the above copyright notice,
+* this list of conditions and the following disclaimer.
+* 2. Redistributions in binary form must reproduce the above copyright notice,
+* this list of conditions and the following disclaimer in the documentation
+* and/or other materials provided with the distribution.
+* 3. Neither the name of STMicroelectronics nor the names of its contributors
+* may be used to endorse or promote products derived from this software
+* without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+******************************************************************************
+*/
/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx_hal.h"
@@ -39,8 +39,8 @@
/* USER CODE END 0 */
/**
- * Initializes the Global MSP.
- */
+ * Initializes the Global MSP.
+ */
void HAL_MspInit(void)
{
/* USER CODE BEGIN MspInit 0 */
@@ -50,7 +50,7 @@ void HAL_MspInit(void)
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
/* System interrupt init*/
-/* SysTick_IRQn interrupt configuration */
+ /* SysTick_IRQn interrupt configuration */
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
/* USER CODE BEGIN MspInit 1 */
@@ -62,16 +62,16 @@ void HAL_RNG_MspInit(RNG_HandleTypeDef* hrng)
{
if(hrng->Instance==RNG)
- {
- /* USER CODE BEGIN RNG_MspInit 0 */
+ {
+ /* USER CODE BEGIN RNG_MspInit 0 */
- /* USER CODE END RNG_MspInit 0 */
- /* Peripheral clock enable */
- __RNG_CLK_ENABLE();
- /* USER CODE BEGIN RNG_MspInit 1 */
+ /* USER CODE END RNG_MspInit 0 */
+ /* Peripheral clock enable */
+ __RNG_CLK_ENABLE();
+ /* USER CODE BEGIN RNG_MspInit 1 */
- /* USER CODE END RNG_MspInit 1 */
- }
+ /* USER CODE END RNG_MspInit 1 */
+ }
}
@@ -79,13 +79,13 @@ void HAL_RNG_MspDeInit(RNG_HandleTypeDef* hrng)
{
if(hrng->Instance==RNG)
- {
- /* USER CODE BEGIN RNG_MspDeInit 0 */
+ {
+ /* USER CODE BEGIN RNG_MspDeInit 0 */
- /* USER CODE END RNG_MspDeInit 0 */
- /* Peripheral clock disable */
- __RNG_CLK_DISABLE();
- }
+ /* USER CODE END RNG_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __RNG_CLK_DISABLE();
+ }
/* USER CODE BEGIN RNG_MspDeInit 1 */
/* USER CODE END RNG_MspDeInit 1 */
diff --git a/src/fmc-test/src/stm32f4xx_it.c b/src/fmc-test/src/stm32f4xx_it.c
index 92c9a09..b2b64bf 100644
--- a/src/fmc-test/src/stm32f4xx_it.c
+++ b/src/fmc-test/src/stm32f4xx_it.c
@@ -1,35 +1,35 @@
/**
- ******************************************************************************
- * @file stm32f4xx_it.c
- * @brief Interrupt Service Routines.
- ******************************************************************************
- *
- * COPYRIGHT(c) 2015 STMicroelectronics
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- ******************************************************************************
- */
+******************************************************************************
+* @file stm32f4xx_it.c
+* @brief Interrupt Service Routines.
+******************************************************************************
+*
+* COPYRIGHT(c) 2015 STMicroelectronics
+*
+* Redistribution and use in source and binary forms, with or without modification,
+* are permitted provided that the following conditions are met:
+* 1. Redistributions of source code must retain the above copyright notice,
+* this list of conditions and the following disclaimer.
+* 2. Redistributions in binary form must reproduce the above copyright notice,
+* this list of conditions and the following disclaimer in the documentation
+* and/or other materials provided with the distribution.
+* 3. Neither the name of STMicroelectronics nor the names of its contributors
+* may be used to endorse or promote products derived from this software
+* without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+******************************************************************************
+*/
/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx_hal.h"
#include "stm32f4xx.h"
@@ -46,8 +46,8 @@
/******************************************************************************/
/**
-* @brief This function handles System tick timer.
-*/
+ * @brief This function handles System tick timer.
+ */
void SysTick_Handler(void)
{
/* USER CODE BEGIN SysTick_IRQn 0 */