2673|1

11

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

msp430f6638下面的扬声器程序是如何进入中断的! [复制链接]

#include
#include


#define PI 3.1415926

int sin_table[10];
int *sin_data_pr;
double i=0;
int j,k;
char flag=1;

int key_table[22]={261,293,329,349,391,440,493,533,587,659,698,783,880,987,1046,1174,1318,1396,1567,1760,1975};
int period_table[21];
//两只老虎
//int song_tone_table[32]={7,8,9,7,7,8,9,7,9,10,11,9,10,11,11,12,11,10,9,7,11,12,11,10,9,7,7,11,7,7,11,7};
//int song_long_table[32]={4,4,4,4,4,4,4,4,4,4,8,4,4,8,2,2,2,2,4,4,2,2,2,2,4,4,4,4,8,4,4,8};
//生日歌
int song_tone_table[24]={4,4,5,4,7,6,4,4,5,4,8,7,4,4,11,9,7,6,10,10,9,7,8,7};
int song_long_table[24]={2,2,4,4,4,8,2,2,4,4,4,8,2,2,5,4,5,8,2,2,4,4,4,8};
int key=0;
int m,n;

void main(void)
{

        WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  for(j=0;j<10;j++)
  {
          i+=PI/5;
          sin_table[j]=(int)((sin(i)+1)*2048);
  }
  sin_data_pr=&sin_table[0];

  for(j=0;j<20;j++)
  {
          period_table[j]=(int)(100000/key_table[j]);
  }

  DAC12_0CTL0 = DAC12IR + DAC12SREF_1 + DAC12AMP_5 + DAC12ENC + DAC12CALON+DAC12OPS;

  P5DIR=BIT1;
  P4DIR=BIT1;
  P5OUT&=~BIT1;

  TA1CCTL0 = CCIE;                          // CCR0 interrupt enabled

  TA1CCR0 = period_table[0];

  TA1CTL = TASSEL_2 + MC_2 + TACLR +TAIE;         // SMCLK, upmode, clear TAR


          __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, enable interrupts
          __no_operation();                         // For debugger

}


#pragma vector=TIMER1_A0_VECTOR
__interrupt void TIMER1_A0_ISR(void)
{
     P4OUT ^= BIT1;                            // Toggle P1.0
          DAC12_0DAT=*sin_data_pr++;

    if (sin_data_pr >= &sin_table[10])
            sin_data_pr = &sin_table[0];

    DAC12_0DAT &= 0xFFF;                    // Modulo 4096

    TA1CCR0 += period_table[song_tone_table[key]];
}


#pragma vector=TIMER1_A1_VECTOR
__interrupt void TIMER1_A1_ISR(void)
{
  switch(__even_in_range(TA1IV,14))
  {
    case  0: break;                          // No interrupt
    case  2: break;                          // CCR1 not used
    case  4: break;                          // CCR2 not used
    case  6: break;                          // reserved
    case  8: break;                          // reserved
    case 10: break;                          // reserved
    case 12: break;                          // reserved
    case 14:
            if(k++==song_long_table[m])
            {
                    k=0;
                    if(++m==24)
                            m=0;

                    DAC12_0DAT=0x000;
                    TA1CCTL0 &=~ CCIE;
                    if(++n==1)
                    {
                            n=0;
                            TA1CCTL0 = CCIE;
                            TA1CCR0 = period_table[song_tone_table[key++]];
                            if(key==24)
                                key=0;
            }

            }
             break;
    default: break;
  }
}

最新回复

这不就是两个定时器的中断嘛,估计是固定了进入中断的时间,具体要看看手册   详情 回复 发表于 2015-5-4 23:08
 
点赞 关注

回复
举报

1291

帖子

0

TA的资源

纯净的硅(中级)

沙发
 
这不就是两个定时器的中断嘛,估计是固定了进入中断的时间,具体要看看手册
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表