关于脉冲发送的问题?初学,恳求指点!!!
本帖最后由 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,然后就会执行中断了,那就会发脉冲了,不是吗? @zhangmangui 版主,帮帮我吧:( 本帖最后由 raoxianbin 于 2014-1-22 11:31 编辑
没用过这款芯片,但是感觉有点乱,1.中断里相应的中断标志位清除了吗?2,感觉那个SHOW 函数也有点乱 ,不知道你想一直发脉冲,和那个KEY有关吗,如果是和硬件没关系的话,感觉你就没必要把它放在死循环里面去,只要用定时器中断应该就可以吧,只要时间一到,自动就会去处理子函数 没用过也只能从代码角度看下。。 @airwill 按下1键就响个不停, 恐怕是有源蜂鸣器的问题. 脉冲停止了, 但停在开的状态, 就常响下去了 airwill 发表于 2014-1-22 13:18 static/image/common/back.gif
按下1键就响个不停, 恐怕是有源蜂鸣器的问题. 脉冲停止了, 但停在开的状态, 就常响下去了 ...
那要怎么办呢? 我看在函数
void Show(Uint16 i) 里面有个
BUZZ_OFF; //关闭蜂鸣器 //音乐停顿
完成关闭功能, 是不是定义有错呢? airwill 发表于 2014-1-22 15:42 static/image/common/back.gif
我看在函数
void Show(Uint16 i) 里面有个
BUZZ_OFF; ...
这个我差不多弄出来了是show函数中要在最后加一个key=0;要不然停不下来 airwill 发表于 2014-1-22 13:18 static/image/common/back.gif
按下1键就响个不停, 恐怕是有源蜂鸣器的问题. 脉冲停止了, 但停在开的状态, 就常响下去了 ...
它这个是无源的有源的要怎么样啊?有什么程序用到有源蜂鸣器了呢?
页:
[1]