Other Parts Discussed in Thread: HALCOGEN
Hello,
I am Using two TMS570LS0432 boards for Master-Slave SPI communication.
I configured both the boards in Halcogen as instructed https://e2e.ti.com/support/microcontrollers/hercules/f/312/t/731608?tisearch=e2e-sitesearch&keymatch=tms570%20spi
In Halcogen(Version: 40.06.00) new project window I have selected family: TMS57LS04x and Device: TMS57LS0432PZ
Master
-
Driver Enable: Select SPI1 Driver only*
-
SPI1 Global TAB: Enable RxINT
-
SPI1 Port TAB:
-
Uncheck SOMI Direction
-
Select SPI1 ENA GIO
-
Select SPI1 SCS[3] GIO
-
Select SPI1 SCS[2] GIO
-
Select SPI1 SCS[1] GIO
-
VIM Channel 0-31 TAB: Enable MIBSPI Level 0 & Level 1 Interrupts
Slave
-
Driver Enable: Select SPI2 Driver only*
-
SPI1 Global TAB:
-
Unchecked Master Mode and Internal Clock.
-
Uncheck SPI2 SOMI Direction
-
Uncheck SPI2 CLK Direction
-
Uncheck SPI2 SCS[0] Direction
-
Make SPI2 SCS[3] GIO
-
Make SPI2 SCS[2] GIO
-
Make SPI2 SCS[1] GIO
- VIM Channel 0-31 TAB: Enabled SPI2 Level 0 and Level 1.
Pin Connections
Mater(SPI1) Slave(SPI2)
J1.7 --> MIBSPI1CLK J10.24 --> SPI2CLK
J10.16 --> MIBSPI1nCS[0] J10.21 --> SPI2CS
J2.6 --> MIBSPI1SIMO J10.23 --> SPI2SIMO
J2.7 --> MIBSPI1SOMI J10.22 --> SPI2SOMI
J10.4 --> GND J10.4 --> GND
I'm ensuring slave is ready before master sends data.
Code for master:
#include "sys_common.h" #include "system.h" #include "spi.h" #include "sys_common.h" /* USER CODE BEGIN (1) */ uint16 TX_Data_Master[16] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10 }; uint16 RX_Data_Master[16] = { 0 }; /* USER CODE END */ /* USER CODE BEGIN (2) */ void delayms(uint16 ms); /* USER CODE END */ int main(void) { /* USER CODE BEGIN (3) */ spiDAT1_t dataconfig1_t; dataconfig1_t.CS_HOLD = FALSE; dataconfig1_t.WDEL = TRUE; dataconfig1_t.DFSEL = SPI_FMT_0; dataconfig1_t.CSNR = 0xFE; _enable_IRQ(); spiInit(); while(1) { spiTransmitAndReceiveData(spiREG1, &dataconfig1_t, 16, TX_Data_Master, RX_Data_Master); delayms(2000); } /* USER CODE END */ } /* USER CODE BEGIN (4) */ void delayms(uint16 ms) { volatile unsigned int delayval; delayval = ms * 8400; // 8400 are about 1ms while(delayval--); } /* USER CODE END */
Code for slave:
#include "sys_common.h" #include "system.h" #include "spi.h" /* Include Files */ /* USER CODE BEGIN (1) */ uint16 TX_Data_Slave[16] = { 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20 }; uint16 RX_Data_Slave[16] = { 0 }; /* USER CODE END */ int main(void) { /* USER CODE BEGIN (3) */ spiDAT1_t dataconfig1_t; dataconfig1_t.CS_HOLD = FALSE; dataconfig1_t.WDEL = TRUE; dataconfig1_t.DFSEL = SPI_FMT_0; dataconfig1_t.CSNR = 0xFE; _enable_IRQ(); spiInit(); spiSendAndGetData(spiREG2, &dataconfig1_t, 16, TX_Data_Slave, RX_Data_Slave); while(1); /* USER CODE END */ }
I am attaching CCS Project with .dil and .hcg files
Master :0576.M_SPI1_TMS.zip
Slave :