<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic SPI slave mode switching LPC4370 in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/SPI-slave-mode-switching-LPC4370/m-p/1556736#M50766</link>
    <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;I would like to ask for some help finding out how to switch SPI mode during runtime on the LPC4370. I have considered &lt;A href="https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-switch-SPI-mode-in-real-time/m-p/940423" target="_blank" rel="noopener"&gt;this&lt;/A&gt; post made on a similar issue to what I am experiencing but this does not line up with my possibilities using the LPC. This might be very simple but I appear to be rather stuck in this.&lt;/P&gt;&lt;H4&gt;Issue&lt;/H4&gt;&lt;P&gt;I am using SSP1, and have three slaves connected to it. Each slave functions on a different SPI mode. During initialization, I successfully communicate with all three:&lt;/P&gt;&lt;P&gt;1. Slave 0 --&amp;gt; SPI mode 1&lt;/P&gt;&lt;P&gt;2. Slave 1 --&amp;gt; SPI mode 0&lt;/P&gt;&lt;P&gt;3. Slave 2 --&amp;gt; SPI mode 3&lt;/P&gt;&lt;P&gt;But after the initialization of slave 2, I need the following functionality inside of an infinite loop:&lt;/P&gt;&lt;P&gt;1. Communicate with Slave 1 (SPI mode 0)&lt;/P&gt;&lt;P&gt;2. Communicate with slave 2 (SPI mode 3)&lt;/P&gt;&lt;P&gt;3. Return to step 1 and repeat&lt;/P&gt;&lt;P&gt;(Slave 0 is not communicated with anymore).&lt;/P&gt;&lt;P&gt;What I am seeing is that after the initiation of Slave 2, if I want to communicate with slave 1, the SPI mode is stuck to SPI mode 3 (which is expected as I am using a pointer to the SSP base, see code). But when using a Logic Analyser, I am seeing behaviour that is more akin to a different SPI mode (I'd expect to see slave 1 communicate in SPI mode 3):&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="153"&gt;&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Setting&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153"&gt;&lt;P&gt;&lt;STRONG&gt;Slave 2&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153"&gt;&lt;P&gt;&lt;STRONG&gt;Slave 1&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153"&gt;&lt;P&gt;&lt;STRONG&gt;Result comm. Slave 1 after init. Slave 2&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="153"&gt;&lt;P&gt;&lt;EM&gt;Mode&lt;/EM&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153"&gt;&lt;P&gt;Mode 3&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153"&gt;&lt;P&gt;Mode 0&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153"&gt;&lt;P&gt;Mode 2&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="153"&gt;&lt;P&gt;&lt;EM&gt;CPOL&lt;/EM&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153"&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153"&gt;&lt;P&gt;0&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153"&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="153"&gt;&lt;P&gt;&lt;EM&gt;CPHA&lt;/EM&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153"&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153"&gt;&lt;P&gt;0&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153"&gt;&lt;P&gt;0&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;&lt;TABLE width="612px"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="153px"&gt;&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Setting&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153px"&gt;&lt;P&gt;&lt;STRONG&gt;Slave 2&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153px"&gt;&lt;P&gt;&lt;STRONG&gt;Slave 1&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153px"&gt;&lt;P&gt;&lt;STRONG&gt;Result comm. Slave 1 after init. Slave 2&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="153px"&gt;&lt;P&gt;&lt;EM&gt;Mode&lt;/EM&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153px"&gt;&lt;P&gt;Mode 1&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153px"&gt;&lt;P&gt;Mode 0&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153px"&gt;&lt;P&gt;Mode 1&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="153px"&gt;&lt;P&gt;&lt;EM&gt;CPOL&lt;/EM&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153px"&gt;&lt;P&gt;0&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153px"&gt;&lt;P&gt;0&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153px"&gt;&lt;P&gt;0&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="153px"&gt;&lt;P&gt;&lt;EM&gt;CPHA&lt;/EM&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153px"&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153px"&gt;&lt;P&gt;0&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153px"&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;H4&gt;Wanted situation&lt;/H4&gt;&lt;P&gt;&amp;nbsp;I need to switch the SPI mode rapidly during runtime to interface with two of the slaves:&lt;/P&gt;&lt;P&gt;Setup:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;Initialize slave 1 in SPI mode 0&lt;/LI&gt;&lt;LI&gt;Initialize slave 2 in SPI mode 3&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Infinite loop:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;Switch SPI mode to 0 (slave 1)&lt;/LI&gt;&lt;LI&gt;Slave 1 (SPI mode 0) --&amp;gt; communicate measurement&lt;/LI&gt;&lt;LI&gt;Switch SPI mode to 3 (slave 2)&lt;/LI&gt;&lt;LI&gt;Slave 2 --&amp;gt; communicate measurement&lt;/LI&gt;&lt;LI&gt;Go back to step 1 inside of the loop&lt;/LI&gt;&lt;/OL&gt;&lt;H5&gt;Code used&lt;/H5&gt;&lt;LI-CODE lang="c"&gt;#define LPC_SSP           	LPC_SSP1&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="c"&gt;/* Slave 1 initialization */
void SL1_init()
{
    (var 'ports' init)
    Chip_SSP_Disable(LPC_SSP);
    SL1_Init(LPC_SSP, ports, TDC_clock_freq);
}
void SL1_Init(LPC_SSP_T* SPI_BUS, SL_ports config, float Clock_frequency)
{
	Slave1_SPI = SPI_BUS; //global var inside of this file
	SL1_Init_SPI();
	// init ports
	Clock_Frequency = Clock_frequency;
}


void SL1_Init_SPI()
{
	Chip_SSP_Init(Slave1_SPI);
	SSP_ConfigFormat ssp_format;
	ssp_format.frameFormat = SSP_FRAMEFORMAT_SPI;
	ssp_format.bits = SSP_DATA_BITS;
	ssp_format.clockMode = SSP_CLOCK_MODE0;
        Chip_SSP_SetFormat(Slave1_SPI, ssp_format.bits, ssp_format.frameFormat, ssp_format.clockMode);
    Chip_SSP_SetMaster(Slave1_SPI, 1);
    Chip_SSP_SetBitRate(Slave1_SPI, 10000000);
	Chip_SSP_Enable(Slave1_SPI);
}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;For slave 2:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="c"&gt;void Init_Slave2(LPC_SSP_T* spi_bus, Slave2_con config)
{
	Slave2_SPI = spi_bus;
	Slave2_Init_SPI();
	//pin init
}

void Slave2_Init_SPI()
{
//	Chip_SSP_Disable(Slave2_SPI);//new

	Chip_SSP_Init(Slave2_SPI);

	SSP_ConfigFormat ssp_format;
	ssp_format.frameFormat = SSP_FRAMEFORMAT_SPI;
	ssp_format.bits = SSP_DATA_BITS;
	ssp_format.clockMode = SSP_CLOCK_MODE3; //can be 1 or 3
        Chip_SSP_SetFormat(Slave2_SPI, ssp_format.bits, ssp_format.frameFormat, ssp_format.clockMode);
    Chip_SSP_SetMaster(Slave2_SPI, 1);
    Chip_SSP_SetBitRate(Slave2_SPI, 1000000);

	Chip_SSP_Enable(Slave2_SPI);
}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H5&gt;Things tried already&lt;/H5&gt;&lt;P&gt;Both slaves are changing the pointer directly to LPC_SSP. Which I think is needed? I thought I could 'just' recall the slavex_init_spi() function during runtime, but this resulted in the LPC_SSP C0 register being completely messed up:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="329"&gt;&lt;P&gt;&lt;STRONG&gt;Initiation&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="266"&gt;&lt;P&gt;&lt;STRONG&gt;Measurement loop&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="154"&gt;&lt;P&gt;&lt;STRONG&gt;Slave 1 as defined before Slave 2&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="176"&gt;&lt;P&gt;&lt;STRONG&gt;Slave 2 defined&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="266"&gt;&lt;P&gt;&lt;STRONG&gt;Slave 1 communication (firstly calling the slave1_init_SPI function)&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="154"&gt;&lt;P&gt;Hex:0xa07&lt;/P&gt;&lt;P&gt;Binary:101000000111&lt;/P&gt;&lt;/TD&gt;&lt;TD width="176"&gt;&lt;P&gt;Hex:0x65c7&lt;/P&gt;&lt;P&gt;Binary:110010111000111&lt;/P&gt;&lt;/TD&gt;&lt;TD width="266"&gt;&lt;P&gt;Hex:0xfe87&lt;/P&gt;&lt;P&gt;Binary:1111111010000111&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H4&gt;Considerations&lt;/H4&gt;&lt;P&gt;Do I need to add a forced delay between the re-initiation of the SPI before or after I'm trying to communicate?&lt;/P&gt;&lt;P&gt;I cannot plainly use different SSP ports as the controller is connected to a custom PCB (which has worked before but I do not possess that code).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you for your consideration and take care!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Sun, 20 Nov 2022 12:39:02 GMT</pubDate>
    <dc:creator>Gaico</dc:creator>
    <dc:date>2022-11-20T12:39:02Z</dc:date>
    <item>
      <title>SPI slave mode switching LPC4370</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/SPI-slave-mode-switching-LPC4370/m-p/1556736#M50766</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;I would like to ask for some help finding out how to switch SPI mode during runtime on the LPC4370. I have considered &lt;A href="https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-switch-SPI-mode-in-real-time/m-p/940423" target="_blank" rel="noopener"&gt;this&lt;/A&gt; post made on a similar issue to what I am experiencing but this does not line up with my possibilities using the LPC. This might be very simple but I appear to be rather stuck in this.&lt;/P&gt;&lt;H4&gt;Issue&lt;/H4&gt;&lt;P&gt;I am using SSP1, and have three slaves connected to it. Each slave functions on a different SPI mode. During initialization, I successfully communicate with all three:&lt;/P&gt;&lt;P&gt;1. Slave 0 --&amp;gt; SPI mode 1&lt;/P&gt;&lt;P&gt;2. Slave 1 --&amp;gt; SPI mode 0&lt;/P&gt;&lt;P&gt;3. Slave 2 --&amp;gt; SPI mode 3&lt;/P&gt;&lt;P&gt;But after the initialization of slave 2, I need the following functionality inside of an infinite loop:&lt;/P&gt;&lt;P&gt;1. Communicate with Slave 1 (SPI mode 0)&lt;/P&gt;&lt;P&gt;2. Communicate with slave 2 (SPI mode 3)&lt;/P&gt;&lt;P&gt;3. Return to step 1 and repeat&lt;/P&gt;&lt;P&gt;(Slave 0 is not communicated with anymore).&lt;/P&gt;&lt;P&gt;What I am seeing is that after the initiation of Slave 2, if I want to communicate with slave 1, the SPI mode is stuck to SPI mode 3 (which is expected as I am using a pointer to the SSP base, see code). But when using a Logic Analyser, I am seeing behaviour that is more akin to a different SPI mode (I'd expect to see slave 1 communicate in SPI mode 3):&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="153"&gt;&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Setting&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153"&gt;&lt;P&gt;&lt;STRONG&gt;Slave 2&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153"&gt;&lt;P&gt;&lt;STRONG&gt;Slave 1&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153"&gt;&lt;P&gt;&lt;STRONG&gt;Result comm. Slave 1 after init. Slave 2&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="153"&gt;&lt;P&gt;&lt;EM&gt;Mode&lt;/EM&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153"&gt;&lt;P&gt;Mode 3&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153"&gt;&lt;P&gt;Mode 0&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153"&gt;&lt;P&gt;Mode 2&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="153"&gt;&lt;P&gt;&lt;EM&gt;CPOL&lt;/EM&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153"&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153"&gt;&lt;P&gt;0&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153"&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="153"&gt;&lt;P&gt;&lt;EM&gt;CPHA&lt;/EM&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153"&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153"&gt;&lt;P&gt;0&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153"&gt;&lt;P&gt;0&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;&lt;TABLE width="612px"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="153px"&gt;&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Setting&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153px"&gt;&lt;P&gt;&lt;STRONG&gt;Slave 2&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153px"&gt;&lt;P&gt;&lt;STRONG&gt;Slave 1&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153px"&gt;&lt;P&gt;&lt;STRONG&gt;Result comm. Slave 1 after init. Slave 2&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="153px"&gt;&lt;P&gt;&lt;EM&gt;Mode&lt;/EM&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153px"&gt;&lt;P&gt;Mode 1&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153px"&gt;&lt;P&gt;Mode 0&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153px"&gt;&lt;P&gt;Mode 1&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="153px"&gt;&lt;P&gt;&lt;EM&gt;CPOL&lt;/EM&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153px"&gt;&lt;P&gt;0&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153px"&gt;&lt;P&gt;0&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153px"&gt;&lt;P&gt;0&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="153px"&gt;&lt;P&gt;&lt;EM&gt;CPHA&lt;/EM&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153px"&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153px"&gt;&lt;P&gt;0&lt;/P&gt;&lt;/TD&gt;&lt;TD width="153px"&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;H4&gt;Wanted situation&lt;/H4&gt;&lt;P&gt;&amp;nbsp;I need to switch the SPI mode rapidly during runtime to interface with two of the slaves:&lt;/P&gt;&lt;P&gt;Setup:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;Initialize slave 1 in SPI mode 0&lt;/LI&gt;&lt;LI&gt;Initialize slave 2 in SPI mode 3&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Infinite loop:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;Switch SPI mode to 0 (slave 1)&lt;/LI&gt;&lt;LI&gt;Slave 1 (SPI mode 0) --&amp;gt; communicate measurement&lt;/LI&gt;&lt;LI&gt;Switch SPI mode to 3 (slave 2)&lt;/LI&gt;&lt;LI&gt;Slave 2 --&amp;gt; communicate measurement&lt;/LI&gt;&lt;LI&gt;Go back to step 1 inside of the loop&lt;/LI&gt;&lt;/OL&gt;&lt;H5&gt;Code used&lt;/H5&gt;&lt;LI-CODE lang="c"&gt;#define LPC_SSP           	LPC_SSP1&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="c"&gt;/* Slave 1 initialization */
void SL1_init()
{
    (var 'ports' init)
    Chip_SSP_Disable(LPC_SSP);
    SL1_Init(LPC_SSP, ports, TDC_clock_freq);
}
void SL1_Init(LPC_SSP_T* SPI_BUS, SL_ports config, float Clock_frequency)
{
	Slave1_SPI = SPI_BUS; //global var inside of this file
	SL1_Init_SPI();
	// init ports
	Clock_Frequency = Clock_frequency;
}


void SL1_Init_SPI()
{
	Chip_SSP_Init(Slave1_SPI);
	SSP_ConfigFormat ssp_format;
	ssp_format.frameFormat = SSP_FRAMEFORMAT_SPI;
	ssp_format.bits = SSP_DATA_BITS;
	ssp_format.clockMode = SSP_CLOCK_MODE0;
        Chip_SSP_SetFormat(Slave1_SPI, ssp_format.bits, ssp_format.frameFormat, ssp_format.clockMode);
    Chip_SSP_SetMaster(Slave1_SPI, 1);
    Chip_SSP_SetBitRate(Slave1_SPI, 10000000);
	Chip_SSP_Enable(Slave1_SPI);
}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;For slave 2:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="c"&gt;void Init_Slave2(LPC_SSP_T* spi_bus, Slave2_con config)
{
	Slave2_SPI = spi_bus;
	Slave2_Init_SPI();
	//pin init
}

void Slave2_Init_SPI()
{
//	Chip_SSP_Disable(Slave2_SPI);//new

	Chip_SSP_Init(Slave2_SPI);

	SSP_ConfigFormat ssp_format;
	ssp_format.frameFormat = SSP_FRAMEFORMAT_SPI;
	ssp_format.bits = SSP_DATA_BITS;
	ssp_format.clockMode = SSP_CLOCK_MODE3; //can be 1 or 3
        Chip_SSP_SetFormat(Slave2_SPI, ssp_format.bits, ssp_format.frameFormat, ssp_format.clockMode);
    Chip_SSP_SetMaster(Slave2_SPI, 1);
    Chip_SSP_SetBitRate(Slave2_SPI, 1000000);

	Chip_SSP_Enable(Slave2_SPI);
}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H5&gt;Things tried already&lt;/H5&gt;&lt;P&gt;Both slaves are changing the pointer directly to LPC_SSP. Which I think is needed? I thought I could 'just' recall the slavex_init_spi() function during runtime, but this resulted in the LPC_SSP C0 register being completely messed up:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="329"&gt;&lt;P&gt;&lt;STRONG&gt;Initiation&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="266"&gt;&lt;P&gt;&lt;STRONG&gt;Measurement loop&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="154"&gt;&lt;P&gt;&lt;STRONG&gt;Slave 1 as defined before Slave 2&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="176"&gt;&lt;P&gt;&lt;STRONG&gt;Slave 2 defined&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD width="266"&gt;&lt;P&gt;&lt;STRONG&gt;Slave 1 communication (firstly calling the slave1_init_SPI function)&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD width="154"&gt;&lt;P&gt;Hex:0xa07&lt;/P&gt;&lt;P&gt;Binary:101000000111&lt;/P&gt;&lt;/TD&gt;&lt;TD width="176"&gt;&lt;P&gt;Hex:0x65c7&lt;/P&gt;&lt;P&gt;Binary:110010111000111&lt;/P&gt;&lt;/TD&gt;&lt;TD width="266"&gt;&lt;P&gt;Hex:0xfe87&lt;/P&gt;&lt;P&gt;Binary:1111111010000111&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H4&gt;Considerations&lt;/H4&gt;&lt;P&gt;Do I need to add a forced delay between the re-initiation of the SPI before or after I'm trying to communicate?&lt;/P&gt;&lt;P&gt;I cannot plainly use different SSP ports as the controller is connected to a custom PCB (which has worked before but I do not possess that code).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you for your consideration and take care!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 20 Nov 2022 12:39:02 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/SPI-slave-mode-switching-LPC4370/m-p/1556736#M50766</guid>
      <dc:creator>Gaico</dc:creator>
      <dc:date>2022-11-20T12:39:02Z</dc:date>
    </item>
    <item>
      <title>Re: SPI slave mode switching LPC4370</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/SPI-slave-mode-switching-LPC4370/m-p/1557059#M50772</link>
      <description>&lt;P&gt;The issue was that the&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="c"&gt; Chip_SSP_Disable(LPC_SSP);&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;Was not inside of init SPI function. So the SPI was never turned off. Adding this inside of the function made everything work fine.&lt;/P&gt;</description>
      <pubDate>Mon, 21 Nov 2022 09:17:22 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/SPI-slave-mode-switching-LPC4370/m-p/1557059#M50772</guid>
      <dc:creator>Gaico</dc:creator>
      <dc:date>2022-11-21T09:17:22Z</dc:date>
    </item>
  </channel>
</rss>

