目录
参照资料
- 第三代增强型内存直接存取控制……视频教程
- 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
// 配置参数 RAM
paramSet.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;
// 配置 TCC
paramSet.opt |= ((tccNum << EDMA3CC_OPT_TCC_SHIFT) & EDMA3CC_OPT_TCC);
// 写参数 RAM
EDMA3SetPaRAM(SOC_EDMA30CC_0_REGS, chNum, ¶mSet);
// 使能传输
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, chNum, trigMode);
}
示例配置:块传输

示例配置:矩阵转置

示例配置:链接传输


被折叠的 条评论
为什么被折叠?



