大家好、
SCI 和 DMA 现在可以多次传输固定长度数据。 但是、客户并不总是能够使用串行端口发送固定长度的数据、有时是10字节数据、有时是20字节数据。
客户希望了解如何配置 DMA、以便能够传输不同长度的数据。
固定长度数据可通过以下程序和结果多次发送:
#include"HL_sci.h"
#include"HL_REG_sci.h"
#include "HL_REG_DMA.h"
#include "HL_SYS_DMA.h"
G_dmaCTRL g_dmaCTRLPKT_SCI1_TX;
uint8 SCI1_TX_DATA[40]={0};
空 SCI_DMA_Init (空)
{
dmaReqAssign (DMA_CH19、DMA_REQ29);
G_dmaCTRLPKT_SCI1_TX.Sadd =(uint32)(SCI1_TX_DATA);
G_dmaCTRLPKT_SCI1_TX.DADD =((uint32_t)(&(sciREG1->TD))+3);
G_dmaCTRLPKT_SCI1_TX.CHCTTRL = 0;
G_dmaCTRLPKT_SCI1_TX.FRCNT = 10;
G_dmaCTRLPKT_SCI1_TX.ELCNT = 1;
G_dmaCTRLPKT_SCI1_TX.ELDOFFSET = 0;
G_dmaCTRLPKT_SCI1_TX.ELSOFFSET = 0;
G_dmaCTRLPKT_SCI1_TX.FRDOFFSET = 0;
G_dmaCTRLPKT_SCI1_TX.FRSOFFSET = 0;
G_dmaCTRLPKT_SCI1_TX.PORTASGN = PORTA_READ_PORTB_WRITE;
G_dmaCTRLPKT_SCI1_TX.RDSIZE = ACCESS_8_BIT;
G_dmaCTRLPKT_SCI1_TX.WRSIZE = ACCESS_8_BIT;
G_dmaCTRLPKT_SCI1_TX.tType = FRAME_TRANSFSION;
G_dmaCTRLPKT_SCI1_TX.ADDMODERD = ADDR_INC1;
G_dmaCTRLPKT_SCI1_TX.ADDMODEWR = ADDR_FIXED;
G_dmaCTRLPKT_SCI1_TX.AUTOINIT = AUTOINIT_OFF;
dmaSetCtrlPacket (dma_CH19、g_dmaCTRLPKT_SCI1_TX);
dmaSetChEnable (DMA_CH19、DMA_HW);
sciREG1->SETINT |=(1<<16U);
}
void SCI_DMA_SEND (uint8长度)
{
// dmaRAMREG->PCP[DMA_CH19].ITCOUNT =(0x00000001 |长度<16);
dmaSetChEnable (DMA_CH19、DMA_HW);
}
uint32 timel=50000;
int USER_MAIN (空)
{
uint8 i=0;
sciInit();
dmaEnable();
对于(i=0;i<40;i++)
{
SCI1_TX_DATA[I]=I;
}
SCI_DMA_Init();
while (1)
{
while (time--);
timmen=50000;
SCI_DMA_SEND (20);
}
}

发送不同长度的数据失败、只有第一次成功。 该方案作了以下改动和结果:
void SCI_DMA_SEND (uint8长度)
{
dmaRAMREG->PCP[DMA_CH19].ITCOUNT =(0x00000001 |长度<16);
dmaSetChEnable (DMA_CH19、DMA_HW);
}

您可以帮助检查此问题吗? 谢谢。
此致、
樱桃