恬蔚 发表于 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

@airwill

airwill 发表于 2014-1-22 13:18

按下1键就响个不停, 恐怕是有源蜂鸣器的问题. 脉冲停止了, 但停在开的状态, 就常响下去了

恬蔚 发表于 2014-1-22 14:30

airwill 发表于 2014-1-22 13:18 static/image/common/back.gif
按下1键就响个不停, 恐怕是有源蜂鸣器的问题. 脉冲停止了, 但停在开的状态, 就常响下去了 ...

那要怎么办呢?

airwill 发表于 2014-1-22 15:42

我看在函数
void Show(Uint16 i) 里面有个
   BUZZ_OFF;                                                          //关闭蜂鸣器            //音乐停顿      

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

恬蔚 发表于 2014-1-22 16:01

airwill 发表于 2014-1-22 15:42 static/image/common/back.gif
我看在函数
void Show(Uint16 i) 里面有个
   BUZZ_OFF;                                                 ...

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

恬蔚 发表于 2014-1-22 16:14

airwill 发表于 2014-1-22 13:18 static/image/common/back.gif
按下1键就响个不停, 恐怕是有源蜂鸣器的问题. 脉冲停止了, 但停在开的状态, 就常响下去了 ...

它这个是无源的有源的要怎么样啊?有什么程序用到有源蜂鸣器了呢?
页: [1]
查看完整版本: 关于脉冲发送的问题?初学,恳求指点!!!