【电路笔记 TMS320C6***DSP】C6748 EDMA3配置笔记 寄存器配置+影子通道寄存器+配置示例
目录
- 参照资料
- 内存映射寄存器分类
- 影子通道寄存器
- 传输中断
- PaRAM参数
- SRC、DST
- A_B_CNT、CCNT
- SRC_DST_BIDX
- SRC_DST_CIDX
- OPT
- opt示例
- 链接传输LINK_BCNTRLD (LinkAddress/BCountReloadParameter)
- 示例代码
- 示例配置:块传输
- 示例配置:矩阵转置
- 示例配置:链接传输
参照资料
- 第三代增强型内存直接存取控制……视频教程
- TMS320C642x DSP Enhanced Direct Memory Access (EDMA3)
Controller User’s Guide https://www.ti.com/lit/ug/spruem5a/spruem5a.pdf
内存映射寄存器分类
影子通道寄存器
传输中断
PaRAM参数
- PaRAM参数在说明文档的第四章
SRC、DST
A_B_CNT、CCNT
SRC_DST_BIDX
SRC_DST_CIDX
OPT
- 通道选项参数OPT字段描述表格(Channel Options Parameters (OPT) Field Descriptions)
位域 | 字段名 | 值范围 | 描述 |
---|---|---|---|
31-28 | Reserved | 0 | 预留位,必须写入0。 |
27-24 | PRIVID | 0-Fh | 权限标识符,表示编程此PaRAM集的外部主机/CPU/DMA的权限级别。该值在任何部分PaRAM集被写入时设置为EDMA3主控的权限识别值。 |
23 | ITCCHEN | 0, 1 | 中间传输完成链式使能。 |
0 | 禁用中间传输完成链式功能。 | ||
1 | 启用中间传输完成链式功能。当启用时,每次中间链接传输完成(除了PaRAM集中最后一个TR),都会设置链式事件寄存器(CER/CERH)中的相应位。 | ||
22 | TCCHEN | 0, 1 | 传输完成链式使能。 |
0 | 禁用传输完成链式功能。 | ||
1 | 启用传输完成链式功能。当启用时,在最终链接传输完成时(即PaRAM集中最后一个TR完成时),会设置链式事件寄存器(CER/CERH)中的相应位。 | ||
21 | ITCINTEN | 0, 1 | 中间传输完成中断使能。 |
0 | 禁用中间传输完成中断。 | ||
1 | 启用中间传输完成中断。当启用时,每次中间传输完成(除了PaRAM集中最后一个TR),都会设置中断挂起寄存器(IPR/IPRH)中的相应位。为了生成CPU中断,对应的IER[TCC]/IERH[TCC]位必须设置为1。 | ||
20 | TCINTEN | 0, 1 | 传输完成中断使能。 |
0 | 禁用传输完成中断。 | ||
1 | 启用传输完成中断。当启用时,在最终传输完成时(即PaRAM集中最后一个TR完成时),会设置中断挂起寄存器(IPR/IPRH)中的相应位。为了生成CPU中断,对应的IER[TCC]/IERH[TCC]位必须设置为1。 | ||
19-18 | Reserved | 0 | 预留位,必须写入0。 |
17-12 | TCC | 0-3Fh | 传输完成代码。这个6位代码用于设置链式使能寄存器(CER[TCC]/CERH[TCC])中的相关位或中断挂起寄存器(IPR[TCC]/IPRH[TCC])中的相关位。 |
11 | TCCMODE | 0, 1 | 传输完成代码模式。指示传输被认为完成的时间点,以用于链式和中断生成。 |
0 | 正常完成:数据传输完成后才认为传输完成。 | ||
1 | 提前完成:EDMA3CC提交一个TR给EDMA3TC后即认为传输完成。此时TC可能仍在传输数据。 | ||
10-8 | FWID | 0-7h | FIFO宽度。仅适用于SAM或DAM设置为常量地址模式的情况。 |
0 | FIFO宽度为8位。 | ||
1h | FIFO宽度为16位。 | ||
2h | FIFO宽度为32位。 | ||
3h | FIFO宽度为64位。 | ||
4h | FIFO宽度为128位。 | ||
5h | FIFO宽度为256位。 | ||
6h-7h | 预留位,必须写入0。 | ||
7-4 | Reserved | 0 | 预留位,必须写入0。 |
3 | STATIC | 0, 1 | 静态PaRAM集。 |
0 | PaRAM集不是静态的。PaRAM集在TR提交后会被更新或链接。应为DMA通道或非最终传输使用。 | ||
1 | PaRAM集是静态的。PaRAM集在TR提交后不会被更新或链接。应为独立QDMA传输或链接列表中最终传输使用。 | ||
2 | SYNCDIM | 0, 1 | 传输同步维度。 |
0 | A同步:每个事件触发单个ACNT字节数组的传输。 | ||
1 | AB同步:每个事件触发BCNT个ACNT字节数组的传输。 | ||
1 | DAM | 0, 1 | 目标地址模式。 |
0 | 增量模式(INCR):目标地址在数组内递增。目标不是FIFO。 | ||
1 | 固定地址模式(CONST):目标地址在数组内循环到FIFO宽度。 | ||
0 | SAM | 0, 1 | 源地址模式。 |
0 | 增量模式(INCR):源地址在数组内递增。源不是FIFO。 | ||
1 | 固定地址模式(CONST):源地址在数组内循环到FIFO宽度。 |
opt示例
opt
字段是EDMA3参数集(PaRAM Set)中的一个非常重要的配置项,它通过位域(bit fields)来设置多种传输选项,以下为一个示例。
paramSet.opt = (0 << 23) | // Bit 23: ITCCHEN = 0 (Disable intermediate transfer complete chaining)(0 << 22) | // Bit 22: TCCHEN = 0 (Disable transfer complete chaining)(0 << 21) | // Bit 21: ITCINTEN = 0 (Disable intermediate transfer complete interrupt)(1 << 20) | // Bit 20: TCINTEN = 1 启用传输完成中断。当启用时,在最终传输完成时(即PaRAM集中最后一个TR完成时),会设置中断挂起寄存器(IPR/IPRH)中的相应位。为了生成CPU中断,对应的IER[TCC]/IERH[TCC]位必须设置为1。)(0 << 12) | // Bit 12: 17-12传输完成控制代码,为000000。(0 << 11) | // Bits 11: 传输完成代码模式为正常完成。指示传输被认为完成的时间点,以用于链式和中断生成。(1 << 8) | // Bits 8: 10-8为FIFO宽度。FIFO宽度为16位。 0 0 1,FIFO宽度为16位(1 << 3) | // Bits 3: PaRAM集是静态的。PaRAM集在TR提交后不会被更新或链接。应为独立QDMA传输或链接列表中最终传输使用。(0 << 2) | // Bits 2: A同步:每个事件触发单个ACNT字节数组的传输。(1 << 1) | // Bits 1: 固定地址模式(CONST):目标地址在数组内循环到FIFO宽度。(0 << 0); // Bits 0: 源地址模式为增量模式(INCR):源地址在数组内递增。源不是FIFO。
链接传输LINK_BCNTRLD (LinkAddress/BCountReloadParameter)
示例代码
/****************************************************************************/
/* https://bbs.elecfans.com/jishu_1790271_1_1.html https://bbs.elecfans.com/jishu_520116_1_1.html */
/* EDMA3 传输配置(在初始化之后) */
/****************************************************************************/
void EDMA3GpioInit()
{EDMA3CCPaRAMEntry paramSet;unsigned int acnt = 64; // 一维unsigned int bcnt = 1; // 二维unsigned int ccnt = 1; // 三维// 申请 EDMA3 通道EDMA3RequestChannel(SOC_EDMA30CC_0_REGS, chType, chNum, tccNum, evtQ);// 可添加回调函数:https://e2echina.ti.com/support/processors/f/processors-forum/30494/c6748-edma3-spi// cb_Fxn[cbf_index] = &hcallback; // Registering Callback Function // 或 hcb_Fxn[cbf_index] = &hcallback; // Registering Callback Function // 配置参数 RAMparamSet.srcAddr = (unsigned int)(&StringScr);paramSet.destAddr = (unsigned int)(&StringDst);paramSet.aCnt = (unsigned short)acnt;paramSet.bCnt = (unsigned short)bcnt;paramSet.cCnt = (unsigned short)ccnt;// 设置 SRC / DES 索引paramSet.srcBIdx = (short)acnt;paramSet.destBIdx = (short)acnt;// A Sync 传输模式(一维传输模式)paramSet.srcCIdx = (short)acnt;paramSet.destCIdx = (short)acnt;paramSet.linkAddr = (unsigned short)0xFFFFu;paramSet.bCntReload = (unsigned short)0u;paramSet.opt = 0u;// Src 及 Dest 使用自增(INCR)模式paramSet.opt &= 0xFFFFFFFCu;// 配置 TCCparamSet.opt |= ((tccNum << EDMA3CC_OPT_TCC_SHIFT) & EDMA3CC_OPT_TCC);// 写参数 RAMEDMA3SetPaRAM(SOC_EDMA30CC_0_REGS, chNum, ¶mSet);// 使能传输EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, chNum, trigMode);
}