打印

关于脉冲发送的问题?初学,恳求指点!!!

[复制链接]
1383|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
恬蔚|  楼主 | 2014-1-21 11:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhangmangui 于 2014-1-22 09:14 编辑

void Show(Uint16 i)
{
                        StopCpuTimer0();                                                   //停止计数
                        DISABLE_TIMER1_INT;                                           //不使能定时中断
                        ConfigCpuTimer(&CpuTimer0, 150, Musi);              //设置定时时间
                        StartCpuTimer0();                                                  //重启定时器
                        ENABLE_TIMER1_INT;                                           //使能定时中断
                        Delay(DT);                                                             //音乐节拍延时
                        StopCpuTimer0();                                                  //停止计数
                        DISABLE_TIMER1_INT;                                         //不使能定时中断
                        BUZZ_OFF;                                                          //关闭蜂鸣器            //音乐停顿        

}
// Prototype statements for functions found within this file.
interrupt void cpu_timer0_isr(void);


void main(void)
{
   InitSysCtrl();

   Buzz_Gpio_Init();

   DINT;

   InitPieCtrl();

// Disable CPU interrupts and clear all CPU interrupt flags:
   IER = 0x0000;
   IFR = 0x0000;

   InitPieVectTable();

// Interrupts that are used in this example are re-mapped to
// ISR functions found within this file.
   EALLOW;  // This is needed to write to EALLOW protected registers
   PieVectTable.TINT0 = &cpu_timer0_isr;


   EDIS;    // This is needed to disable write to EALLOW protected registers

// Step 4. Initialize the Device Peripheral. This function can be
//         found in DSP2833x_CpuTimers.c
   InitCpuTimers();   // For this example, only initialize the Cpu Timers

   ConfigCpuTimer(&CpuTimer0, 150, 50);


// to CPU-Timer 2:
   IER |= M_INT1;

// Enable TINT0 in the PIE: Group 1 interrupt 7
   PieCtrlRegs.PIEIER1.bit.INTx7 = 1;

// Enable global Interrupts and higher priority real-time debug events:
   EINT;   // Enable Global interrupt INTM
   ERTM;   // Enable Global realtime interrupt DBGM

   while(1)
   {
        //Read_KX(1);
                Read_KX(2);
                //Read_KX(3);
               
                //Read_KY(1);
                Read_KY(2);
                //Read_KY(3);
               
            Show(key);
   }

}


interrupt void cpu_timer0_isr(void)
{
   CpuTimer0.InterruptCount++;
   BUZZ_CLK_GENER;
   PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
在main主函数中执行show函数,为什么脉冲的发送不是连续的呢?只发声一下就没了,而且在重启DSP时,执行又是按下1键就响个不停,那个while函数不是死循环吗?就应该一直执行里面的程序呀,show函数执行了,就应该执行configcputimer,然后就会执行中断了,那就会发脉冲了,不是吗?

相关帖子

沙发
恬蔚|  楼主 | 2014-1-21 21:03 | 只看该作者
@zhangmangui     版主,帮帮我吧:(

使用特权

评论回复
板凳
raoxianbin| | 2014-1-22 11:20 | 只看该作者
本帖最后由 raoxianbin 于 2014-1-22 11:31 编辑

没用过这款芯片,但是感觉有点乱,1.中断里相应的中断标志位清除了吗?  2,感觉那个SHOW 函数也有点乱 ,不知道你想一直发脉冲,和那个KEY有关吗,如果是和硬件没关系的话,感觉你就没必要把它放在死循环里面去,只要用定时器中断应该就可以吧,只要时间一到,自动就会去处理子函数            没用过也只能从代码角度看下。。

使用特权

评论回复
地板
恬蔚|  楼主 | 2014-1-22 13:00 | 只看该作者

使用特权

评论回复
5
airwill| | 2014-1-22 13:18 | 只看该作者
按下1键就响个不停, 恐怕是有源蜂鸣器的问题. 脉冲停止了, 但停在开的状态, 就常响下去了

使用特权

评论回复
6
恬蔚|  楼主 | 2014-1-22 14:30 | 只看该作者
airwill 发表于 2014-1-22 13:18
按下1键就响个不停, 恐怕是有源蜂鸣器的问题. 脉冲停止了, 但停在开的状态, 就常响下去了 ...

那要怎么办呢?

使用特权

评论回复
7
airwill| | 2014-1-22 15:42 | 只看该作者
我看在函数
void Show(Uint16 i) 里面有个
   BUZZ_OFF;                                                          //关闭蜂鸣器            //音乐停顿        

完成关闭功能, 是不是定义有错呢?

使用特权

评论回复
8
恬蔚|  楼主 | 2014-1-22 16:01 | 只看该作者
airwill 发表于 2014-1-22 15:42
我看在函数
void Show(Uint16 i) 里面有个
   BUZZ_OFF;                                                 ...

这个我差不多弄出来了  是show函数中要在最后加一个key=0;要不然停不下来

使用特权

评论回复
9
恬蔚|  楼主 | 2014-1-22 16:14 | 只看该作者
airwill 发表于 2014-1-22 13:18
按下1键就响个不停, 恐怕是有源蜂鸣器的问题. 脉冲停止了, 但停在开的状态, 就常响下去了 ...

它这个是无源的  有源的要怎么样啊?有什么程序用到有源蜂鸣器了呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

147

帖子

1

粉丝