社区导航

 

搜索
查看: 1732|回复: 1
打印 上一主题 下一主题

[求助] msp430f6638下面的扬声器程序是如何进入中断的!

[复制链接]

15

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

跳转到指定楼层
楼主
发表于 2015-5-4 22:08 | 只看该作者 |倒序浏览 |阅读模式
#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;
  }
}
0

1366

TA的帖子

0

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

沙发
发表于 2015-5-4 23:08 | 只看该作者
这不就是两个定时器的中断嘛,估计是固定了进入中断的时间,具体要看看手册

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

关闭

站长推荐上一条 1/3 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( )

GMT+8, 2020-4-8 02:02 , Processed in 0.120025 second(s), 22 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表
送彩金的彩票平台799彩票 mg游戏送彩金无需申请 棋牌送彩金且可提现的网站 下载就送彩金的棋牌 可以免费送彩金的网站 那个棋牌平台送彩金最多 全讯网送彩金 送彩金棋牌游戏 澳门银河官网送彩金 免费送彩金40棋牌游戏