海珠建网站多少钱专业推广图片
目录
- 参照资料
 - 内存映射寄存器分类
 - 影子通道寄存器
 - 传输中断
 - 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);
} 
示例配置:块传输

示例配置:矩阵转置

示例配置:链接传输

