主题中讨论的其他器件:MSP-EXP430FR5994、 ENERGYTRACE、 MSP430F169
我们使用 MSP-EXP430FR5994套件评估 MSP430FR5994。 IDE 是 CCS 7.1.0。
附件是使用 DMA 的测试代码。 在评估 DMA 功能时、通过 EnergyTrace 工具、DMA 模块在该简单代码中似乎保持过多的活动(>50%占空比)。 请帮助检查代码并对其进行一些评论。
//
// MSP430F532x 演示- DMA0、重复块 UCA1UART 9600、TACCR2、ACLK
//
//说明:DMA0被用来逐字节传输一个字符串作为重复
//块到 UCA1TXBUF。 使用 CCR2IFG、Timer_A 持续以32768Hz 的频率运行
//触发 DMA0。 "Hello World"是通过9600波特 UART1发送的。
// ACLK = TACLK 32768Hz,MCLK = SMCLK =默认 DCO ~ 1048576Hz
//具有32768Hz XTAL @9600 = 32768Hz/9600 = 3.41 (000Dh 4Ah)的波特率分频器
////////* ACLK 需要 XOUT 上的一个外部手表晶振*//
////////*需要 MSP430F169器件*//
//
// MSP430F532x
//------------
///|\| XIN|-
//||| 32768Hz
//-|RST XOUT|-
//||
//| P4.4|--- >"Hello World"
//|| 9600 - 8N1
//
//
// Bhargavi Nisarga
// Texas Instruments Inc.
// 2009年4月
//使用 CCSv4和 IAR Embedded Workbench 构建版本:4.21
//
#include
int main (空)
{
WDTCTL = WDTPW + WDTHOLD;//停止看门狗
PJOUT = 0;
PJSEL0 = BIT4 | BIT5;//对于 XT1
PJDIR = 0xFFFF;
//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;
// XT1设置
CSCTL0_H = CSKKEY_H;//解锁 CS 寄存器
//CSCTL1 = DCORSEL + DCOFSEL_4;//如果 DCORSEL = 0:5.33MHz;如果 DCORSEL = 1:16MHz
CSCTL1 = DCOFSEL_0;//如果 DCORSEL = 0:1MHz;如果 DCORSEL = 1:1MHz
CSCTL2 = SELA_LFXTCLK | SELESS__DCOCLK | SELM_DCOCLK;
CSCTL3 = DIVA__1 | DIVM_1 | DIVM__1;//将所有分频器设置为1
CSCTL4 &=~LFXTOFF;//启用 LFXT1
操作
{
CSCTL5 &=~LFXTOFFG;//清除 XT1故障标志
SFRIFG1 &=~OFIFG;
} while (SFRIFG1 & OFIFG);//测试振荡器故障标志
CSCTL0_H = 0;//锁定 CS 寄存器
//配置 DMA0
DMACTL0 = DMA0TSEL_1;// 0-CCR2IFG
__data16_write_addr ((unsigned short)&DMA0SA、(unsigned long) 0x1C00);
//源块地址
__data16_write_addr ((unsigned short)&DMA0DA、(unsigned long) 0x1C20);
//目标单个地址
DMA0SZ = 1;//块大小
DMA0CTL = DMADT_4 + DMASRCINCR_0 + DMAEN;// Rpt、inc src、enable
TA0CCR0 = 8192;//特性频率= TACLK/CCR0
TA0CCR2 = 1;//用于 DMA0触发
TA0CTL = tassel_1 + MC_1;// ACLK、上行模式
_bis_SR_register (LPM3_bits);//输入 LPM3
}