您好!
我使用 DMA 从连接到 SCI3的外部器件获取数据。 根据我的理解(并根据尼斯示例 https://www.ti.com/lit/an/spna213/spna213.pdf)、DMA "一次从数据 RAM 读取32位、从而使地址递增"。 尽管如此、我的分址地址中的数据始终是3个字节的0和1个字节的(正确)数据。
例如、如果外部器件发送0x3A45B、则分页地址为{0x0、0x0、0x0、0x3、 0x0、 0x0、0x0、0xA、 0x0、0x0、 0x0、0x4、0x0、0x0、0x0、 0x5、0x0、0x0、0x0、0xB};
我尝试使用参数 aroung、主要是读写大小和偏移量、但我无法使它传输全部32位的实际数据。
DMA 是否有办法从 SCI 发送所有32位数据?
我的设置:
#define FRAME_TRANSFER 5 dmaCTRLPKT_RX.SADD = (uintptr_t) &(sciREG3->RD); /* source address */ dmaCTRLPKT_RX.DADD = (uintptr_t) shared_mem_p; /* destination address in shared RAM */ dmaCTRLPKT_RX.ELCNT = 1; /* element count */ dmaCTRLPKT_RX.CHCTRL = 0; /* (channel control) bufferId */ dmaCTRLPKT_RX.FRCNT = FRAME_LENGHT; /* frame count */ dmaCTRLPKT_RX.ELDOFFSET = 0; /* element destination offset */ dmaCTRLPKT_RX.ELSOFFSET = 0; dmaCTRLPKT_RX.FRDOFFSET = 0; /* frame destination offset */ dmaCTRLPKT_RX.FRSOFFSET = 0; /* frame source offset */ dmaCTRLPKT_RX.PORTASGN = PORTB_READ_PORTA_WRITE; dmaCTRLPKT_RX.RDSIZE = ACCESS_32_BIT; dmaCTRLPKT_RX.WRSIZE = ACCESS_32_BIT; dmaCTRLPKT_RX.TTYPE = FRAME_TRANSFER; /* transfer type */ dmaCTRLPKT_RX.ADDMODERD = ADDR_FIXED; /* address mode read */ dmaCTRLPKT_RX.ADDMODEWR = ADDR_INC1; /* address mode write */ dmaCTRLPKT_RX .AUTOINIT = AUTOINIT_OFF; /* autoinit
谢谢、
Arturo。