首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

AW32  音乐蜂鸣的问题[求助][求助]

AW32  音乐蜂鸣的问题[求助][求助]

大家好!
我用AW32的TPM1CH2定时器的通道2来做音乐蜂鸣。
但我遇到的问题是,TPM1的模值,在我的程序中是固定值0X64,用来做定时,也就是整个程序的时基。 而改变TPM1C2V,却不会产生不同频率的音乐蜂鸣。现在我用输出比较方式,由于不能改模值,所以蜂鸣只能输出一个音符,无法实现 1---7的音乐蜂鸣。
我的程序如下:
void InitialTPM1(void)
{TPM1SC = 0x0b; // 1 2 4 | 8 | 16 32 64 128
TPM1MODH = 0x00;
TPM1MODL = 0X64; //time1 period is 200us
TPM1SC = 0x4b;//53; //plus period is 2us
}

void InitialBuzzer(void)
{
TPM1C2SC_CH2IE=0;
TPM1C2SC = 0Xd4;//
TPM1C2VH = 0x00;
TPM1C2VL = 0x20;
TPM1C2SC_CH2IE=1;
}

我现在想用边沿PWM的方式来驱动蜂鸣,可现在即没有PWM波形输出,蜂鸣边声音都没有了。
void InitialBuzzer(void)
{
TPM1C2SC_CH2IE=0;
TPM1C2SC = 0XF4;//
TPM1C2VH = 0x00;
TPM1C2VL = 0x20;
TPM1C2SC_CH2IE=1;
}

大家有没有好办法?定时器2我也巳经用掉了。
谢谢!

[此贴子已经被作者于2007-11-15 14:09:57编辑过]

现在,用边沿PWM方式来驱动蜂鸣,也能有声音输出,但和以前一个只能是一个音符,无论如何改变TPM1C2V的值,都没作用,波形一样,声音也一样。一直是200US一个波形。好象PWM并没有根据TPM1C2V进行改变。
具体程序如下:
void InitialBuzzer(void)
{
TPM1C2SC_CH2IE=0; // 0 1 2 | 3 | 4 5 6 7
TPM1C2SC = 0x74;
TPM1C2VH = 0x00;
TPM1C2VL = 0x40; //time1 period is 200us
TPM1C2SC_CH2IE=1;
}

void interrupt INT_TPM1_CH2 (void) {

TPM1C2SC_CH2F = 0;
if(buzzer_number==0)
{
TPM1C2SC = 0x78;
buzzer_number=1;
}
else
{
TPM1C2SC = 0x74;
buzzer_number=0;
}
//TPM1C2VH = 0x00;
//TPM1C2VL = 0x64;
TPM1C2SC_CH2IE=1;
}
如果你用TPM的PWM功能的话,那么改变TPM1CV2就只能改变一个通道的占空比,而不能改变其周期。如果要改变周期的话,就要改变TPM的模数寄存器的值。
海纳百川  有容乃大
返回列表