C2837x入门指南(十二) — DMA模块(上)
Loading the player...
将在30s后自动为您播放下一课程
这一章主要介绍F2837X的DMA模块 主要分为两部分 第一个部分 会介绍一下DMA的控制器的工作模式 第二部分主要介绍一下DMA模块如何 在各种外设和ROM之间传输数据 而不需要CPU介入的一些距离引合方法 首先我们看看DMA的框图 F2837X最多有6个DMA通道 可以被ADC的EVT实现 McBSP 外部接口 CPU定时器 PWM SoC sigma delta滤波器 1和2 SPI USB的收发 以及软件触发 来进行传输数据 可以把ADC数据 以及SPI MCBSP的数据和PWM模块 内部GSRAM IPCRAM以及外部接口的数据 进行交互 DMA可以通过内部数据总线访问PWM SDFM SPI MCBSP外设 但这需要PF1和PF2的 计算器配置 这两个位分别控制不同的访问权 如果把控制器权给DMA 那CLA会失去访问权 如果交给CLA DMA会失去访问权 这是通过PF2SEL和PF1SEL进行配置 但是无论如何 两者不会影响CPU对外设的访问权 DMA的传输单位 有几个定义组成 最小的单位是word 可以是16位或32位 也就是一次传输的最小单位 是一个word 然后可以通过设置一个burst模式的尺寸 来设置一个Burst事件 而一次Burst事件会包含多个word 设置的寄存器是一个5位宽度的32个word 然后就是一个transfer 它包含多个Burst 然后可以设置多个Burst事件出发完以后 结束一次transfer transfer 最多可达到 6553次burst mode 事件的框图 如这张图片所示 开始传输后 会等到累计数量 累计的设置值以后 再结束 结束时可以自动初始化 或者就停止传输 所以 当一个burst传输完设定的word以后 就会回到上面这个点 去检查是否完成了一次transfer 如果transfer也完成了 才会结束本次transfer 所以DMA的最大传输单位是一个transfer 以32word为最小单位举例 从寄存器端来看 当事件出发开始转换后 会首先把目标地址指针和终点地址指针从影子计算器 放到active计算器 然后每次传输完32位的word以后 一个Burst事件就会在原地址和目标地址 减去burst step 以此类推 直到传输完所有的burst事件 也就是完成一次transfer以后 才算完成 其中burst step 和transfer step 都是有符号数 可以设置成正数和负数 从而达到memory地址可以上下移动的功能 以3word/burst 2burst/transfer举例 当触发事件来的时候 会触动传输 然后读取写入数据 每次完成操作后 就检查当前是否已经完成一个burst size 就是3个word 如果没完成 就加1 如果完成了 就进入下一次 检测是否完成一次transfer 也就是是否发完了2个burst数据 如果没有完成 那一样把transfer地址加1 然后继续搬 如果搬完了 就结束本次传输 所以 图中的红框是整个流程 在这个过程中 有两个地方能触发DMA的中断 一个是开始传输的地方 第二是传输结束的时刻 都可以在寄存器中配置 并且需要打开PIE中的DMA专用通道 中断 开启传输 举一个具体的DMA中断的例子 它的目的是将4个word 从F00的内存地址移动到400的内存地址 burst的尺寸为1 transfer的尺寸也是1 也就是一个transfer需要两次burst才能完成 一次burst事件需要两个word才能完成 初始化时 原地址和目标地址的指针 都是0 当一次transfer开始 出发开始传输时 原地址和目标地址的active计算器 就从影子寄存器拿到了初始地址 所以这个地方填上了原地址和目标地址的地址 指针值 然后传输第一个word 0x1111 然后还是判断 一次burst是否完成 如果此时已经完成 那就做下一个判断 一次transfer是否完成 如果目前还没有完成 再次将原地址和目标地址指针加1 再继续传第二个word 0x2222 并且原地址和目标地址指针继续加1 传完第二个数据 0x2222后 再次判断burst是否完成 此时其实已经完成 所以做下一个判断 一个transfer是否完成 因为目前没有完成 再次将原地址和目标地址指针加1 然后再次等触发事件到来 此时如果触发事件到来 进行第二次burst传输 搬移第三个word 0x3333 搬移完只后 重复之前的检查 此时第二个burst没有完成 所以继续把地址加1 传输第四个word 0x4444 完成后 检查burst 和transfer 都已经完成 此时 传输结束 会在这地方触发PIE的中断 下面再举一个例子 如何把ADC的三次采样结果 按照图右边的顺序 放入内存 也就是CH0 Ch1 CH2 CH3 CH4 分别采样三次 每个数值间隔两个内存地址 这样的排列 这是CH3 Ch4的第二次采样 灰色是第三次采样结果
这一章主要介绍F2837X的DMA模块 主要分为两部分 第一个部分 会介绍一下DMA的控制器的工作模式 第二部分主要介绍一下DMA模块如何 在各种外设和ROM之间传输数据 而不需要CPU介入的一些距离引合方法 首先我们看看DMA的框图 F2837X最多有6个DMA通道 可以被ADC的EVT实现 McBSP 外部接口 CPU定时器 PWM SoC sigma delta滤波器 1和2 SPI USB的收发 以及软件触发 来进行传输数据 可以把ADC数据 以及SPI MCBSP的数据和PWM模块 内部GSRAM IPCRAM以及外部接口的数据 进行交互 DMA可以通过内部数据总线访问PWM SDFM SPI MCBSP外设 但这需要PF1和PF2的 计算器配置 这两个位分别控制不同的访问权 如果把控制器权给DMA 那CLA会失去访问权 如果交给CLA DMA会失去访问权 这是通过PF2SEL和PF1SEL进行配置 但是无论如何 两者不会影响CPU对外设的访问权 DMA的传输单位 有几个定义组成 最小的单位是word 可以是16位或32位 也就是一次传输的最小单位 是一个word 然后可以通过设置一个burst模式的尺寸 来设置一个Burst事件 而一次Burst事件会包含多个word 设置的寄存器是一个5位宽度的32个word 然后就是一个transfer 它包含多个Burst 然后可以设置多个Burst事件出发完以后 结束一次transfer transfer 最多可达到 6553次burst mode 事件的框图 如这张图片所示 开始传输后 会等到累计数量 累计的设置值以后 再结束 结束时可以自动初始化 或者就停止传输 所以 当一个burst传输完设定的word以后 就会回到上面这个点 去检查是否完成了一次transfer 如果transfer也完成了 才会结束本次transfer 所以DMA的最大传输单位是一个transfer 以32word为最小单位举例 从寄存器端来看 当事件出发开始转换后 会首先把目标地址指针和终点地址指针从影子计算器 放到active计算器 然后每次传输完32位的word以后 一个Burst事件就会在原地址和目标地址 减去burst step 以此类推 直到传输完所有的burst事件 也就是完成一次transfer以后 才算完成 其中burst step 和transfer step 都是有符号数 可以设置成正数和负数 从而达到memory地址可以上下移动的功能 以3word/burst 2burst/transfer举例 当触发事件来的时候 会触动传输 然后读取写入数据 每次完成操作后 就检查当前是否已经完成一个burst size 就是3个word 如果没完成 就加1 如果完成了 就进入下一次 检测是否完成一次transfer 也就是是否发完了2个burst数据 如果没有完成 那一样把transfer地址加1 然后继续搬 如果搬完了 就结束本次传输 所以 图中的红框是整个流程 在这个过程中 有两个地方能触发DMA的中断 一个是开始传输的地方 第二是传输结束的时刻 都可以在寄存器中配置 并且需要打开PIE中的DMA专用通道 中断 开启传输 举一个具体的DMA中断的例子 它的目的是将4个word 从F00的内存地址移动到400的内存地址 burst的尺寸为1 transfer的尺寸也是1 也就是一个transfer需要两次burst才能完成 一次burst事件需要两个word才能完成 初始化时 原地址和目标地址的指针 都是0 当一次transfer开始 出发开始传输时 原地址和目标地址的active计算器 就从影子寄存器拿到了初始地址 所以这个地方填上了原地址和目标地址的地址 指针值 然后传输第一个word 0x1111 然后还是判断 一次burst是否完成 如果此时已经完成 那就做下一个判断 一次transfer是否完成 如果目前还没有完成 再次将原地址和目标地址指针加1 再继续传第二个word 0x2222 并且原地址和目标地址指针继续加1 传完第二个数据 0x2222后 再次判断burst是否完成 此时其实已经完成 所以做下一个判断 一个transfer是否完成 因为目前没有完成 再次将原地址和目标地址指针加1 然后再次等触发事件到来 此时如果触发事件到来 进行第二次burst传输 搬移第三个word 0x3333 搬移完只后 重复之前的检查 此时第二个burst没有完成 所以继续把地址加1 传输第四个word 0x4444 完成后 检查burst 和transfer 都已经完成 此时 传输结束 会在这地方触发PIE的中断 下面再举一个例子 如何把ADC的三次采样结果 按照图右边的顺序 放入内存 也就是CH0 Ch1 CH2 CH3 CH4 分别采样三次 每个数值间隔两个内存地址 这样的排列 这是CH3 Ch4的第二次采样 灰色是第三次采样结果
这一章主要介绍F2837X的DMA模块
主要分为两部分 第一个部分 会介绍一下DMA的控制器的工作模式
第二部分主要介绍一下DMA模块如何 在各种外设和ROM之间传输数据
而不需要CPU介入的一些距离引合方法
首先我们看看DMA的框图
F2837X最多有6个DMA通道
可以被ADC的EVT实现
McBSP 外部接口
CPU定时器
PWM SoC sigma delta滤波器
1和2 SPI
USB的收发
以及软件触发
来进行传输数据 可以把ADC数据
以及SPI MCBSP的数据和PWM模块
内部GSRAM IPCRAM以及外部接口的数据
进行交互
DMA可以通过内部数据总线访问PWM SDFM SPI
MCBSP外设 但这需要PF1和PF2的
计算器配置
这两个位分别控制不同的访问权
如果把控制器权给DMA
那CLA会失去访问权
如果交给CLA DMA会失去访问权
这是通过PF2SEL和PF1SEL进行配置
但是无论如何 两者不会影响CPU对外设的访问权
DMA的传输单位 有几个定义组成
最小的单位是word 可以是16位或32位
也就是一次传输的最小单位 是一个word
然后可以通过设置一个burst模式的尺寸
来设置一个Burst事件 而一次Burst事件会包含多个word
设置的寄存器是一个5位宽度的32个word
然后就是一个transfer
它包含多个Burst
然后可以设置多个Burst事件出发完以后
结束一次transfer
transfer 最多可达到
6553次burst mode
事件的框图 如这张图片所示
开始传输后 会等到累计数量
累计的设置值以后
再结束 结束时可以自动初始化
或者就停止传输
所以 当一个burst传输完设定的word以后
就会回到上面这个点
去检查是否完成了一次transfer
如果transfer也完成了 才会结束本次transfer
所以DMA的最大传输单位是一个transfer
以32word为最小单位举例
从寄存器端来看 当事件出发开始转换后
会首先把目标地址指针和终点地址指针从影子计算器
放到active计算器
然后每次传输完32位的word以后
一个Burst事件就会在原地址和目标地址
减去burst step 以此类推
直到传输完所有的burst事件 也就是完成一次transfer以后
才算完成 其中burst step 和transfer step
都是有符号数 可以设置成正数和负数
从而达到memory地址可以上下移动的功能
以3word/burst 2burst/transfer举例
当触发事件来的时候 会触动传输
然后读取写入数据 每次完成操作后
就检查当前是否已经完成一个burst size
就是3个word 如果没完成 就加1
如果完成了 就进入下一次
检测是否完成一次transfer
也就是是否发完了2个burst数据
如果没有完成 那一样把transfer地址加1
然后继续搬 如果搬完了 就结束本次传输
所以 图中的红框是整个流程
在这个过程中 有两个地方能触发DMA的中断
一个是开始传输的地方
第二是传输结束的时刻 都可以在寄存器中配置
并且需要打开PIE中的DMA专用通道
中断 开启传输
举一个具体的DMA中断的例子
它的目的是将4个word 从F00的内存地址移动到400的内存地址
burst的尺寸为1 transfer的尺寸也是1
也就是一个transfer需要两次burst才能完成
一次burst事件需要两个word才能完成
初始化时 原地址和目标地址的指针
都是0
当一次transfer开始 出发开始传输时
原地址和目标地址的active计算器
就从影子寄存器拿到了初始地址
所以这个地方填上了原地址和目标地址的地址
指针值
然后传输第一个word 0x1111
然后还是判断
一次burst是否完成 如果此时已经完成
那就做下一个判断
一次transfer是否完成
如果目前还没有完成
再次将原地址和目标地址指针加1
再继续传第二个word 0x2222
并且原地址和目标地址指针继续加1
传完第二个数据 0x2222后
再次判断burst是否完成
此时其实已经完成
所以做下一个判断
一个transfer是否完成
因为目前没有完成 再次将原地址和目标地址指针加1
然后再次等触发事件到来
此时如果触发事件到来 进行第二次burst传输
搬移第三个word 0x3333
搬移完只后 重复之前的检查
此时第二个burst没有完成
所以继续把地址加1
传输第四个word 0x4444
完成后 检查burst 和transfer
都已经完成
此时 传输结束
会在这地方触发PIE的中断
下面再举一个例子
如何把ADC的三次采样结果
按照图右边的顺序 放入内存
也就是CH0 Ch1 CH2 CH3 CH4
分别采样三次
每个数值间隔两个内存地址
这样的排列
这是CH3 Ch4的第二次采样
灰色是第三次采样结果
这一章主要介绍F2837X的DMA模块 主要分为两部分 第一个部分 会介绍一下DMA的控制器的工作模式 第二部分主要介绍一下DMA模块如何 在各种外设和ROM之间传输数据 而不需要CPU介入的一些距离引合方法 首先我们看看DMA的框图 F2837X最多有6个DMA通道 可以被ADC的EVT实现 McBSP 外部接口 CPU定时器 PWM SoC sigma delta滤波器 1和2 SPI USB的收发 以及软件触发 来进行传输数据 可以把ADC数据 以及SPI MCBSP的数据和PWM模块 内部GSRAM IPCRAM以及外部接口的数据 进行交互 DMA可以通过内部数据总线访问PWM SDFM SPI MCBSP外设 但这需要PF1和PF2的 计算器配置 这两个位分别控制不同的访问权 如果把控制器权给DMA 那CLA会失去访问权 如果交给CLA DMA会失去访问权 这是通过PF2SEL和PF1SEL进行配置 但是无论如何 两者不会影响CPU对外设的访问权 DMA的传输单位 有几个定义组成 最小的单位是word 可以是16位或32位 也就是一次传输的最小单位 是一个word 然后可以通过设置一个burst模式的尺寸 来设置一个Burst事件 而一次Burst事件会包含多个word 设置的寄存器是一个5位宽度的32个word 然后就是一个transfer 它包含多个Burst 然后可以设置多个Burst事件出发完以后 结束一次transfer transfer 最多可达到 6553次burst mode 事件的框图 如这张图片所示 开始传输后 会等到累计数量 累计的设置值以后 再结束 结束时可以自动初始化 或者就停止传输 所以 当一个burst传输完设定的word以后 就会回到上面这个点 去检查是否完成了一次transfer 如果transfer也完成了 才会结束本次transfer 所以DMA的最大传输单位是一个transfer 以32word为最小单位举例 从寄存器端来看 当事件出发开始转换后 会首先把目标地址指针和终点地址指针从影子计算器 放到active计算器 然后每次传输完32位的word以后 一个Burst事件就会在原地址和目标地址 减去burst step 以此类推 直到传输完所有的burst事件 也就是完成一次transfer以后 才算完成 其中burst step 和transfer step 都是有符号数 可以设置成正数和负数 从而达到memory地址可以上下移动的功能 以3word/burst 2burst/transfer举例 当触发事件来的时候 会触动传输 然后读取写入数据 每次完成操作后 就检查当前是否已经完成一个burst size 就是3个word 如果没完成 就加1 如果完成了 就进入下一次 检测是否完成一次transfer 也就是是否发完了2个burst数据 如果没有完成 那一样把transfer地址加1 然后继续搬 如果搬完了 就结束本次传输 所以 图中的红框是整个流程 在这个过程中 有两个地方能触发DMA的中断 一个是开始传输的地方 第二是传输结束的时刻 都可以在寄存器中配置 并且需要打开PIE中的DMA专用通道 中断 开启传输 举一个具体的DMA中断的例子 它的目的是将4个word 从F00的内存地址移动到400的内存地址 burst的尺寸为1 transfer的尺寸也是1 也就是一个transfer需要两次burst才能完成 一次burst事件需要两个word才能完成 初始化时 原地址和目标地址的指针 都是0 当一次transfer开始 出发开始传输时 原地址和目标地址的active计算器 就从影子寄存器拿到了初始地址 所以这个地方填上了原地址和目标地址的地址 指针值 然后传输第一个word 0x1111 然后还是判断 一次burst是否完成 如果此时已经完成 那就做下一个判断 一次transfer是否完成 如果目前还没有完成 再次将原地址和目标地址指针加1 再继续传第二个word 0x2222 并且原地址和目标地址指针继续加1 传完第二个数据 0x2222后 再次判断burst是否完成 此时其实已经完成 所以做下一个判断 一个transfer是否完成 因为目前没有完成 再次将原地址和目标地址指针加1 然后再次等触发事件到来 此时如果触发事件到来 进行第二次burst传输 搬移第三个word 0x3333 搬移完只后 重复之前的检查 此时第二个burst没有完成 所以继续把地址加1 传输第四个word 0x4444 完成后 检查burst 和transfer 都已经完成 此时 传输结束 会在这地方触发PIE的中断 下面再举一个例子 如何把ADC的三次采样结果 按照图右边的顺序 放入内存 也就是CH0 Ch1 CH2 CH3 CH4 分别采样三次 每个数值间隔两个内存地址 这样的排列 这是CH3 Ch4的第二次采样 灰色是第三次采样结果
这一章主要介绍F2837X的DMA模块
主要分为两部分 第一个部分 会介绍一下DMA的控制器的工作模式
第二部分主要介绍一下DMA模块如何 在各种外设和ROM之间传输数据
而不需要CPU介入的一些距离引合方法
首先我们看看DMA的框图
F2837X最多有6个DMA通道
可以被ADC的EVT实现
McBSP 外部接口
CPU定时器
PWM SoC sigma delta滤波器
1和2 SPI
USB的收发
以及软件触发
来进行传输数据 可以把ADC数据
以及SPI MCBSP的数据和PWM模块
内部GSRAM IPCRAM以及外部接口的数据
进行交互
DMA可以通过内部数据总线访问PWM SDFM SPI
MCBSP外设 但这需要PF1和PF2的
计算器配置
这两个位分别控制不同的访问权
如果把控制器权给DMA
那CLA会失去访问权
如果交给CLA DMA会失去访问权
这是通过PF2SEL和PF1SEL进行配置
但是无论如何 两者不会影响CPU对外设的访问权
DMA的传输单位 有几个定义组成
最小的单位是word 可以是16位或32位
也就是一次传输的最小单位 是一个word
然后可以通过设置一个burst模式的尺寸
来设置一个Burst事件 而一次Burst事件会包含多个word
设置的寄存器是一个5位宽度的32个word
然后就是一个transfer
它包含多个Burst
然后可以设置多个Burst事件出发完以后
结束一次transfer
transfer 最多可达到
6553次burst mode
事件的框图 如这张图片所示
开始传输后 会等到累计数量
累计的设置值以后
再结束 结束时可以自动初始化
或者就停止传输
所以 当一个burst传输完设定的word以后
就会回到上面这个点
去检查是否完成了一次transfer
如果transfer也完成了 才会结束本次transfer
所以DMA的最大传输单位是一个transfer
以32word为最小单位举例
从寄存器端来看 当事件出发开始转换后
会首先把目标地址指针和终点地址指针从影子计算器
放到active计算器
然后每次传输完32位的word以后
一个Burst事件就会在原地址和目标地址
减去burst step 以此类推
直到传输完所有的burst事件 也就是完成一次transfer以后
才算完成 其中burst step 和transfer step
都是有符号数 可以设置成正数和负数
从而达到memory地址可以上下移动的功能
以3word/burst 2burst/transfer举例
当触发事件来的时候 会触动传输
然后读取写入数据 每次完成操作后
就检查当前是否已经完成一个burst size
就是3个word 如果没完成 就加1
如果完成了 就进入下一次
检测是否完成一次transfer
也就是是否发完了2个burst数据
如果没有完成 那一样把transfer地址加1
然后继续搬 如果搬完了 就结束本次传输
所以 图中的红框是整个流程
在这个过程中 有两个地方能触发DMA的中断
一个是开始传输的地方
第二是传输结束的时刻 都可以在寄存器中配置
并且需要打开PIE中的DMA专用通道
中断 开启传输
举一个具体的DMA中断的例子
它的目的是将4个word 从F00的内存地址移动到400的内存地址
burst的尺寸为1 transfer的尺寸也是1
也就是一个transfer需要两次burst才能完成
一次burst事件需要两个word才能完成
初始化时 原地址和目标地址的指针
都是0
当一次transfer开始 出发开始传输时
原地址和目标地址的active计算器
就从影子寄存器拿到了初始地址
所以这个地方填上了原地址和目标地址的地址
指针值
然后传输第一个word 0x1111
然后还是判断
一次burst是否完成 如果此时已经完成
那就做下一个判断
一次transfer是否完成
如果目前还没有完成
再次将原地址和目标地址指针加1
再继续传第二个word 0x2222
并且原地址和目标地址指针继续加1
传完第二个数据 0x2222后
再次判断burst是否完成
此时其实已经完成
所以做下一个判断
一个transfer是否完成
因为目前没有完成 再次将原地址和目标地址指针加1
然后再次等触发事件到来
此时如果触发事件到来 进行第二次burst传输
搬移第三个word 0x3333
搬移完只后 重复之前的检查
此时第二个burst没有完成
所以继续把地址加1
传输第四个word 0x4444
完成后 检查burst 和transfer
都已经完成
此时 传输结束
会在这地方触发PIE的中断
下面再举一个例子
如何把ADC的三次采样结果
按照图右边的顺序 放入内存
也就是CH0 Ch1 CH2 CH3 CH4
分别采样三次
每个数值间隔两个内存地址
这样的排列
这是CH3 Ch4的第二次采样
灰色是第三次采样结果
视频报错
手机看
扫码用手机观看
收藏本课程
视频简介
C2837x入门指南(十二) — DMA模块(上)
所属课程:C2837x入门指南
发布时间:2016.06.06
视频集数:28
本节视频时长:00:08:43
C2837x概述;芯片架构; 开发环境;外设寄存器操作;复位和中断;系统初始化;模拟子系统 ADC DAC CMP SDFM;控制类外设PWM CAP QEP。
//=$v1;?>
//=$v['id']?>//=$v['down_category']?>//=$v['link']?>//=$v['is_dl']?>//=$v['link']?>//=$v['name']?>//=$v['name']?>
//=$v['id']?>//=$v['down_category']?>//=$v['path']?>//=$v['is_dl']?>//=$v['path']?>//=$v['name']?>//=$v['name']?>
////=count($lesson['bbsinfo'])?>
//=$elink?>//=$elink?>//=$tags[0]?>//=$tags[0]?>//=$elink?>//= $elink?>//=$tags[1]?>//=$tags[1]?>
//=$lesson['bbs'];?>
//=count($lesson['bbsinfo'])?>