|
[TI首届低功耗设计大赛]+寄存器版本的DMA0实验+
[复制链接]
本帖最后由 IC爬虫 于 2014-10-1 16:49 编辑
这篇是FR5969的片内直接数据存储DMA的寄存器版本操作的简单试验。
下面提供的代码使用的是DMA0通道, 重复DMA数据块传送, 在主循环中重复执行DMA0CTL |= DMAREQ; 软件触发数据的传送。实现了16字的数据块在地址1C20-1C2Fh传送到地址为1C40h-1C4fh的空间中,使用的通道为DMA0.使用软件执行DMAREQ 触发数据传送.每次传送,源地址和目的地址及DMA的大小都是软件重置,因为设置的传送模式为模式5。P1.0控制的LED2在主循环中翻转。其实DMA在传送的过程中有很多的中断功能,如:数据传输完成后的中断功能。
使用DMA有非常道的优势,繁琐的数据搬移不在需要CPU 的干预,能节省CPU的操作时间,对降低功耗有利。而且数据的搬移也非常的块,一般只要MCLK时钟的2个时钟周期。在把ADC的转换的数据寄存器中的值通过DMA数据传输通道传到内存中,又高效而且不会有读取不及时灯问题。
FR5X系列的芯片的DMA有多种的数据传送方式,有:
1. 固定地址到固定地址;
2. 固定地址到数据块
3. 数据块到固定地址
4. 数据块到数据块
- //******************************************************************************
- // MSP430FR59xx Demo - DMA0, 重复DMA数据块传送, 软件触发
- //
- // 描述: 16字的数据块在地址1C20-1C2Fh传送到地址为1C40h-1C4fh的空间中,使用的通
- // 道为DMA0.使用软件执行DMAREQ 触发数据传送.每次传送,源地址和目的地址及
- // DMA的大小都是软件重置,因为设置的传送模式为模式5。P1.0控制的LED2在主循
- // 环中翻转。
- // ** RAM 所在的区域 0x1C00 - 0x1C3F used - 确保没有编译器冲突 **
- // MCLK = SMCLK = default DCO
- //
- //
- // MSP430FR5969
- // -----------------
- // /|\| |
- // | | |
- // --|RST |
- // | |
- // | P1.0|-->LED
- //
- // IC爬虫 QQ:1394024051
- //
- // Sep 2014
- // Built with IAR Embedded Workbench V6.1
- //******************************************************************************
- #include "msp430.h"
- /*******************************************************************************
- *函数名 :int main
- *描述 :主函数
- *输入 :无
- *输出 :无
- *调用 :内部调用
- ******************************************************************************/
- int main(void)
- {
- WDTCTL = WDTPW | WDTHOLD; // 停止看门狗
- // Configure GPIO
- P1OUT = 0;
- P1DIR = BIT0; //配置LED2的控制管脚P1.1为输出方向
- PM5CTL0 &= ~LOCKLPM5; // 关闭上电端口默认输出高阻抗的功能,使能上电保持起始设置
-
- // 配置 DMA 通道 0
- __data16_write_addr((unsigned short) &DMA0SA,(unsigned long) 0x1C20);
- // 源数据块的起始地址
- __data16_write_addr((unsigned short) &DMA0DA,(unsigned long) 0x1C40);
- // 目的地址的起始地址
- DMA0SZ = 16; // 传送的大小
- DMA0CTL = DMADT_5 | DMASRCINCR_3 | DMADSTINCR_3; // 重复传送,源地址按增长的方向,目的地址按增长的方向
- DMA0CTL |= DMAEN; // 使能 DMA0
- while(1)
- {
- P1OUT |= 0x01; // P1.0 = 1, LED on
- DMA0CTL |= DMAREQ; // 触发数据传送
- P1OUT &= ~0x01; // P1.0 = 0, LED off
- }
- }
复制代码
6-DMA-数据传输.rar
(24.34 KB, 下载次数: 3, 售价: 1 分芯积分)
|
|