S32K311 SPI communication sample project

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

S32K311 SPI communication sample project

1,298 次查看
gayathri123
Contributor I

can anyone support SPI_DMA configuration in s32k311 for tx and rx data

0 项奖励
回复
3 回复数

1,267 次查看
VaneB
NXP TechSupport
NXP TechSupport

Hi @gayathri123 

Refer to the example code below. It should help as guidance for the implementation you intend to achieve.

Example S32K31 SPI multiple packet Transmit & Receive : solution for DMA Cache issue

 

BR, VaneB

0 项奖励
回复

1,219 次查看
gayathri123
Contributor I

gayathri123_0-1765988285652.pnggayathri123_1-1765988292018.png

but in your example code Enable Cache support is enabled under cache driver configuration not in MCL cache configuration like 2nd image

 

0 项奖励
回复

1,210 次查看
gayathri123
Contributor I

 

gayathri123_1-1765993708929.pnggayathri123_2-1765993719097.pnggayathri123_3-1765993725725.pnggayathri123_4-1765993733762.pnggayathri123_5-1765993740308.pnggayathri123_6-1765993749270.pnggayathri123_7-1765993756562.pnggayathri123_8-1765993765588.png

/*
* ExternalMemory.c
*
* Created on: Dec 13, 2025
* Author: Ajay Gupta
*/
#include "ExternalMemory.h"
#include "Siul2_Port_Ip.h"
#include "Siul2_Dio_Ip.h"
#include "Cache_Ip.h"
#include "Lpspi_Ip.h"
#include "CDD_Rm.h"
#include "Dma_Ip.h"
#include <string.h>
volatile bool g_spiTransferComplete = false;
volatile uint32_t g_W25Q_ID = 0;
#ifdef USE_NON_CHACHABLE_REGION
/* Allocated in non-cacheable RAM: No manual cache cleaning needed */
#pragma GCC section bss ".mcal_bss_no_cacheable"
__attribute__(( aligned(32) )) uint8_t RxBuffer[BCC_MSG_SIZE];
#pragma GCC section bss

#pragma GCC section data ".mcal_data_no_cacheable"
__attribute__(( aligned(32) )) uint8_t TxBuffer[BCC_MSG_SIZE] = {0};
#pragma GCC section data
#else
/* Allocated in cacheable RAM: Requires Cache_Ip_Clean/Invalidate */
__attribute__(( aligned(32) )) uint8_t RxBuffer[BCC_MSG_SIZE];
__attribute__(( aligned(32) )) uint8_t TxBuffer[BCC_MSG_SIZE];
#endif
/*
* winbond W25Q16JV - 16 megabits in size.

W25Q16 pins Spi pins in Mcu
Cs pin connected to Fcs(SPI2)
Data out connected to Miso(SPI2)
Data in connected to Mosi(SPI2)
Clock connected to clock(SPI2)

Standard(single)SPI has 4 pins: Clk, CS, Din, Dout.
this 16 megabits variant has the memory distributed among the 8192 programmable pages, each page being 256 bytes in size.
We can program 256 bytes at once.
we can't erase a single page but we can erase a grp of 16 pages which is called a sector and is 4kb in size that can be erased.
we can also erase a block which is a group of 128 pages(32Kb)or 256 pages(64Kb)

block diagram of memory:
for ex: we have 1 block which has 16 sectors, each sector is 4 kb in size and contains 16 pages. 1 block =16sector x 16 pages =256 pages.

in w25q16jv we have 32 blocks in total 256 pages for 1 block x 32 block=8192 pages.
*/

void lpspi_callback_dma(uint8 Instance, Lpspi_Ip_EventType Event)
{
if(Event == LPSPI_IP_EVENT_END_TRANSFER)
{
/* If cacheable, Invalidate ensures we fetch the fresh DMA data from main memory */
#ifndef USE_NON_CHACHABLE_REGION
Cache_Ip_InvalidateByAddr(CACHE_IP_CORE, CACHE_IP_DATA, (uint32)&RxBuffer[0U], BCC_MSG_SIZE);
#endif

g_spiTransferComplete = true;
}
else if (Event == LPSPI_IP_EVENT_FAULT)
{
g_spiTransferComplete = true;
}
}

 

/*
* Function Name: W25Q_Reset
* Description: Before starting a new session with the chip we should reset it.
* This would terminate any on going operation and the device will return to its default power-on state.
* It will lose all the current volatile settings, such as Volatile Status Register bits, Write Enable Latch (WEL) status, Program/Erase Suspend status, Read parameter setting (P7-P0) and Wrap Bit setting (W6-W4).
* To avoid the accidental Reset, a Reset command is made of 2 instructions. these Instructions, “Enable Reset (66h)” and “Reset (99h)” must be issues in a sequence. Once the Reset command is accepted by the device, the device will take approximately 30us to reset. During this period, no command will be accepted.
*/
Lpspi_Ip_StatusType W25Q_Reset(void)
{
Lpspi_Ip_StatusType status;

/* Enable Reset (0x66) */
memset(TxBuffer, 0, BCC_MSG_SIZE);
TxBuffer[0] = 0x66;
g_spiTransferComplete = false;

#ifndef USE_NON_CHACHABLE_REGION
Cache_Ip_CleanByAddr(CACHE_IP_CORE, CACHE_IP_DATA, TRUE, (uint32)&TxBuffer[0U], 1);
#endif

status = Lpspi_Ip_AsyncTransmit(&MASTER_EXTERNAL_DEVICE, TxBuffer, NULL, 1, lpspi_callback_dma);
if (status != LPSPI_IP_STATUS_SUCCESS) return status;
while(g_spiTransferComplete == false);

/* Reset (0x99) */
TxBuffer[0] = 0x99;
g_spiTransferComplete = false;

#ifndef USE_NON_CHACHABLE_REGION
Cache_Ip_CleanByAddr(CACHE_IP_CORE, CACHE_IP_DATA, TRUE, (uint32)&TxBuffer[0U], 1);
#endif

status = Lpspi_Ip_AsyncTransmit(&MASTER_EXTERNAL_DEVICE, TxBuffer, NULL, 1, lpspi_callback_dma);
if (status != LPSPI_IP_STATUS_SUCCESS) return status;
while(g_spiTransferComplete == false);

for (volatile uint32 i = 0; i < 5000; i++);

return LPSPI_IP_STATUS_SUCCESS;
}
Lpspi_Ip_StatusType W25Q_ReadID(void)
{
Lpspi_Ip_StatusType status;

memset(TxBuffer, 0, BCC_MSG_SIZE);
memset(RxBuffer, 0, BCC_MSG_SIZE);
TxBuffer[0] = 0x9F;
g_spiTransferComplete = false;

#ifndef USE_NON_CHACHABLE_REGION
Cache_Ip_CleanByAddr(CACHE_IP_CORE, CACHE_IP_DATA, TRUE, (uint32)&TxBuffer[0U], 4);
#endif

/* Send 1 cmd byte and receive 3 ID bytes */
status = Lpspi_Ip_AsyncTransmit(&MASTER_EXTERNAL_DEVICE, TxBuffer, RxBuffer, 4, lpspi_callback_dma);
if (status != LPSPI_IP_STATUS_SUCCESS) return status;

while(g_spiTransferComplete == false);


g_W25Q_ID = ((uint32_t)RxBuffer[1] << 16) | ((uint32_t)RxBuffer[2] << | (uint32_t)RxBuffer[3];

return LPSPI_IP_STATUS_SUCCESS;
}

 

 

 

 

/*
* ExternalMemory.h
*
* Created on: Dec 13, 2025
* Author: Ajay Gupta
*/

#ifndef EXTERNALMEMORY_EXTERNALMEMORY_H_
#define EXTERNALMEMORY_EXTERNALMEMORY_H_

#include <stdint.h>
#include <stdbool.h>
#include "Cache_Ip.h"
#include "Lpspi_Ip.h"
#include "CDD_Rm.h"
#include "Dma_Ip.h"

#define USE_NON_CHACHABLE_REGION 1
#define No_of_Blocks 32
#define BCC_MSG_SIZE 12U
#define MASTER_EXTERNAL_DEVICE Lpspi_Ip_DeviceAttributes_SpiExternalDevice_0_Instance_2
extern Lpspi_Ip_StatusType lpspi_status;
extern Lpspi_Ip_HwStatusType lpspi_hw_status;
extern volatile bool g_spiTransferComplete;
void lpspi_callback_dma(uint8 Instance, Lpspi_Ip_EventType Event);


Lpspi_Ip_StatusType W25Q_Reset (void);
Lpspi_Ip_StatusType W25Q_ReadID (void);
#endif /* EXTERNALMEMORY_EXTERNALMEMORY_H_ */

 

 

void SPI_DMA_Init(void)
{
    /* Initialize Dma */
    Dma_Ip_Init(&Dma_Ip_xDmaInitPB);
 
    /* Initialize Rm driver for using DmaMux*/
    Rm_Init(&Rm_Config);
 
    IntCtrl_Ip_EnableIrq(DMATCD0_IRQn);
    IntCtrl_Ip_EnableIrq(DMATCD1_IRQn);
 
    /* Initialise the LPSPI module*/
    lpspi_status = Lpspi_Ip_Init(&Lpspi_Ip_PhyUnitConfig_SpiPhyUnit_1_Instance_2);
 
    Lpspi_Ip_UpdateTransferMode(MASTER_EXTERNAL_DEVICE.Instance, LPSPI_IP_INTERRUPT);
}

clock and pin initialization also i have done can anyone check whether this configuration is correct

 

 

0 项奖励
回复
%3CLINGO-SUB%20id%3D%22lingo-sub-2263871%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ES32K311%20SPI%20%E9%80%9A%E4%BF%A1%E7%A4%BA%E4%BE%8B%E9%A1%B9%E7%9B%AE%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2263871%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E6%98%AF%E5%90%A6%E6%9C%89%E4%BA%BA%E6%94%AF%E6%8C%81%E5%9C%A8%20s32k311%20%E4%B8%AD%E4%B8%BA%E5%8F%91%E9%80%81%E5%92%8C%E6%8E%A5%E6%94%B6%E6%95%B0%E6%8D%AE%E9%85%8D%E7%BD%AE%20SPI_DMA%EF%BC%9F%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2264146%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20S32K311%20SPI%20communication%20sample%20project%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2264146%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%A0%E5%A5%BD%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F256645%22%20target%3D%22_blank%22%3E%40gayathri123%3C%2FA%3E%3C%2FP%3E%0A%3CP%3E%E8%AF%B7%E5%8F%82%E8%80%83%E4%B8%8B%E9%9D%A2%E7%9A%84%E7%A4%BA%E4%BE%8B%E4%BB%A3%E7%A0%81%E3%80%82%E5%AE%83%E5%BA%94%E6%9C%89%E5%8A%A9%E4%BA%8E%E4%B8%BA%E6%82%A8%E6%89%93%E7%AE%97%E5%AE%9E%E7%8E%B0%E7%9A%84%E5%AE%9E%E6%96%BD%E5%B7%A5%E4%BD%9C%E6%8F%90%E4%BE%9B%E6%8C%87%E5%AF%BC%E3%80%82%3C%2FP%3E%0A%3CP%3E%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2FS32K-Knowledge-Base%2FExample-S32K31-SPI-multiple-packet-Transmit-amp-Receive-solution%2Fta-p%2F2130091%22%20target%3D%22_blank%22%3E%E7%A4%BA%E4%BE%8B%20S32K31%20SPI%20%E5%A4%9A%E4%B8%AA%E6%95%B0%E6%8D%AE%E5%8C%85%E5%8F%91%E9%80%81%26amp%3B%20%E6%8E%A5%E6%94%B6%EF%BC%9ADMA%20%E7%BC%93%E5%AD%98%E9%97%AE%E9%A2%98%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%3C%2FA%3E%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CP%3EBR%E3%80%81VaneB%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2265178%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20S32K311%20SPI%20communication%20sample%20project%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2265178%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22gayathri123_0-1765988285652.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22gayathri123_0-1765988285652.png%22%20style%3D%22width%3A%20374px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22gayathri123_0-1765988285652.png%22%20style%3D%22width%3A%20374px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F370469iBF76D8F91071F893%2Fimage-size%2Fmedium%3Fv%3Dv2%26amp%3Bpx%3D400%22%20role%3D%22button%22%20title%3D%22gayathri123_0-1765988285652.png%22%20alt%3D%22gayathri123_0-1765988285652.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22gayathri123_1-1765988292018.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22gayathri123_1-1765988292018.png%22%20style%3D%22width%3A%20322px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22gayathri123_1-1765988292018.png%22%20style%3D%22width%3A%20322px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F370470iE43B14B993412770%2Fimage-size%2Fmedium%3Fv%3Dv2%26amp%3Bpx%3D400%22%20role%3D%22button%22%20title%3D%22gayathri123_1-1765988292018.png%22%20alt%3D%22gayathri123_1-1765988292018.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%E4%BD%86%E5%9C%A8%E6%82%A8%E7%9A%84%E7%A4%BA%E4%BE%8B%E4%BB%A3%E7%A0%81%E4%B8%AD%EF%BC%8C%E5%90%AF%E7%94%A8%E7%BC%93%E5%AD%98%E6%94%AF%E6%8C%81%E6%98%AF%E5%9C%A8%E7%BC%93%E5%AD%98%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E9%85%8D%E7%BD%AE%E4%B8%8B%E5%90%AF%E7%94%A8%E7%9A%84%EF%BC%8C%E8%80%8C%E4%B8%8D%E6%98%AF%E5%9C%A8%20MCL%20%E7%BC%93%E5%AD%98%E9%85%8D%E7%BD%AE%E4%B8%8B%E5%90%AF%E7%94%A8%E7%9A%84%EF%BC%8C%E5%A6%82%E7%AC%AC%E4%BA%8C%E5%BC%A0%E5%9B%BE%E7%89%87%E6%89%80%E7%A4%BA%3C%2FP%3E%3CBR%20%2F%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2265244%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20S32K311%20SPI%20communication%20sample%20project%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2265244%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CBR%20%2F%3E%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22gayathri123_1-1765993708929.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22gayathri123_1-1765993708929.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F370488i8E636331513493CD%2Fimage-size%2Fmedium%3Fv%3Dv2%26amp%3Bpx%3D400%22%20role%3D%22button%22%20title%3D%22gayathri123_1-1765993708929.png%22%20alt%3D%22gayathri123_1-1765993708929.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22gayathri123_2-1765993719097.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22gayathri123_2-1765993719097.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F370489i32A2B23A8E6774E2%2Fimage-size%2Fmedium%3Fv%3Dv2%26amp%3Bpx%3D400%22%20role%3D%22button%22%20title%3D%22gayathri123_2-1765993719097.png%22%20alt%3D%22gayathri123_2-1765993719097.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22gayathri123_3-1765993725725.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22gayathri123_3-1765993725725.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F370491iE237EF885B6C656F%2Fimage-size%2Fmedium%3Fv%3Dv2%26amp%3Bpx%3D400%22%20role%3D%22button%22%20title%3D%22gayathri123_3-1765993725725.png%22%20alt%3D%22gayathri123_3-1765993725725.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22gayathri123_4-1765993733762.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22gayathri123_4-1765993733762.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F370492i93B1DECD1C1F9433%2Fimage-size%2Fmedium%3Fv%3Dv2%26amp%3Bpx%3D400%22%20role%3D%22button%22%20title%3D%22gayathri123_4-1765993733762.png%22%20alt%3D%22gayathri123_4-1765993733762.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22gayathri123_5-1765993740308.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22gayathri123_5-1765993740308.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F370493i0163E7D2C3AA9F92%2Fimage-size%2Fmedium%3Fv%3Dv2%26amp%3Bpx%3D400%22%20role%3D%22button%22%20title%3D%22gayathri123_5-1765993740308.png%22%20alt%3D%22gayathri123_5-1765993740308.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22gayathri123_6-1765993749270.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22gayathri123_6-1765993749270.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F370494i10182F0D8C68B96D%2Fimage-size%2Fmedium%3Fv%3Dv2%26amp%3Bpx%3D400%22%20role%3D%22button%22%20title%3D%22gayathri123_6-1765993749270.png%22%20alt%3D%22gayathri123_6-1765993749270.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22gayathri123_7-1765993756562.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22gayathri123_7-1765993756562.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F370495i62B1B86217DAEC2D%2Fimage-size%2Fmedium%3Fv%3Dv2%26amp%3Bpx%3D400%22%20role%3D%22button%22%20title%3D%22gayathri123_7-1765993756562.png%22%20alt%3D%22gayathri123_7-1765993756562.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22gayathri123_8-1765993765588.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22gayathri123_8-1765993765588.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F370496i95DB70F970576F22%2Fimage-size%2Fmedium%3Fv%3Dv2%26amp%3Bpx%3D400%22%20role%3D%22button%22%20title%3D%22gayathri123_8-1765993765588.png%22%20alt%3D%22gayathri123_8-1765993765588.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%2F*%3CBR%20%2F%3E*%20ExternalMemory.c%3CBR%20%2F%3E*%3CBR%20%2F%3E*%20%E5%88%9B%E5%BB%BA%E6%97%A5%E6%9C%9F%EF%BC%9ADec%2013%2C%202025%3CBR%20%2F%3E*%20Author%EF%BC%9AAjay%20Gupta%3CBR%20%2F%3E*%2F%3CBR%20%2F%3E%23include%22ExternalMemory.h%22%3CBR%20%2F%3E%20%23include%22Siul2_Port_Ip.h%22%3CBR%20%2F%3E%20%23include%22Siul2_Dio_Ip.h%22%3CBR%20%2F%3E%23include%22Cache_Ip.h%22%3CBR%20%2F%3E%23include%22Lpspi_Ip.h%22%3CBR%20%2F%3E%23include%22CDD_Rm.h%22%3CBR%20%2F%3E%23include%22Dma_Ip.h%22%3CBR%20%2F%3E%23include%3CSTRING.H%3E%3CBR%20%2F%3Evolatile%20bool%20g_spiTransferComplete%20%3D%20false%3B%3CBR%20%2F%3Evolatile%20uint32_t%20g_W25Q_ID%20%3D%200%3B%3CBR%20%2F%3E%23ifdef%20USE_NON_CHACHABLE_REGION%3CBR%20%2F%3E%2F*%20%E5%9C%A8%E4%B8%8D%E5%8F%AF%E7%BC%93%E5%AD%98%20RAM%20%E4%B8%AD%E5%88%86%E9%85%8D%EF%BC%9A%E6%97%A0%E9%9C%80%E6%89%8B%E5%8A%A8%E6%B8%85%E7%90%86%E7%BC%93%E5%AD%98%20*%2F%3CBR%20%2F%3E%23pragma%20GCC%20section%20bss%22.mcal_bss_no_cacheable%22%3CBR%20%2F%3E__attribute__((%20aligned(32)%20))%20uint8_t%20RxBuffer%5BBCC_MSG_SIZE%5D%3B%3CBR%20%2F%3E%23pragma%20GCC%20section%20bss%3C%2FSTRING.H%3E%3C%2FP%3E%3CP%3E%23pragma%20GCC%20section%20data%22.mcal_data_no_cacheable%22%3CBR%20%2F%3E__attribute__((%20aligned(32)%20))%20uint8_t%20TxBuffer%5BBCC_MSG_SIZE%5D%20%3D%20%7B0%7D%3B%3CBR%20%2F%3E%23pragma%20GCC%20section%20data%3CBR%20%2F%3E%23else%3CBR%20%2F%3E%2F*%20%E5%9C%A8%E5%8F%AF%E7%BC%93%E5%AD%98%20RAM%20%E4%B8%AD%E5%88%86%E9%85%8D%EF%BC%9A%E9%9C%80%E8%A6%81%20Cache_Ip_Clean%2FInvalidate%20*%2F%3CBR%20%2F%3E__attribute__%20((%20aligned(32)%20))%20uint8_t%20RxBuffer%5BBCC_MSG_SIZE%5D%3B%3CBR%20%2F%3E__attribute__%20((%20aligned(32)%20))%20uint8_t%20TxBuffer%5BBCC_MSG_SIZE%5D%3B%3CBR%20%2F%3E%23endif%3CBR%20%2F%3E%2F*%3CBR%20%2F%3E*%20winbond%20W25Q16JV%20-%2016%20%E5%85%86%E5%AD%97%E8%8A%82%E5%A4%A7%E5%B0%8F%E3%80%82%3C%2FP%3E%3CP%3EW25Q16%20%E5%BC%95%E8%84%9A%20Mcu%20%E4%B8%AD%E7%9A%84%20Spi%20%E5%BC%95%E8%84%9A%3CBR%20%2F%3ECs%20%E5%BC%95%E8%84%9A%E8%BF%9E%E6%8E%A5%E5%88%B0%20Fcs(SPI2)%3CBR%20%2F%3E%E6%95%B0%E6%8D%AE%E8%BE%93%E5%87%BA%E8%BF%9E%E6%8E%A5%E5%88%B0%20Miso(SPI2)%3CBR%20%2F%3E%E6%95%B0%E6%8D%AE%E8%BE%93%E5%85%A5%E8%BF%9E%E6%8E%A5%E5%88%B0%20Mosi(SPI2)%3CBR%20%2F%3E%E6%97%B6%E9%92%9F%E8%BF%9E%E6%8E%A5%E5%88%B0%20clock(SPI2)%3C%2FP%3E%3CP%3E%E6%A0%87%E5%87%86%EF%BC%88%E5%8D%95%EF%BC%89SPI%20%E6%9C%89%204%20%E4%B8%AA%E5%BC%95%E8%84%9A%EF%BC%9AClk%E3%80%81CS%E3%80%81Din%E3%80%81Dout%E3%80%82%3CBR%20%2F%3E%E8%BF%99%E4%B8%AA%2016%20%E5%85%86%E4%BD%8D%E5%8F%98%E4%BD%93%E7%9A%84%E5%86%85%E5%AD%98%E5%88%86%E5%B8%83%E5%9C%A8%208192%20%E4%B8%AA%E5%8F%AF%E7%BC%96%E7%A8%8B%E9%A1%B5%E9%9D%A2%E4%B8%AD%EF%BC%8C%E6%AF%8F%E4%B8%AA%E9%A1%B5%E9%9D%A2%E7%9A%84%E5%A4%A7%E5%B0%8F%E4%B8%BA%20256%20%E5%AD%97%E8%8A%82%E3%80%82%3CBR%20%2F%3E%E6%88%91%E4%BB%AC%E5%8F%AF%E4%BB%A5%E4%B8%80%E6%AC%A1%E7%BC%96%E7%A8%8B%20256%20%E5%AD%97%E8%8A%82%E3%80%82%3CBR%20%2F%3E%E6%88%91%E4%BB%AC%E6%97%A0%E6%B3%95%E6%93%A6%E9%99%A4%E5%8D%95%E4%B8%AA%E9%A1%B5%E9%9D%A2%EF%BC%8C%E4%BD%86%E6%88%91%E4%BB%AC%E5%8F%AF%E4%BB%A5%E6%93%A6%E9%99%A4%2016%20%E9%A1%B5%E7%9A%84%20grp%EF%BC%8C%E8%BF%99%E7%A7%B0%E4%B8%BA%E6%89%87%E5%8C%BA%EF%BC%8C%E5%A4%A7%E5%B0%8F%E4%B8%BA%204kb%EF%BC%8C%E5%8F%AF%E4%BB%A5%E6%93%A6%E9%99%A4%E3%80%82%3CBR%20%2F%3E%E6%88%91%E4%BB%AC%E8%BF%98%E5%8F%AF%E4%BB%A5%E6%93%A6%E9%99%A4%E7%94%B1%20128%20%E4%B8%AA%E9%A1%B5%E9%9D%A2%EF%BC%8832Kb%EF%BC%89%E6%88%96%20256%20%E4%B8%AA%E9%A1%B5%E9%9D%A2%EF%BC%8864Kb%EF%BC%89%E7%BB%84%E6%88%90%E7%9A%84%E6%95%B0%E6%8D%AE%E5%9D%97%E3%80%82%3C%2FP%3E%3CP%3E%E5%86%85%E5%AD%98%E6%A1%86%E5%9B%BE%EF%BC%9A%3CBR%20%2F%3E%E4%BE%8B%E5%A6%82%EF%BC%9A%E6%88%91%E4%BB%AC%E6%9C%89%201%20%E4%B8%AA%E5%9D%97%EF%BC%8C%E5%85%B6%E4%B8%AD%E6%9C%89%2016%20%E4%B8%AA%E6%89%87%E5%8C%BA%EF%BC%8C%E6%AF%8F%E4%B8%AA%E6%89%87%E5%8C%BA%E5%A4%A7%E5%B0%8F%E4%B8%BA%204%20kb%EF%BC%8C%E5%8C%85%E5%90%AB%2016%20%E4%B8%AA%E9%A1%B5%E9%9D%A2%E3%80%821%20%E4%B8%AA%E5%8C%BA%E5%9D%97%20%3D16%20%E4%B8%AA%E6%89%87%E5%8C%BA%20x%2016%20%E9%A1%B5%20%3D256%20%E9%A1%B5%E3%80%82%3C%2FP%3E%3CP%3E%E5%9C%A8%20w25q16jv%20%E4%B8%AD%EF%BC%8C%E6%88%91%E4%BB%AC%E6%9C%89%2032%20%E4%B8%AA%E5%8C%BA%E5%9D%97%EF%BC%8C%E5%85%B1%20256%20%E9%A1%B5%EF%BC%8C1%20%E4%B8%AA%E5%8C%BA%E5%9D%97%20x%2032%20%E4%B8%AA%E5%8C%BA%E5%9D%97%3D8192%20%E9%A1%B5%E3%80%82%3CBR%20%2F%3E*%2F%3C%2FP%3E%3CP%3Evoid%20lpspi_callback_dma(uint8%20Instance%2C%20Lpspi_Ip_EventType%20Event)%3CBR%20%2F%3E%7B%3CBR%20%2F%3Eif(Event%20%3D%3D%20LPSPI_IP_EVENT_END_TRANSFER)%3CBR%20%2F%3E%7B%3CBR%20%2F%3E%2F*%20%E5%A6%82%E6%9E%9C%E5%8F%AF%E7%BC%93%E5%AD%98%E3%80%81%E6%97%A0%E6%95%88%E5%8F%AF%E7%A1%AE%E4%BF%9D%E6%88%91%E4%BB%AC%E4%BB%8E%E4%B8%BB%E5%86%85%E5%AD%98%E4%B8%AD%E8%8E%B7%E5%8F%96%E6%96%B0%E7%9A%84%20DMA%20%E6%95%B0%E6%8D%AE%20*%2F%3CBR%20%2F%3E%23ifndef%20USE_NON_CHACHABLE_REGION%3CBR%20%2F%3ECache_Ip_InvalidateByAddr(CACHE_IP_CORE%2C%20CACHE_IP_DATA%2C%20(uint32)%26amp%3BRxBuffer%5B0U%5D%2C%20BCC_MSG_SIZE)%EF%BC%9B%3CBR%20%2F%3E%23endif%3C%2FP%3E%3CP%3Eg_spiTransferComplete%20%3D%20true%3B%3CBR%20%2F%3E%7D%3CBR%20%2F%3Eelse%20if%20(Event%20%3D%3D%20LPSPI_IP_EVENT_FAULT)%3CBR%20%2F%3E%7B%3CBR%20%2F%3Eg_spiTransferComplete%20%3D%20true%3B%3CBR%20%2F%3E%7D%3CBR%20%2F%3E%7D%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%2F*%20%3CBR%20%2F%3E%20*%20%E5%87%BD%E6%95%B0%E5%90%8D%E7%A7%B0%EF%BC%9AW25Q_Reset%20%3CBR%20%2F%3E%20*%20%E6%8F%8F%E8%BF%B0%EF%BC%9A%E5%9C%A8%E5%BC%80%E5%A7%8B%E4%BD%BF%E7%94%A8%E8%8A%AF%E7%89%87%E7%9A%84%E6%96%B0%E4%BC%9A%E8%AF%9D%E4%B9%8B%E5%89%8D%EF%BC%8C%E6%88%91%E4%BB%AC%E5%BA%94%E8%AF%A5%E5%B0%86%E5%85%B6RESET%E3%80%82%3CBR%20%2F%3E*%20%E8%BF%99%E5%B0%86%E7%BB%88%E6%AD%A2%E4%BB%BB%E4%BD%95%E6%AD%A3%E5%9C%A8%E8%BF%9B%E8%A1%8C%E7%9A%84%E6%93%8D%E4%BD%9C%EF%BC%8C%E8%AE%BE%E5%A4%87%E5%B0%86%E6%81%A2%E5%A4%8D%E5%88%B0%E5%85%B6%E9%BB%98%E8%AE%A4%E5%BC%80%E6%9C%BA%E7%8A%B6%E6%80%81%E3%80%82%3CBR%20%2F%3E*%20%E5%B0%86%E4%B8%A2%E5%A4%B1%E6%89%80%E6%9C%89%E5%BD%93%E5%89%8D%E6%98%93%E5%A4%B1%E6%80%A7%E8%AE%BE%E7%BD%AE%EF%BC%8C%E5%A6%82%E6%98%93%E5%A4%B1%E6%80%A7%E7%8A%B6%E6%80%81%E5%AF%84%E5%AD%98%E5%99%A8%E4%BD%8D%E3%80%81%E5%86%99%E4%BD%BF%E8%83%BD%E9%94%81%E5%AD%98%EF%BC%88WEL%EF%BC%89%E7%8A%B6%E6%80%81%E3%80%81%E7%BC%96%E7%A8%8B%2F%E6%93%A6%E9%99%A4%E6%9A%82%E5%81%9C%E7%8A%B6%E6%80%81%E3%80%81%E8%AF%BB%E5%8F%96%E5%8F%82%E6%95%B0%E8%AE%BE%E7%BD%AE%EF%BC%88P7-P0%EF%BC%89%E5%92%8C%E5%8C%85%E4%BD%8D%E8%AE%BE%E7%BD%AE%EF%BC%88W6-W4%EF%BC%89%E3%80%82%3CBR%20%2F%3E*%20%E4%B8%BA%E9%81%BF%E5%85%8D%E6%84%8F%E5%A4%96%20RESET%EF%BC%8CRESET%20%E5%91%BD%E4%BB%A4%E7%94%B1%202%20%E6%9D%A1%E6%8C%87%E4%BB%A4%E7%BB%84%E6%88%90%E3%80%82%E8%BF%99%E4%BA%9B%20%E2%80%9C%E5%90%AF%E7%94%A8%20RESET%20(66h)%E2%80%9D%20%E5%92%8C%20%E2%80%9CRESET%20(99h)%E2%80%9D%20%E6%8C%87%E4%BB%A4%E5%BF%85%E9%A1%BB%E6%8C%89%E9%A1%BA%E5%BA%8F%E5%87%BA%E5%8F%B0%E3%80%82%E8%AE%BE%E5%A4%87%E6%8E%A5%E5%8F%97%20RESET%20%E5%91%BD%E4%BB%A4%E5%90%8E%EF%BC%8C%E8%AE%BE%E5%A4%87%E5%B0%86%E8%8A%B1%E8%B4%B9%E5%A4%A7%E7%BA%A6%2030us%20%E6%9D%A5%E5%AE%8C%E6%88%90%20RESET%E3%80%82%E5%9C%A8%E6%AD%A4%E6%9C%9F%E9%97%B4%EF%BC%8C%E4%B8%8D%E6%8E%A5%E5%8F%97%E4%BB%BB%E4%BD%95%E6%8C%87%E4%BB%A4%E3%80%82%3CBR%20%2F%3E*%2F%3CBR%20%2F%3ELpspi_Ip_StatusType%20W25Q_Reset(void)%3CBR%20%2F%3E%7B%3CBR%20%2F%3ELpspi_Ip_StatusType%20status%EF%BC%9B%3C%2FP%3E%3CP%3E%2F*%20%E5%90%AF%E7%94%A8%20RESET%20(0x66)%20*%2F%3CBR%20%2F%3Ememset(TxBuffer%2C%200%2C%20BCC_MSG_SIZE)%3B%3CBR%20%2F%3ETxBuffer%5B0%5D%20%3D%200x66%3B%3CBR%20%2F%3Eg_spiTransferComplete%20%3D%20false%3B%3C%2FP%3E%3CP%3E%23ifndef%20USE_NON_CHACHABLE_REGION%3CBR%20%2F%3ECache_Ip_CleanByAddr(CACHE_IP_CORE%2C%20CACHE_IP_DATA%2C%20TRUE%2C%20(uint32)%26amp%3BTxBuffer%5B0U%5D%2C%201)%3B%3CBR%20%2F%3E%23endif%3C%2FP%3E%3CP%3Estatus%20%3D%20Lpspi_Ip_AsyncTransmit(%26amp%3BMASTER_EXTERNAL_DEVICE%2C%20TxBuffer%2C%20NULL%2C%201%2C%20lpspi_callback_dma)%3B%3CBR%20%2F%3Eif%20(status%20!%3D%20LPSPI_IP_STATUS_SUCCESS)%20return%20status%3B%3CBR%20%2F%3Ewhile(g_spiTransferComplete%20%3D%3D%20false)%EF%BC%9B%3C%2FP%3E%3CP%3E%2F*%20RESET%20(0x99)%20*%2F%3CBR%20%2F%3ETxBuffer%5B0%5D%20%3D%200x99%3B%3CBR%20%2F%3Eg_spiTransferComplete%20%3D%20false%3B%3C%2FP%3E%3CP%3E%23ifndef%20USE_NON_CHACHABLE_REGION%3CBR%20%2F%3ECache_Ip_CleanByAddr(CACHE_IP_CORE%2C%20CACHE_IP_DATA%2C%20TRUE%2C%20(uint32)%26amp%3BTxBuffer%5B0U%5D%2C%201)%3B%3CBR%20%2F%3E%23endif%3C%2FP%3E%3CP%3Estatus%20%3D%20Lpspi_Ip_AsyncTransmit(%26amp%3BMASTER_EXTERNAL_DEVICE%2C%20TxBuffer%2C%20NULL%2C%201%2C%20lpspi_callback_dma)%3B%3CBR%20%2F%3Eif%20(status%20!%3D%20LPSPI_IP_STATUS_SUCCESS)%20return%20status%3B%3CBR%20%2F%3Ewhile(g_spiTransferComplete%20%3D%3D%20false)%EF%BC%9B%3C%2FP%3E%3CP%3Efor%20(volatile%20uint32%20i%20%3D%200%3B%20i%26lt%3B%205000%3B%20i%2B%2B)%EF%BC%9B%3C%2FP%3E%3CP%3Ereturn%20LPSPI_IP_STATUS_SUCCESS%3B%3CBR%20%2F%3E%7D%3CBR%20%2F%3ELpspi_Ip_StatusType%20W25Q_ReadID(void)%3CBR%20%2F%3E%7B%3CBR%20%2F%3ELpspi_Ip_StatusType%20status%EF%BC%9B%3C%2FP%3E%3CP%3Ememset(TxBuffer%2C%200%2C%20BCC_MSG_SIZE)%3B%3CBR%20%2F%3Ememset(RxBuffer%2C%200%2C%20BCC_MSG_SIZE)%3B%3CBR%20%2F%3ETxBuffer%5B0%5D%20%3D%200x9F%3B%3CBR%20%2F%3Eg_spiTransferComplete%20%3D%20false%EF%BC%9B%3C%2FP%3E%3CP%3E%23ifndef%20USE_NON_CHACHABLE_REGION%3CBR%20%2F%3ECache_Ip_CleanByAddr(CACHE_IP_CORE%2C%20CACHE_IP_DATA%2C%20TRUE%2C%20(uint32)%26amp%3BTxBuffer%5B0U%5D%2C%204)%3B%3CBR%20%2F%3E%23endif%3C%2FP%3E%3CP%3E%2F*%20%E5%8F%91%E9%80%81%201%20%E4%B8%AA%20cmd%20%E5%AD%97%E8%8A%82%E5%B9%B6%E6%8E%A5%E6%94%B6%203%20%E4%B8%AA%20ID%20%E5%AD%97%E8%8A%82%20*%2F%20%3CBR%20%2F%3E%20%E7%8A%B6%E6%80%81%20%3D%20lpspi_IP_AsyncTransmit%EF%BC%88%26amp%3B%20MASTER_EXTERNAL_DEVICE%E3%80%81TxBuffer%E3%80%81rxBuffer%E3%80%814%E3%80%81lpspi_callback_dma%EF%BC%89%EF%BC%9Bif%EF%BC%88%E7%8A%B6%E6%80%81%EF%BC%81%3CBR%20%2F%3E%3D%20LPSI_IP_STATUS_SUCCESS)%20%E8%BF%94%E5%9B%9E%E7%8A%B6%E6%80%81%EF%BC%9B%3C%2FP%3E%3CP%3Ewhile(g_spiTransferComplete%20%3D%3D%20false)%EF%BC%9B%3C%2FP%3E%3CP%3E%3CBR%20%2F%3Eg_W25Q_ID%20%3D%20((uint32_t)RxBuffer%5B1%5D%26lt%3B%26lt%3B%2016)%7C%20((uint32_t)RxBuffer%5B2%5D)%26lt%3B%26lt%3B%20%3CLI-EMOJI%20id%3D%22lia_smiling-face-with-sunglasses%22%20title%3D%22%3Asmiling_face_with_sunglasses%3A%22%3E%3C%2FLI-EMOJI%3E%20%7C%20(uint32_t)RxBuffer%5B3%5D%EF%BC%9B%3C%2FP%3E%3CP%3Ereturn%20LPSPI_IP_STATUS_SUCCESS%3B%3CBR%20%2F%3E%7D%3C%2FP%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3CP%3E%2F*%3CBR%20%2F%3E*%20ExternalMemory.h%3CBR%20%2F%3E*%3CBR%20%2F%3E*%20%E5%88%9B%E5%BB%BA%E6%97%A5%E6%9C%9F%EF%BC%9A2025%20%E5%B9%B4%2012%20%E6%9C%88%2013%20%E6%97%A5%3CBR%20%2F%3E*%20%E4%BD%9C%E8%80%85%EF%BC%9AAjay%20Gupta%3CBR%20%2F%3E*%2F%3C%2FP%3E%3CP%3E%23ifndef%20EXTERNALMEMORY_EXTERNALMEMORY_H_%3CBR%20%2F%3E%23define%20EXTERNALMEMORY_EXTERNALMEMORY_H_%3C%2FP%3E%3CP%3E%23include%3CSTDINT.H%3E%3CBR%20%2F%3E%23include%3CSTDBOOL.H%3E%3CBR%20%2F%3E%23include%22Cache_Ip.h%22%3CBR%20%2F%3E%23include%22Lpspi_Ip.h%22%3CBR%20%2F%3E%23include%22CDD_Rm.h%22%3CBR%20%2F%3E%23include%22Dma_Ip.h%22%3C%2FSTDBOOL.H%3E%3C%2FSTDINT.H%3E%3C%2FP%3E%3CP%3E%23define%20USE_NON_CHACHABLE_REGION%201%3CBR%20%2F%3E%23define%20No_of_Blocks%2032%3CBR%20%2F%3E%23define%20BCC_MSG_SIZE%2012U%3CBR%20%2F%3E%23define%20MASTER_EXTERNAL_DEVICE%20Lpspi_Ip_DeviceAttributes_SpiExternalDevice_0_Instance_2%3CBR%20%2F%3Eextern%20Lpspi_Ip_StatusType%20lpspi_status%EF%BC%9B%3CBR%20%2F%3Eextern%20Lpspi_Ip_HwStatusType%20lpspi_hw_status%3B%3CBR%20%2F%3Eextern%20volatile%20bool%20g_spiTransferComplete%3B%3CBR%20%2F%3Evoid%20lpspi_callback_dma(uint8%20Instance%2C%20Lpspi_Ip_EventType%20Event)%EF%BC%9B%3C%2FP%3E%3CP%3E%3CBR%20%2F%3ELpspi_Ip_StatusType%20W25Q_Reset%20(void)%3B%3CBR%20%2F%3ELpspi_Ip_StatusType%20W25Q_ReadID%20(void)%3B%3CBR%20%2F%3E%23endif%20%2F*%20EXTERNALMEMORY_EXTERNALMEMORY_H_%20*%2F%3C%2FP%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3CDIV%3Evoid%20SPI_DMA_Init(void)%3C%2FDIV%3E%3CDIV%3E%7B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%2F*%20%E5%88%9D%E5%A7%8B%E5%8C%96%20Dma%20*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20Dma_Ip_Init(%26amp%3BDma_Ip_xDmaInitPB)%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%2F*%20%E5%88%9D%E5%A7%8B%E5%8C%96%E4%BD%BF%E7%94%A8%20DmaMux%20%E7%9A%84%20Rm%20%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20Rm_Init(%26amp%3BRm_Config)%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20IntCtrl_Ip_EnableIrq%EF%BC%88DMATCD0_IRQn%EF%BC%89%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20IntCtrl_Ip_EnableIrq%EF%BC%88DMATCD1_IRQn%EF%BC%89%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20%2F*%20%E5%88%9D%E5%A7%8B%E5%8C%96%20LPSPI%20%E6%A8%A1%E5%9D%97*%2F%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20lpspi_status%20%3D%20Lpspi_Ip_Init(%26amp%3BLpspi_Ip_PhyUnitConfig_SpiPhyUnit_1_Instance_2)%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%20%20%20%20Lpspi_Ip_UpdateTransferMode(MASTER_EXTERNAL_DEVICE.Instance%2C%20LPSPI_IP_INTERRUPT)%EF%BC%9B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%7D%3C%2FDIV%3E%3CP%3E%E6%88%91%E8%BF%98%E5%AE%8C%E6%88%90%E4%BA%86%E6%97%B6%E9%92%9F%E5%92%8C%E5%BC%95%E8%84%9A%E7%9A%84%E5%88%9D%E5%A7%8B%E5%8C%96%EF%BC%8C%E8%B0%81%E8%83%BD%E6%A3%80%E6%9F%A5%E4%B8%80%E4%B8%8B%E8%BF%99%E6%A0%B7%E7%9A%84%E9%85%8D%E7%BD%AE%E6%98%AF%E5%90%A6%E6%AD%A3%E7%A1%AE%EF%BC%9F%3C%2FP%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3C%2FLINGO-BODY%3E