summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Sliwa <dominik.sliwa@toradex.com>2016-07-06 10:22:55 +0200
committerDominik Sliwa <dominik.sliwa@toradex.com>2016-07-14 15:00:58 +0200
commit422fab12a37e8bb93f6307d1587ff052b02445b3 (patch)
tree772a2c304341538515ff169fe075a8b0f49bb265
parentbd6ff1a85c3a270283e134926d13136df78ddc1d (diff)
spi: spi communication and testing supportapalis-tk1-k20-fct-freertos-v8
-rw-r--r--.cproject9
-rw-r--r--.gitignore1
-rw-r--r--.settings/language.settings.xml2
-rw-r--r--CMSIS/MK20D10_features.h2
-rw-r--r--board/pin_mux.c4
-rw-r--r--k20_tester_Debug_Segger.launch1
-rw-r--r--source/main.c70
7 files changed, 76 insertions, 13 deletions
diff --git a/.cproject b/.cproject
index 63068ae..77d7c49 100644
--- a/.cproject
+++ b/.cproject
@@ -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 &quot;${INPUTS}&quot;" 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 &quot;${INPUTS}&quot;" 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="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;memoryBlockExpressionList context=&quot;Context string&quot;/&gt;&#10;"/>
<stringAttribute key="process_factory_id" value="org.eclipse.cdt.dsf.gdb.GdbProcessFactory"/>
+<stringAttribute key="saved_expressions&lt;seperator&gt;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");
}