⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msp_dma.c

📁 MSP430系列单片机资料-7册-46.3M-pdf.zip
💻 C
字号:
/****************************************************************************
文件名:msp_dma.c
编写者:czhang
描述:DMA功能模块
      MCLK:8MHz    ACLK:32.768kHz

版本:2005-4 V1.0
*****************************************************************************/
#include "msp430x16x.h"
#include "msp_dma.h"
/****************************************************************************
初始化DMA,内容包括:
	1.设置通道优先权
	2.选择触发源
	3.确定触发方式
	4.设置传输源地址和目的地址
	5.选择传输模式
****************************************************************************/
/****************************************************************************
初始化通道0
****************************************************************************/
void InitDma0()
{
	DMACTL0 &= DMA0TSEL_0;  //清除原来的触发源
	DMACTL0 |= DMA0TSEL_0;  //选择触发源:软件触发
	DMA0CTL  &= DMADT_0;	//清除原来的传输模式

	//选择传输模式:块传输。目的地址自动增加。源地址自动增加。
	//目的单元的存储单位为字节。源单元的存储单位为字节
	DMA0CTL |= DMADT_1+DMADSTINCR_3+DMASRCINCR_3+DMADSTBYTE+DMASRCBYTE;
}

/****************************************************************************
初始化通道1
****************************************************************************/
void InitDma1()
{
	DMACTL0 &= DMA1TSEL_0;  //清除原来的触发源
	DMACTL0 |= DMA1TSEL_0;  //选择触发源:软件触发
	DMA1CTL  &= DMADT_0;	//清除原来的传输模式

	//选择传输模式:块传输。目的地址自动增加。源地址自动增加。
	//目的单元的存储单位为字节。源单元的存储单位为字节
	DMA1CTL |= DMADT_1+DMADSTINCR_3+DMASRCINCR_3+DMADSTBYTE+DMASRCBYTE;

}

/****************************************************************************
初始化通道2
****************************************************************************/
void InitDma2()
{
	DMACTL0 &= DMA2TSEL_0;  //清除原来的触发源
	DMACTL0 |= DMA2TSEL_0;  //选择触发源:软件触发
	DMA2CTL  &= DMADT_0;	//清除原来的传输模式

	//选择传输模式:块传输。目的地址自动增加。源地址自动增加。
	//目的单元的存储单位为字节。源单元的存储单位为字节。
	DMA2CTL |= DMADT_1+DMADSTINCR_3+DMASRCINCR_3+DMADSTBYTE+DMASRCBYTE;
}

/****************************************************************************
打开或关闭DMA
doit:0:停止  100:运行  其他:什么都不做,
which:操作的DMA的通道号 0~2
****************************************************************************/
void OpenDma(unsigned char doit,unsigned which)
{
	unsigned int *pr;
	switch(which)
	{
		case 0:
			pr= (unsigned int *)DMA0CTL_;
		break;
		case 1:
			pr= (unsigned int *)DMA1CTL_;
		break;
		case 2:
			pr= (unsigned int *)DMA2CTL_;
		break;
	}
	if(doit==0)
	{
		*pr &= ~DMAEN;
	}
	else if(doit==100)
	{
		*pr |= DMAEN;
	}
}

/****************************************************************************
设置DMA传输的源、目标地址
which:DMA通道号0~2
src_adr:源地址
det_adr:目标地址
size:传送字或者字节数目。
****************************************************************************/
void DmaAdr(unsigned char which,unsigned int src_adr,unsigned int det_adr,unsigned int size )
{
	if(which==0)
	{
		DMA0SA=src_adr;
		DMA0DA=det_adr;
		DMA0SZ=size;
	}
	else if(which==1)
	{
		DMA1SA=src_adr;
		DMA1DA=det_adr;
		DMA1SZ=size;
	}
	else
	{
		DMA2SA=src_adr;
		DMA2DA=det_adr;
		DMA2SZ=size;
	}
}

/****************************************************************************
软件触发DMA
which:操作的DMA的通道号 0~2
****************************************************************************/
void DmaSoftGo(unsigned char which)
{
	switch(which)
	{
		case 0:
			DMA0CTL |= DMAREQ;
		break;
		case 1:
			DMA1CTL |= DMAREQ;
		break;
		case 2:
			DMA2CTL |= DMAREQ;
		break;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -