主题中讨论的其他器件:HALCOGEN
大家好、我尝试通过将电路板的 SIMO[0] MIBSPI1线路与 SOMI[0] MIBSPI1端口相连来在 MIBSPI1上实现数据交换。
在 Halcogen 中、我选择了以下设置:



我想传输10帧、每个帧包含61个元素。
这是执行的 DMA 和 MIBSPI 配置:
void dmaConfigCtrlTxPacket (uint32 Sadd、uint32 dadd、uint16 ElmntCnt、uint16 FrameCnt)
{
G_dmaCTRLPKT_TX.Sadd =添加;/*源地址*
G_dmaCTRLPKT_TX.DADD = dadd;/*目标地址*
G_dmaCTRLPKT_TX.CHCTTRL = 0;/*通道控制*
G_dmaCTRLPKT_TX.FRCNT =帧计数;/*帧计数*
G_dmaCTRLPKT_TX.ELCNT = ElmntCnt;/*元素计数*
G_dmaCTRLPKPT_TX.ELDOFFSET = 4;/*元素目标偏移量*
G_dmaCTRLPKPT_TX.ELSOFFSET = 0;/*元素源偏移*
G_dmaCTRLPKPT_TX.FRDOFFSET = 0;/*帧目标偏移*
G_dmaCTRLPKPT_TX.FRSOFFSET = 0;/*帧目标偏移*
G_dmaCTRLPKT_TX.PORTASGN = 4;/*端口 b *
G_dmaCTRLPKT_TX.RDSIZE = ACCESS_16_BIT;/*读取大小*
G_dmaCTRLPKT_TX.WRSIZE = ACCESS_16_BIT;/*写入大小*
G_dmaCTRLPKT_TX.tType = FRAME_TRANSFSION;/*传输类型*/
G_dmaCTRPKT_TX.ADDMODERD = ADDR_INC1;/*地址模式读取*
G_dmaCTRLPKPT_TX.ADDMODEWR = ADDR_OFFSET;/*地址模式写入*
G_dmaCTRPKT_TX.AUTOINIT = AUTOINIT_ON;/*自动初始化*
}
void dmaConfigCtrlRxPacket (uint32 Sadd、uint32 dadd、uint16 ElmntCnt、uint16 FrameCnt)
{
G_dmaCTRLPKT_RX.Sadd =添加;/*源地址*
G_dmaCTRLPKT_RX.DADD =添加;/*目标地址*
G_dmaCTRLPKT_RX.CHCTRL = 0;/*通道控制*
G_dmaCTRLPKT_RX.FRCNT =帧计数;/*帧计数*
G_dmaCTRLPKT_RX.ELCNT = ElmntCnt;/*元素计数*
G_dmaCTRLPKPT_RX.ELDOFFSET = 0;/*元素目标偏移量*
G_dmaCTRLPPKT_RX.ELSOFFSET = 4;/*元素源偏移*
G_dmaCTRLPKPT_RX.FRDOFFSET = 0;/*帧目标偏移*
G_dmaCTRLPKPT_RX.FRSOFFSET = 0;/*帧目标偏移*
G_dmaCTRLPKT_RX.PORTASGN = 4;/*端口 b *
G_dmaCTRPKT_RX.RDSIZE = ACCESS_16_BIT;/*读取大小*
G_dmaCTRLPKT_RX.WRSIZE = ACCESS_16_BIT;/*写入大小*
G_dmaCTRLPKT_RX.tType = FRAME_TRANSFSION;/*传输类型*/
G_dmaCTRPKT_RX.ADDMODERD = ADDR_OFFSET;/*地址模式读取*
G_dmaCTRPKT_RX.ADDMODEWR = ADDR_INC1;/*地址模式写入*
G_dmaCTRPKT_RX.AUTOINIT = AUTOINIT_ON;/*自动初始化*
}
void mibspiDmaConfig (mibspi_t * mibspi、uint32通道、uint32 txchannel、uint32 rxchannel)
{
uint32 bufid = E_COUNT - 1;// TG0中的缓冲区数量
/*设置发送和接收通道*/
mibspi->DMACTRL[通道]|=(rxchannel << 20)|(txchannel << 16);
如果(F_COUNT > 1){
mibspi->TGCTRL[通道]&= 0xBFFFFFFF;//禁用 OneShot
}否则{
mibspi->TGCTRL[通道]|= 0x40000000;//启用 OneShot
}
/*启用发送和接收 DMA */
mibspi->DMACTRL[通道]|= 0x8000C000;
/*设置 DMA 传输的初始计数和用于 DMA 传输的缓冲区*/
mibspi->DMACTRL[通道]|=(bufid=24);
/*设置 DMA 传输的初始计数和用于 DMA 传输的缓冲区*/
mibspi->DMACTRL[通道]|=((F_COUNT - 1)<<8);
//////*设置 DMA 传输的初始计数和用于 DMA 传输的缓冲区*/
// mibspi->DMACTRL[通道]|=(0<<31);
//
// mibspi->DMACNTLEN = 0x1;
// mibspi->DMACOUNT[通道]=(F_COUNT - 1)<< 16;
}
如果我正确启动程序、传输发生、但使用示波器、我看到时钟和 MOSI 线路继续发送数据、尽管由于我接收到块传输完成中断、传输应该结束。 这种行为是否正常、或者配置或实现是否有问题?
随附完整的 sys_main.c、用于进一步分析。
e2e.ti.com/.../4846.sys_5F00_main.c
提前感谢您的帮助。


