diff options
-rw-r--r-- | .cproject | 9 | ||||
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | .settings/language.settings.xml | 2 | ||||
-rw-r--r-- | CMSIS/MK20D10_features.h | 2 | ||||
-rw-r--r-- | board/pin_mux.c | 4 | ||||
-rw-r--r-- | k20_tester_Debug_Segger.launch | 1 | ||||
-rw-r--r-- | source/main.c | 70 |
7 files changed, 76 insertions, 13 deletions
@@ -17,7 +17,7 @@ <configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="${cross_rm} -rf" description="" id="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.475762548" name="Debug" parent="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug"> <folderInfo id="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.475762548." name="/" resourcePath=""> <toolChain id="ilg.gnuarmeclipse.managedbuild.cross.toolchain.elf.debug.1690074070" name="Cross ARM GCC" superClass="ilg.gnuarmeclipse.managedbuild.cross.toolchain.elf.debug"> - <option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.1531534215" 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.level.1531534215" name="Optimization Level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level" value="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.more" valueType="enumerated"/> <option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength.1376026763" 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.322137639" 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.85374014" name="Function sections (-ffunction-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections" value="true" valueType="boolean"/> @@ -40,6 +40,8 @@ <option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createflash.416739129" name="Create flash image" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createflash" value="true" valueType="boolean"/> <option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.printsize.2071799907" name="Print size" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.printsize" value="true" valueType="boolean"/> <option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.allwarn.998714097" name="Enable all common warnings (-Wall)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.allwarn" value="true" valueType="boolean"/> + <option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.pedantic.1394555272" name="Pedantic (-pedantic)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.pedantic" value="false" valueType="boolean"/> + <option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.extrawarn.1645809733" name="Enable extra warnings (-Wextra)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.extrawarn" value="true" valueType="boolean"/> <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="ilg.gnuarmeclipse.managedbuild.cross.targetPlatform.1444192880" isAbstract="false" osList="all" superClass="ilg.gnuarmeclipse.managedbuild.cross.targetPlatform"/> <builder buildPath="${workspace_loc:/k20_tester}/Debug" id="ilg.gnuarmeclipse.managedbuild.cross.builder.1236922579" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="ilg.gnuarmeclipse.managedbuild.cross.builder"/> <tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.959743626" name="Cross ARM GNU Assembler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler"> @@ -115,7 +117,9 @@ </inputType> </tool> <tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.archiver.1027019935" name="Cross ARM GNU Archiver" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.archiver"/> - <tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.createflash.765192573" name="Cross ARM GNU Create Flash Image" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.createflash"/> + <tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.createflash.765192573" name="Cross ARM GNU Create Flash Image" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.createflash"> + <option id="ilg.gnuarmeclipse.managedbuild.cross.option.createflash.choice.947331876" name="Output file format (-O)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.createflash.choice" value="ilg.gnuarmeclipse.managedbuild.cross.option.createflash.choice.binary" valueType="enumerated"/> + </tool> <tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.createlisting.1477096357" name="Cross ARM GNU Create Listing" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.createlisting"> <option id="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.source.1301136094" name="Display source (--source|-S)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.source" value="true" valueType="boolean"/> <option id="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.allheaders.225482937" name="Display all headers (--all-headers|-x)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.allheaders" value="true" valueType="boolean"/> @@ -134,6 +138,7 @@ </configuration> </storageModule> <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/> + <storageModule moduleId="ilg.gnuarmeclipse.managedbuild.packs"/> </cconfiguration> <cconfiguration id="ilg.gnuarmeclipse.managedbuild.cross.config.elf.release.1957441832"> <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="ilg.gnuarmeclipse.managedbuild.cross.config.elf.release.1957441832" moduleId="org.eclipse.cdt.core.settings" name="Release"> diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3df573f --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/Debug/ diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index 1542f4d..b8c5a53 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -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="-1094873678150620174" 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 "${INPUTS}"" prefer-non-shared="true"> + <provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-1200416645641174670" 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 "${INPUTS}"" prefer-non-shared="true"> <language-scope id="org.eclipse.cdt.core.gcc"/> <language-scope id="org.eclipse.cdt.core.g++"/> </provider> diff --git a/CMSIS/MK20D10_features.h b/CMSIS/MK20D10_features.h index 3729f04..d42d831 100644 --- a/CMSIS/MK20D10_features.h +++ b/CMSIS/MK20D10_features.h @@ -127,7 +127,7 @@ /* @brief DRY availability on the SoC. */ #define FSL_FEATURE_SOC_DRY_COUNT (0) /* @brief DSPI availability on the SoC. */ - #define FSL_FEATURE_SOC_DSPI_COUNT (2) + #define FSL_FEATURE_SOC_DSPI_COUNT (3) /* @brief EMVSIM availability on the SoC. */ #define FSL_FEATURE_SOC_EMVSIM_COUNT (0) /* @brief ENC availability on the SoC. */ diff --git a/board/pin_mux.c b/board/pin_mux.c index 6c536cc..910b4eb 100644 --- a/board/pin_mux.c +++ b/board/pin_mux.c @@ -92,7 +92,7 @@ void BOARD_InitPins(void) PORT_SetPinMux(PORTB, 21u, kPORT_MuxAlt2); /* SPI2_SCK */ PORT_SetPinMux(PORTB, 22u, kPORT_MuxAlt2); /* SPI2_SOUT */ PORT_SetPinMux(PORTB, 23u, kPORT_MuxAlt2); /* SPI2_SIN */ - PORT_SetPinMux(PORTB, 20u, kPORT_MuxAsGpio); /* SPI2_SS */ + PORT_SetPinMux(PORTB, 20u, kPORT_MuxAlt2); /* SPI2_SS */ /* Open Drain INT pins config */ od_config.mux = kPORT_MuxAsGpio; @@ -104,7 +104,7 @@ void BOARD_InitPins(void) od_config.lockRegister = kPORT_UnlockRegister; GPIO_PinInit(GPIOA, 16u, &gpio_out_hi_config); PORT_SetPinConfig(PORTA, 16u, &od_config); /* MCU_INT1 */ - GPIO_PinInit(GPIOA, 29u, &gpio_out_config); + GPIO_PinInit(GPIOA, 29u, &gpio_out_hi_config); PORT_SetPinConfig(PORTA, 29u, &od_config); /* MCU_INT2 */ GPIO_PinInit(GPIOB, 8u, &gpio_out_config); PORT_SetPinConfig(PORTB, 8u, &od_config); /* MCU_INT3 */ diff --git a/k20_tester_Debug_Segger.launch b/k20_tester_Debug_Segger.launch index 1b1b5ae..4c60bc3 100644 --- a/k20_tester_Debug_Segger.launch +++ b/k20_tester_Debug_Segger.launch @@ -74,4 +74,5 @@ </listAttribute> <stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <memoryBlockExpressionList context="Context string"/> "/> <stringAttribute key="process_factory_id" value="org.eclipse.cdt.dsf.gdb.GdbProcessFactory"/> +<stringAttribute key="saved_expressions<seperator>Unknown" value="0xE000E3F0,0xE000E3F0+0x35,0xE000E3F0+0x35+0x10"/> </launchConfiguration> diff --git a/source/main.c b/source/main.c index 5d4304a..6649944 100644 --- a/source/main.c +++ b/source/main.c @@ -41,6 +41,7 @@ #include "fsl_mpu.h" #include "fsl_flexcan.h" #include "fsl_dspi.h" +#include "fsl_gpio.h" #include "usb_host_config.h" #include "usb.h" #include "usb_host.h" @@ -415,25 +416,30 @@ static void can_test_task(void *pvParameters) { vSemaphoreDelete(cb_msg[0].sem); vSemaphoreDelete(cb_msg[1].sem); + vTaskResume(spi_task_handle); vTaskDelete(NULL); } - +#define TRANSFER_SIZE 32U dspi_slave_handle_t spi_handle; +uint8_t slaveRxData[TRANSFER_SIZE] = {0U}; +uint8_t slaveTxData[TRANSFER_SIZE] = {0U}; void SPI_callback(SPI_Type *base, dspi_slave_handle_t *handle, status_t status, void *userData) { + callback_message_t * cb = (callback_message_t*) userData; + BaseType_t reschedule = pdFALSE; + if (status == kStatus_Success) { - __NOP(); + xSemaphoreGiveFromISR(cb->sem, &reschedule); } if (status == kStatus_DSPI_Error) { __NOP(); } - - PRINTF("This is DSPI slave call back . \r\n"); + portYIELD_FROM_ISR(reschedule); } void SPI_init() { @@ -449,21 +455,71 @@ void SPI_init() { slaveConfig.samplePoint = kDSPI_SckToSin0Clock; DSPI_SlaveInit(SPI2, &slaveConfig); - DSPI_TransferCreateHandle(SPI2, &spi_handle, SPI_callback, spi_handle.userData); + DSPI_SlaveTransferCreateHandle(SPI2, &spi_handle, SPI_callback, spi_handle.userData); /* Set dspi slave interrupt priority higher. */ NVIC_SetPriority(SPI2_IRQn, 5U); + PRINTF("SPI init done \r\n"); } static void spi_task(void *pvParameters) { callback_message_t cb_msg; + dspi_transfer_t slaveXfer; cb_msg.sem = xSemaphoreCreateBinary(); spi_handle.userData = &cb_msg; SPI_init(); - while(1){ + GPIO_ClearPinsOutput(GPIOA, 1u << 29u); // INT2 active + while(1){ + slaveXfer.txData = slaveTxData; + slaveXfer.rxData = slaveRxData; + slaveXfer.dataSize = 16; + slaveXfer.configFlags = kDSPI_SlaveCtar0; + //Wait for instructions from SoC + DSPI_SlaveTransferNonBlocking(SPI2, &spi_handle, &slaveXfer); + PRINTF("Waiting for SPI transfer\r\n"); + xSemaphoreTake(cb_msg.sem, portMAX_DELAY); + for (int i = 0; i< 16; i++) + PRINTF("Transfer received Rx[%d]= 0x%X\r\n", i, slaveRxData[i]); + switch (slaveRxData[0]){ + case 0x01: //echo test echo remaining 15 characters + slaveTxData[0] = 42; + memcpy(&slaveTxData[1], &slaveRxData[1], 15); + break; + case 0x02: // forward USB state + slaveTxData[0] = 0x02; + slaveTxData[1] = test_status.enumerated; + slaveTxData[2] = test_status.vid & 0xFF; + slaveTxData[3] = (test_status.vid >> 8) & 0xFF; + slaveTxData[4] = test_status.pid & 0xFF; + slaveTxData[5] = (test_status.pid >> 8) & 0xFF; + memset(&slaveTxData[6], 0, 10); + break; + case 0x03: // execute CAN test; + vTaskResume(can_task_handle); + vTaskSuspend(NULL); // wait for can_test to finish + slaveTxData[0] = 0x03; + slaveTxData[1] = test_status.can_test_status; + memset(&slaveTxData[2], 0, 15); + break; + case 0x04: // execute touch screen test; +// vTaskResume(ts_task_handle); +// vTaskSuspend(NULL); // wait for ts_test to finish + slaveTxData[0] = 0x04; + slaveTxData[1] = 0x01;//test_status.ts_test_status; + memset(&slaveTxData[2], 0, 14); + break; + default: + memset(slaveTxData, 0x33, 16); + ; + } + //Prepare out transfer and signal on the INT pin + DSPI_SlaveTransferNonBlocking(SPI2, &spi_handle, &slaveXfer); + GPIO_ClearPinsOutput(GPIOA, 1u << 16u); // INT1 active + xSemaphoreTake(cb_msg.sem, portMAX_DELAY); + GPIO_SetPinsOutput(GPIOA, 1u << 16u); // INT1 idle } } @@ -491,7 +547,7 @@ int main(void) { { usb_echo("create host task error\r\n"); } - if(xTaskCreate(hello_task, "SPI_task", 2000L / sizeof(portSTACK_TYPE), NULL, 4, &spi_task_handle) != pdPASS) + if(xTaskCreate(spi_task, "SPI_task", 2000L / sizeof(portSTACK_TYPE), NULL, 4, &spi_task_handle) != pdPASS) { usb_echo("create hello task error\r\n"); } |