Semi working DMA code for the display driver! So excited! Now to work out the bugs :)

This commit is contained in:
Michael Colton 2017-06-24 23:42:12 -06:00
parent 26b7ef6f6d
commit 14d70c8afd
8 changed files with 4921 additions and 6040 deletions

View file

@ -179,13 +179,13 @@
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.extrawarn.594279191.1661284885" name="Enable extra warnings (-Wextra)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.extrawarn.594279191"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.freestanding.2010758088.550463969" name="Assume freestanding environment (-ffreestanding)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.freestanding.2010758088"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nomoveloopinvariants.519889803.937775351" name="Disable loop invariant move (-fno-move-loop-invariants)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nomoveloopinvariants.519889803"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.821521074" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level" value="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.none" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength.1868926411" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar.1998882563" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections.28294102" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.datasections.1579665519" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.datasections" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level.1545950493" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level" value="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level.max" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format.1995605794" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.821521074" name="Optimization Level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level" value="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.none" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength.1868926411" name="Message length (-fmessage-length=0)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar.1998882563" name="'char' is signed (-fsigned-char)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections.28294102" name="Function sections (-ffunction-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.datasections.1579665519" name="Data sections (-fdata-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.datasections" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level.1545950493" name="Debug level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level" value="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level.max" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format.1995605794" name="Debug format" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format"/>
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="ilg.gnuarmeclipse.managedbuild.cross.targetPlatform" isAbstract="false" osList="all" superClass="ilg.gnuarmeclipse.managedbuild.cross.targetPlatform"/>
<tool errorParsers="org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GCCErrorParser" id="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.238834628" name="Cross ARM GNU Assembler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.916452879">
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.input.963042472" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.input"/>
@ -229,7 +229,7 @@
<sourceEntries>
<entry excluding="Examples" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="DSP_Lib"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
<entry excluding="src/stm32f7-hal/stm32f7xx_ll_usb.c|src/stm32f7-hal/stm32f7xx_ll_sdmmc.c|src/stm32f7-hal/stm32f7xx_ll_fmc.c|src/stm32f7-hal/stm32f7xx_hal_wwdg.c|src/stm32f7-hal/stm32f7xx_hal_sram.c|src/stm32f7-hal/stm32f7xx_hal_spdifrx.c|src/stm32f7-hal/stm32f7xx_hal_smartcard.c|src/stm32f7-hal/stm32f7xx_hal_sdram.c|src/stm32f7-hal/stm32f7xx_hal_sd.c|src/stm32f7-hal/stm32f7xx_hal_sai_ex.c|src/stm32f7-hal/stm32f7xx_hal_sai.c|src/stm32f7-hal/stm32f7xx_hal_rtc_ex.c|src/stm32f7-hal/stm32f7xx_hal_rtc.c|src/stm32f7-hal/stm32f7xx_hal_rng.c|src/stm32f7-hal/stm32f7xx_hal_qspi.c|src/stm32f7-hal/stm32f7xx_hal_pcd_ex.c|src/stm32f7-hal/stm32f7xx_hal_pcd.c|src/stm32f7-hal/stm32f7xx_hal_nor.c|src/stm32f7-hal/stm32f7xx_hal_nand.c|src/stm32f7-hal/stm32f7xx_hal_ltdc.c|src/stm32f7-hal/stm32f7xx_hal_lptim.c|src/stm32f7-hal/stm32f7xx_hal_irda.c|src/stm32f7-hal/stm32f7xx_hal_i2s.c|src/stm32f7-hal/stm32f7xx_hal_i2c_ex.c|src/stm32f7-hal/stm32f7xx_hal_hcd.c|src/stm32f7-hal/stm32f7xx_hal_hash_ex.c|src/stm32f7-hal/stm32f7xx_hal_hash.c|src/stm32f7-hal/stm32f7xx_hal_flash_ex.c|src/stm32f7-hal/stm32f7xx_hal_eth.c|src/stm32f7-hal/stm32f7xx_hal_dma_ex.c|src/stm32f7-hal/stm32f7xx_hal_dma2d.c|src/stm32f7-hal/stm32f7xx_hal_dma.c|src/stm32f7-hal/stm32f7xx_hal_dcmi_ex.c|src/stm32f7-hal/stm32f7xx_hal_dcmi.c|src/stm32f7-hal/stm32f7xx_hal_dac_ex.c|src/stm32f7-hal/stm32f7xx_hal_cryp_ex.c|src/stm32f7-hal/stm32f7xx_hal_cryp.c|src/stm32f7-hal/stm32f7xx_hal_crc.c|src/stm32f7-hal/stm32f7xx_hal_cec.c|src/stm32f7-hal/stm32f7xx_hal_can.c|src/stm32f7-hal/stm32f7xx_hal_adc_ex.c|src/stm32f7-hal/stm32f7xx_hal_msp_template.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="system"/>
<entry excluding="src/stm32f7-hal/stm32f7xx_ll_usb.c|src/stm32f7-hal/stm32f7xx_ll_sdmmc.c|src/stm32f7-hal/stm32f7xx_ll_fmc.c|src/stm32f7-hal/stm32f7xx_hal_wwdg.c|src/stm32f7-hal/stm32f7xx_hal_sram.c|src/stm32f7-hal/stm32f7xx_hal_spdifrx.c|src/stm32f7-hal/stm32f7xx_hal_smartcard.c|src/stm32f7-hal/stm32f7xx_hal_sdram.c|src/stm32f7-hal/stm32f7xx_hal_sd.c|src/stm32f7-hal/stm32f7xx_hal_sai_ex.c|src/stm32f7-hal/stm32f7xx_hal_sai.c|src/stm32f7-hal/stm32f7xx_hal_rtc_ex.c|src/stm32f7-hal/stm32f7xx_hal_rtc.c|src/stm32f7-hal/stm32f7xx_hal_rng.c|src/stm32f7-hal/stm32f7xx_hal_qspi.c|src/stm32f7-hal/stm32f7xx_hal_pcd_ex.c|src/stm32f7-hal/stm32f7xx_hal_pcd.c|src/stm32f7-hal/stm32f7xx_hal_nor.c|src/stm32f7-hal/stm32f7xx_hal_nand.c|src/stm32f7-hal/stm32f7xx_hal_ltdc.c|src/stm32f7-hal/stm32f7xx_hal_lptim.c|src/stm32f7-hal/stm32f7xx_hal_irda.c|src/stm32f7-hal/stm32f7xx_hal_i2s.c|src/stm32f7-hal/stm32f7xx_hal_i2c_ex.c|src/stm32f7-hal/stm32f7xx_hal_hcd.c|src/stm32f7-hal/stm32f7xx_hal_hash_ex.c|src/stm32f7-hal/stm32f7xx_hal_hash.c|src/stm32f7-hal/stm32f7xx_hal_flash_ex.c|src/stm32f7-hal/stm32f7xx_hal_eth.c|src/stm32f7-hal/stm32f7xx_hal_dma_ex.c|src/stm32f7-hal/stm32f7xx_hal_dma2d.c|src/stm32f7-hal/stm32f7xx_hal_dcmi_ex.c|src/stm32f7-hal/stm32f7xx_hal_dcmi.c|src/stm32f7-hal/stm32f7xx_hal_dac_ex.c|src/stm32f7-hal/stm32f7xx_hal_cryp_ex.c|src/stm32f7-hal/stm32f7xx_hal_cryp.c|src/stm32f7-hal/stm32f7xx_hal_crc.c|src/stm32f7-hal/stm32f7xx_hal_cec.c|src/stm32f7-hal/stm32f7xx_hal_can.c|src/stm32f7-hal/stm32f7xx_hal_adc_ex.c|src/stm32f7-hal/stm32f7xx_hal_msp_template.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="system"/>
</sourceEntries>
</configuration>
</storageModule>

View file

@ -5,7 +5,7 @@
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-1667007537446145964" id="ilg.gnuarmeclipse.managedbuild.cross.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings Cross ARM" parameter="${COMMAND} ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="1402290119274807089" id="ilg.gnuarmeclipse.managedbuild.cross.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings Cross ARM" parameter="${COMMAND} ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>
@ -16,7 +16,7 @@
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-1648056160672688194" id="ilg.gnuarmeclipse.managedbuild.cross.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings Cross ARM" parameter="${COMMAND} ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="1421241496048264859" id="ilg.gnuarmeclipse.managedbuild.cross.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings Cross ARM" parameter="${COMMAND} ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>

File diff suppressed because it is too large Load diff

View file

@ -100,17 +100,23 @@ TIM_HandleTypeDef TimHandle4;
#define MASKWHITE 0b1111111111111111
#define MASKBLACK 0b0000000000000000
/* DMA */
static DMA_HandleTypeDef hdma_tx;
static DMA_HandleTypeDef hdma_rx;
/* Definition for SPIx's DMA */
#define SPIx_TX_DMA_CHANNEL DMA_CHANNEL_3
#define SPIx_TX_DMA_STREAM DMA2_Stream5
#define SPIx_TX_DMA_STREAM DMA2_Stream3
#define SPIx_RX_DMA_CHANNEL DMA_CHANNEL_3
#define SPIx_RX_DMA_STREAM DMA2_Stream2
/* Definition for SPIx's NVIC */
#define SPIx_DMA_TX_IRQn DMA2_Stream3_IRQn
#define SPIx_DMA_RX_IRQn DMA2_Stream0_IRQn
#define SPIx_DMA_RX_IRQn DMA2_Stream2_IRQn
#define SPIx_DMA_TX_IRQHandler DMA2_Stream3_IRQHandler
#define SPIx_DMA_RX_IRQHandler DMA2_Stream0_IRQHandler
#define SPIx_DMA_RX_IRQHandler DMA2_Stream2_IRQHandler
SPI_HandleTypeDef SpiHandle;
UART_HandleTypeDef UartHandle;

View file

@ -241,9 +241,11 @@ void Adafruit_GFX_fillRect(int16_t x, int16_t y, int16_t w, int16_t h,
uint16_t color) {
// Update in subclasses if desired!
int16_t i;
for ( i=x; i<x+w; i++) {
Adafruit_ILI9340_drawFastVLine(i, y, h, color);
}
// for ( i=x; i<x+w; i++) {
// Adafruit_ILI9340_drawFastVLine(i, y, h, color);
// }
Adafruit_ILI9340_fillRect(x, y, w, h, color);
}
void Adafruit_GFX_fillScreen(uint16_t color) {

View file

@ -65,6 +65,7 @@
// int _height = ILI9340_TFTHEIGHT; //320
uint16_t rxBuf[10];
uint16_t txBuf[2];
uint8_t txBuf2[320 * 240 * 2];
// Constructor when using hardware SPI. Faster, but must use SPI pins
// specific to each board type (e.g. 11,13 for Uno, 51,52 for Mega, etc.)
@ -127,8 +128,8 @@ void Adafruit_ILI9340_writecommand(uint16_t c) {
txBuf[0] = c; // & 0xFF;
//spi_readWrite(SpiHandle, rxBuf, txBuf, 1);
HAL_SPI_Transmit(&SpiHandle, txBuf, 1 /*cnt * 2*/, 1);
//HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)txBuf, (uint8_t *)rxBuf, 1, 1000);
//HAL_SPI_Transmit_DMA(&SpiHandle, txBuf, 1);
//while(SpiHandle.State == HAL_SPI_STATE_BUSY_TX);
//SET_BIT(csport, cspinmask);
HAL_GPIO_WritePin(LCD_NSS.port, LCD_NSS.pin, 1);
@ -151,7 +152,8 @@ void Adafruit_ILI9340_writedata(uint16_t c) {
txBuf[0] = c; // & 0xFF;
//spi_readWrite(SpiHandle, rxBuf, txBuf, 1);
HAL_SPI_Transmit(&SpiHandle, txBuf, 1 /*cnt * 2*/, 1);
//HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)txBuf, (uint8_t *)rxBuf, 1, 1000);
//HAL_SPI_Transmit_DMA(&SpiHandle, txBuf, 1);
//while(SpiHandle.State == HAL_SPI_STATE_BUSY_TX);
//digitalWrite(_cs, HIGH);
//SET_BIT(csport, cspinmask);
@ -561,18 +563,44 @@ void Adafruit_ILI9340_fillRect(int16_t x, int16_t y, int16_t w, int16_t h,
HAL_GPIO_WritePin(LCD_NSS.port, LCD_NSS.pin, 0);
//digitalWrite(_cs, LOW);
for(y=h; y>0; y--) {
for(x=w; x>0; x--) {
//for(y=h; y>0; y--) {
// for(x=w; x>0; x--) {
//spiwrite(hi);
//spiwrite(lo);
//txBuf[0] = hi;
//txBuf[1] = lo;
txBuf[0] = color;
uint32_t totalPixels = h * w;
//uint8_t txBuf2[totalPixels * 2];
spi_readWrite(SpiHandle, rxBuf, txBuf, 1);
//HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)txBuf, (uint8_t*)rxBuf, 2, 1000);
}
for(uint32_t i = 0; i < totalPixels; i+=2)
{
//txBuf2[i] = color;
txBuf2[i] = color >> 8;
txBuf2[i + 1] = color & 0xFF;
}
//for()= color;
//spi_readWrite(SpiHandle, rxBuf, txBuf, 1);
//hdma_tx.Init.MemInc = DMA_MINC_DISABLE;
//HAL_DMA_Init(&hdma_tx);
HAL_SPI_Transmit_DMA(&SpiHandle, &txBuf2, 0xFFFF);
while(SpiHandle.State == HAL_SPI_STATE_BUSY_TX);
//HAL_SPI_Transmit_DMA(&SpiHandle, &txBuf2, 0xFFFF);
//while(SpiHandle.State == HAL_SPI_STATE_BUSY_TX);
//HAL_Delay(1000);
//hdma_tx.Init.MemInc = DMA_MINC_ENABLE;
//HAL_DMA_Init(&hdma_tx);
//}
//}
//digitalWrite(_cs, HIGH);
//SET_BIT(csport, cspinmask);
HAL_GPIO_WritePin(LCD_NSS.port, LCD_NSS.pin, 1);

View file

@ -306,62 +306,61 @@ void teardownPeripheralPower()
void configDMA(SPI_HandleTypeDef *hspi)
{
// static DMA_HandleTypeDef hdma_tx;
// static DMA_HandleTypeDef hdma_rx;
//
//
// hdma_tx.Instance = SPIx_TX_DMA_STREAM;
//
// hdma_tx.Init.Channel = SPIx_TX_DMA_CHANNEL;
// hdma_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
// hdma_tx.Init.PeriphInc = DMA_PINC_DISABLE;
// hdma_tx.Init.MemInc = DMA_MINC_ENABLE;
// hdma_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
// hdma_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
// hdma_tx.Init.Mode = DMA_NORMAL;
// hdma_tx.Init.Priority = DMA_PRIORITY_LOW;
// hdma_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
// hdma_tx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
// hdma_tx.Init.MemBurst = DMA_MBURST_INC4;
// hdma_tx.Init.PeriphBurst = DMA_PBURST_INC4;
//
// HAL_DMA_Init(&hdma_tx);
//
// /* Associate the initialized DMA handle to the the SPI handle */
// __HAL_LINKDMA(hspi, hdmatx, hdma_tx);
//
// /* Configure the DMA handler for Transmission process */
// hdma_rx.Instance = SPIx_RX_DMA_STREAM;
//
// hdma_rx.Init.Channel = SPIx_RX_DMA_CHANNEL;
// hdma_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
// hdma_rx.Init.PeriphInc = DMA_PINC_DISABLE;
// hdma_rx.Init.MemInc = DMA_MINC_ENABLE;
// hdma_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
// hdma_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
// hdma_rx.Init.Mode = DMA_NORMAL;
// hdma_rx.Init.Priority = DMA_PRIORITY_HIGH;
// hdma_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
// hdma_rx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
// hdma_rx.Init.MemBurst = DMA_MBURST_INC4;
// hdma_rx.Init.PeriphBurst = DMA_PBURST_INC4;
//
// HAL_DMA_Init(&hdma_rx);
//
// /* Associate the initialized DMA handle to the the SPI handle */
// __HAL_LINKDMA(hspi, hdmarx, hdma_rx);
//
// /*##-4- Configure the NVIC for DMA #########################################*/
// /* NVIC configuration for DMA transfer complete interrupt (SPI3_TX) */
// HAL_NVIC_SetPriority(15/*SPIx_DMA_TX_IRQn*/, 0, 1);
// HAL_NVIC_EnableIRQ(SPIx_DMA_TX_IRQn);
//
// /* NVIC configuration for DMA transfer complete interrupt (SPI3_RX) */
// HAL_NVIC_SetPriority(SPIx_DMA_RX_IRQn, 0, 0);
// HAL_NVIC_EnableIRQ(SPIx_DMA_RX_IRQn);
//
//
// //HAL_DMA_Start();
hdma_tx.Instance = SPIx_TX_DMA_STREAM;
hdma_tx.Init.Channel = SPIx_TX_DMA_CHANNEL;
hdma_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
hdma_tx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_tx.Init.MemInc = DMA_MINC_ENABLE;
hdma_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma_tx.Init.Mode = DMA_NORMAL;
hdma_tx.Init.Priority = DMA_PRIORITY_LOW;
hdma_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
hdma_tx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
hdma_tx.Init.MemBurst = DMA_MBURST_INC4;
hdma_tx.Init.PeriphBurst = DMA_PBURST_INC4;
HAL_DMA_Init(&hdma_tx);
/* Associate the initialized DMA handle to the the SPI handle */
__HAL_LINKDMA(hspi, hdmatx, hdma_tx);
/* Configure the DMA handler for Transmission process */
hdma_rx.Instance = SPIx_RX_DMA_STREAM;
hdma_rx.Init.Channel = SPIx_RX_DMA_CHANNEL;
hdma_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
hdma_rx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_rx.Init.MemInc = DMA_MINC_ENABLE;
hdma_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma_rx.Init.Mode = DMA_NORMAL;
hdma_rx.Init.Priority = DMA_PRIORITY_HIGH;
hdma_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
hdma_rx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
hdma_rx.Init.MemBurst = DMA_MBURST_INC4;
hdma_rx.Init.PeriphBurst = DMA_PBURST_INC4;
HAL_DMA_Init(&hdma_rx);
/* Associate the initialized DMA handle to the the SPI handle */
__HAL_LINKDMA(hspi, hdmarx, hdma_rx);
/*##-4- Configure the NVIC for DMA #########################################*/
/* NVIC configuration for DMA transfer complete interrupt (SPI3_TX) */
HAL_NVIC_SetPriority(15/*SPIx_DMA_TX_IRQn*/, 0, 1);
HAL_NVIC_EnableIRQ(SPIx_DMA_TX_IRQn);
/* NVIC configuration for DMA transfer complete interrupt (SPI3_RX) */
HAL_NVIC_SetPriority(SPIx_DMA_RX_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(SPIx_DMA_RX_IRQn);
//HAL_DMA_Start();
}
@ -987,7 +986,7 @@ main(int argc, char* argv[])
hal_setupPins();
spi_init();
// configDMA(&SpiHandle );
configDMA(&SpiHandle );
//I2C_HandleTypeDef hi2c;
@ -1065,8 +1064,18 @@ setFreq(vfoAFrequency);
Adafruit_ILI9340_begin();
Adafruit_ILI9340_setRotation(1);
//Adafruit_GFX_fillScreen(ILI9340_BLACK);
drawNumber('3', 0,0, 0xFFFF);
Adafruit_GFX_fillScreen(ILI9340_BLACK);
while(1)
{
// drawNumber('3', 0,0, 0xFFFF);
Adafruit_GFX_fillScreen(ILI9340_BLUE);
// drawNumber('3', 5,5, 0xFFFF);
Adafruit_GFX_fillScreen(ILI9340_RED);
}
Adafruit_GFX_setTextSize(3);
Adafruit_GFX_setTextWrap(1);
Adafruit_GFX_setTextColor(ILI9340_WHITE, ILI9340_BLACK);
@ -2027,6 +2036,20 @@ HAL_NVIC_EnableIRQ(TIM4_IRQn);
}
void DMA2_Stream2_IRQHandler(void)
{
//doNothing();
HAL_DMA_IRQHandler(&hdma_rx);
//HAL_GPIO_WritePin(LCD_NSS.port, LCD_NSS.pin, 1);
}
void DMA2_Stream3_IRQHandler(void)
{
//doNothing();
HAL_DMA_IRQHandler(&hdma_tx);
//HAL_GPIO_WritePin(LCD_NSS.port, LCD_NSS.pin, 1);
}
void TIM3_IRQHandler(void)
{
HAL_TIM_IRQHandler(&TimHandle);

View file

@ -18,6 +18,7 @@
#include <stm32f7xx_hal_spi.h>
#include <stm32f7xx_hal_gpio.h>
#include <stm32f7xx_hal.h>
#include <stm32f7xx_hal_rcc.h>
#endif
void spi_init(void)
@ -25,7 +26,7 @@ void spi_init(void)
//SPI_InitTypeDef spiInitStructure;
GPIO_InitTypeDef gpioInitStructure;
HAL_SPI_MspInit(&SpiHandle);
__SPI1_CLK_ENABLE();
@ -70,6 +71,27 @@ void spi_init(void)
// HAL_GPIO_Init(LCD_NSS.port, &gpioInitStructure);
// //HAL_GPIO_WritePin(LCD_NSS.port, LCD_NSS.pin, 1); // TBD - should this be before init?
//Configure NVIC if needed.
//Configure DMA
// DMA_HandleTypeDef DmaHandle;
// DMA_InitTypeDef dmaInitStructure;
//
// HAL_DMA_DeInit(DMA2_Stream3);
//
// dmaInitStructure.Channel = DMA_CHANNEL_3;
// dmaInitStructure.Direction =
//Already enabled in the peripheral power function.....
//__DMA1_CLK_ENABLE;
//__DMA2_CLK_ENABLE; //
//__HAL_RCC_DMA1_CLK_ENABLE;
//__HAL_RCC_DMA2_CLK_ENABLE;
//DmaHandle.Init.
//HAL_SPI_MspInit(&SpiHandle);
SpiHandle.Instance = SPI1;
SpiHandle.Init.Direction = SPI_DIRECTION_2LINES;
@ -78,12 +100,14 @@ void spi_init(void)
SpiHandle.Init.CLKPolarity = SPI_POLARITY_HIGH;
SpiHandle.Init.CLKPhase = SPI_PHASE_2EDGE;
SpiHandle.Init.NSS = SPI_NSS_SOFT; //SPI_NSS_SOFT;
SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; //SPI_BAUDRATEPRESCALER_2;
SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB;
SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;
SpiHandle.Init.TIMode = SPI_TIMODE_DISABLED;
SpiHandle.Init.CRCPolynomial = 7;
if(HAL_SPI_Init(&SpiHandle) != HAL_OK)
{
/* Initialization Error */
@ -124,9 +148,9 @@ void spi_readWrite(SPI_HandleTypeDef SpiH, uint16_t* rxBuf, uint16_t* txBuf, uin
txTmp[1] = txBuf[0] & 0xFF;
//HAL_SPI_TransmitReceive(&SpiHandle, txBuf, rxBuf, cnt, 1000);
HAL_SPI_Transmit(&SpiHandle, txTmp, 2 /*cnt * 2*/, 1);
//HAL_SPI_Transmit(&SpiHandle, txTmp, 2 /*cnt * 2*/, 1);
//while(HAL_SPI_GetState(&SpiH) != HAL_SPI_STATE_READY);
//HAL_SPI_Transmit_DMA(&SpiH, txBuf, cnt);
HAL_SPI_Transmit_DMA(&SpiHandle, txTmp, cnt);
//while(HAL_SPI_GetState(&SpiH) != HAL_SPI_STATE_READY);
// //High, second edge