Hello, I am trying to transmit a data via DMA, but for receving I don't want to use DMA for now.
In debugging, I just see the first block of the data is sent but rest of them seem as zero in the expression of RX_Data.
Here the codes,
/* USER CODE BEGIN (0) */
/* USER CODE END */
/* Include Files */
/* USER CODE BEGIN (1) */
#include "sys_common.h"
#include "spi.h"
#include "sys_dma.h"
#include "rti.h"
#include <stdio.h>
#include <string.h>
#define SPI3_TX_ADDR ((uint32_t)(&(spiREG3->DAT1)) +2)
#define SPI1_RX_ADDR ((uint32_t)(&(spiREG1->BUF)) + 2)
unsigned int FrameCnt = 16;
/* USER CODE END */
/* USER CODE BEGIN (2) */
uint16_t TX_Data[16] = { 0x02, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10 };
uint16_t RX_Data[16] = { 0 };
g_dmaCTRL g_dmaCTRLPKT_TX;
void dmaConfigCtrlTxPacket(uint32 sadd, uint32 dadd, uint16 ElmntCnt, uint16 FrameCnt)
{
g_dmaCTRLPKT_TX.SADD = (uint32_t)TX_Data;
g_dmaCTRLPKT_TX.DADD = (uint32_t)RX_Data;
g_dmaCTRLPKT_TX.CHCTRL = 0;
g_dmaCTRLPKT_TX.ELCNT = ElmntCnt;
g_dmaCTRLPKT_TX.FRCNT = FrameCnt;
g_dmaCTRLPKT_TX.ELDOFFSET = 0;
g_dmaCTRLPKT_TX.ELSOFFSET = 0; // sizeof(uint16_t);
g_dmaCTRLPKT_TX.FRDOFFSET = 0;
g_dmaCTRLPKT_TX.FRSOFFSET = sizeof(uint16_t) ;
g_dmaCTRLPKT_TX.PORTASGN = 4;
g_dmaCTRLPKT_TX.RDSIZE = ACCESS_16_BIT;
g_dmaCTRLPKT_TX.WRSIZE = ACCESS_16_BIT;
g_dmaCTRLPKT_TX.TTYPE = FRAME_TRANSFER;
g_dmaCTRLPKT_TX.ADDMODERD = ADDR_OFFSET;
g_dmaCTRLPKT_TX.ADDMODEWR = ADDR_OFFSET;
g_dmaCTRLPKT_TX.AUTOINIT = AUTOINIT_ON;
}
/* USER CODE END */
int main(void) {
spiDAT1_t dataconfig1_t;
dataconfig1_t.CS_HOLD = FALSE;
dataconfig1_t.WDEL = TRUE;
dataconfig1_t.DFSEL = SPI_FMT_0;
dataconfig1_t.CSNR = 0xFD;
/* Enable IRQ - Clear I flag in CPS register */
_enable_IRQ();
/* - initializing spi*/
spiInit();
/* - enabling dma module */
dmaEnable();
/* - configuring dma TX control packets */
dmaConfigCtrlTxPacket((uint32_t)&TX_Data, SPI3_TX_ADDR, 16, FrameCnt);
dmaSetCtrlPacket(DMA_CH1, g_dmaCTRLPKT_TX);
dmaReqAssign(DMA_CH1, 15); //SPI3 TX
dmaSetPriority(DMA_CH1, HIGHPRIORITY);
spiREG3->INT0 = (0x1 << 16);
dmaSetChEnable(DMA_CH1, DMA_HW); //SPI3 TX, hardware triggering
spiSendAndGetData(spiREG1, &dataconfig1_t, 16, TX_Data, RX_Data);
while(1);
/* USER CODE END */
}
/* USER CODE BEGIN (4) */
/* USER CODE END */
How can I send the whole data written in TX_Data? Thanks for your help in advance.
Caner