6480|2

2

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

用MSP430F6638AD采集debug时遇到No source available for "0x4"的问题 [复制链接]

我最近刚学MSP430F6638的ADDA模块,尝试着编写了下面一段采集程序来采集100Hz的正弦波,但是不知道为什么程序很不稳定,有时能采集出波形,有时采不出,暂停程序就会出现No source available for "0x4"的问题,我想知道是程序编写上有问题还是其他方面的问题!我用的编译软件是CCS5.5。

附程序:
#include
void Clk_init(void)
{
while(BAKCTL&LOCKIO)
  BAKCTL&=~LOCKIO;
P7SEL|=BIT2+BIT3;
UCSCTL6&=~(XT1OFF);
UCSCTL6&=~XT2OFF;
do
{
  UCSCTL7&=~(XT2OFFG+XT1LFOFFG+XT1HFOFFG+DCOFFG);
  SFRIFG1&=~OFIFG;
}
while(SFRIFG1&OFIFG);
UCSCTL6&=~XT2DRIVE0;
UCSCTL4|=SELA_0+SELM_5+SELS_5;
}
void Timer_init(void)
{
TA0CCR0=999;                    
TA0CCTL1|=OUTMOD_3;           
TA0CCR1=500;
TA0CTL=TASSEL_2+MC_1+TACLR;   
}
void ADC_init(void)
{
REFCTL0&=~REFMSTR;
P6SEL|=BIT0;
ADC12CTL0=ADC12ON+ADC12SHT0_2+ADC12REF2_5V+ADC12REFON;
ADC12CTL1=ADC12SSEL_2+ADC12CONSEQ_2+ADC12SHS_1+ADC12SHP;
ADC12CTL2=ADC12RES_2;
ADC12MCTL0=ADC12INCH_0+ADC12SREF_1
ADC12CTL0|=ADC12ENC;
}
void DAC_init(void)
{
DAC12_0CTL0=DAC12IR+DAC12SREF_0+DAC12AMP_5+DAC12ENC+DAC12CALON+DAC12OPS;
}
void DMA_init(void)
{
DMACTL0=DMA0TSEL__ADC12IFG;
DMA0CTL=DMADT_4+DMADSTINCR_0+DMAEN;
__data16_write_addr((unsigned short)&DMA0SA,(unsigned long)&ADC12MEM0);
__data16_write_addr((unsigned short)&DMA0DA,(unsigned long)&DAC12_0DAT);
DMA0SZ=0x01;
}
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;      
    Clk_init();
    Timer_init();
    ADC_init();
    DMA_init();
    DAC_init();
__bis_SR_register(CPUOFF + GIE);      
__no_operation();
}                 

最新回复

中断函数呢? 你最好先注释,省的网友麻烦再翻数据手册了。、。。。   详情 回复 发表于 2014-5-8 18:49
 
点赞 关注

回复
举报

2781

帖子

419

TA的资源

五彩晶圆(中级)

沙发
 
中断函数呢?
你最好先注释,省的网友麻烦再翻数据手册了。、。。。

点评

我使用ADC12IFG0作为DMA的触发源,每次转换完成都能触发DMA把数据传输到DA的DAC12_0DAT寄存器去,DA是立即能输出的,这样的话应该可以不用中断函数吧?还是说是没写中断函数引起了No source available for "0x4"的问  详情 回复 发表于 2014-5-8 19:20
 
个人签名
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
qinkaiabc 发表于 2014-5-8 18:49
中断函数呢?
你最好先注释,省的网友麻烦再翻数据手册了。、。。。

我使用ADC12IFG0作为DMA的触发源,每次转换完成都能触发DMA把数据传输到DA的DAC12_0DAT寄存器去,DA是立即能输出的,这样的话应该可以不用中断函数吧?还是说是没写中断函数引起了No source available for "0x4"的问题?

附上带注释的程序
#include
void Clk_init(void)
{
//P1DIR|=BIT0;
//P1SEL|=BIT0;
while(BAKCTL&LOCKIO)
  BAKCTL&=~LOCKIO;                         //使能XT1
P7SEL|=BIT2+BIT3;
UCSCTL6&=~(XT1OFF);
UCSCTL6&=~XT2OFF;                        //使能XT2
do
{
  UCSCTL7&=~(XT2OFFG+XT1LFOFFG+XT1HFOFFG+DCOFFG);
  SFRIFG1&=~OFIFG;
}while(SFRIFG1&OFIFG);                    //检查是否清楚失效标志位
UCSCTL6&=~XT2DRIVE0;
UCSCTL4|=SELA_0+SELM_5+SELS_5; //ACLK=XT1=32K MCLK=SMCLK=XT2=4M
}
void Timer_init(void)
{
TA0CCR0=999;                                 //采样频率4M/1000=4K
TA0CCTL1|=OUTMOD_3;                   //输出模式3 置位复位
TA0CCR1=500;
TA0CTL=TASSEL_2+MC_1+TACLR;    //TA时钟源SMCLK  增计数模式
}
void ADC_init(void)
{
REFCTL0&=~REFMSTR;
P6SEL|=BIT0;
ADC12CTL0=ADC12ON+ADC12SHT0_2+ADC12REF2_5V+ADC12REFON;    //打开ADC12     多次采样   采样保持时间16*ADC12CLK  片内产生参考电压2.5v
ADC12CTL1=ADC12SSEL_2+ADC12CONSEQ_2+ADC12SHS_1+ADC12SHP;  //采样信号源自timerA    重复当前通道         ADC12时钟源为MCLK
ADC12CTL2=ADC12RES_2;                                                                     //12位分辨率转换需要 13个ADC12CLK周期
ADC12MCTL0=ADC12INCH_0+ADC12SREF_1;                                           //通道0     参考电压2.5v
ADC12CTL0|=ADC12ENC;
}
void DAC_init(void)
{
DAC12_0CTL0=DAC12IR+DAC12SREF_0+DAC12AMP_5+DAC12ENC+DAC12CALON+DAC12OPS; //满程输出Vref(2.5v)使能DAC
}
void DMA_init(void)
{
DMACTL0=DMA0TSEL__ADC12IFG;                                                                  //DMA触发源ADC12IFG0
DMA0CTL=DMADT_4+DMADSTINCR_0+DMAEN;                                              //重复单次传输模式 源地址不变  使能
__data16_write_addr((unsigned short)&DMA0SA,(unsigned long)&ADC12MEM0); //源地址
__data16_write_addr((unsigned short)&DMA0DA,(unsigned long)&DAC12_0DAT); //目标地址
DMA0SZ=0x01;                                                                                              //传输数据单位1字
}
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;                   // Stop watchdog timer
    Clk_init();
    Timer_init();
    ADC_init();
    DMA_init();
    DAC_init();
__bis_SR_register(CPUOFF + GIE);             // Enter LPM0, enable interrupts
__no_operation();                                     // For debugger
}

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表