本帖最后由 shanan 于 2017-3-5 13:16 编辑
代码来源于知名的elm-chan.org,在国内已经有前辈把它移植到ATmega8上,被我偶然看到,它的效果深深吸引了我。
因为权限问题,我就不发链接了。
具体原理,请自行搜索相关帖子研究,关键词:有简单和_弦效果的音乐发生器。
我把代码整理一下,关键的中断程序的汇编代码都改为C语言了,便于移植到其他平台。
代码运行在各种平台的效果如下,仅作参考:
编号 | 芯片 | 时钟 | IDE | 优化等级 | 中断执行 | 和弦数量 | 1 | IAP15W4K58S4 | 30Mhz | UV4 | Level 8
Favor speed | 26us | 2 | 2 | ATMEGA128A | 16MHz | IAR | Level High
Speed | 26us | 6 | 3 | STM8S103F3P | 16MHz | IAR | Level High
Speed
No size constraint | 17us | 2 | 4 | STM32F103RCT6 | 24MHz | UV5 | Level 0
Optimize for Time | 22us | 6 |
中断执行测试方法:在进入中断时将某管脚置位,然后退出中断时将管脚复位,用逻辑分析仪对该管脚采样得出。
和弦数量最大为6,必须保证32KHz执行一次中断,此时的和弦数量才是有效的。
评价:
1.最佳性价比:STM8S
理由:本次使用的开发板中,STM8S是最为廉价的。
我比较疑惑的是测试STM8S时,当和弦数量设置从2到3时,中断执行时间急剧增大,从17us增大到34us,无法播放,这个性能让人感到失望,或许是我有些设置不对。
2.最努力奋斗:STC15
理由:使用了接近工作极限的频率,再往上就得输入某人的电话号码了!!!
广告总是写着比以前的快多少,但从来不提MIPS,本次测试结果显示,革命尚未成功啊!
3.最突出表现:AVR
理由:舍我其谁。
因为原作是汇编,我阅读AVR的汇编后改写为C语言的,AVR的汇编指令编写的效率要比51高得多了,而且AVR丰富的寄存器真是极大的优势。
4.特邀表演嘉宾:STM32
STM32在这里表示毫无压力。
测试硬件:
资源:
国内前辈的资料:
**_487453.rar
(1.04 MB)
在这里AVR的效果录音:
AVR录音.rar
(1008.78 KB)
STC15:
STC15_MusicBox_HEX.rar
(4.76 KB)
STC15_MUSIC_BOX_SRC.rar
(7.57 KB)
PWM1-P1.0, PWM0-P1.1 接喇叭8欧姆0.5W,5V时需要串联2个33欧电阻
STM8S:
STM8_MUSIC_BOX_HEX.rar
(4.88 KB)
STM8S_MUSIC_BOX_USER.rar
(7.35 KB)
PC3(TIM1-CH3) & PC4(TIM1-CH4) 接喇叭8欧姆0.5W,5V时需要串联2个33欧电阻
AVR:
AVR_MusicBox_HEX.rar
(4.8 KB)
AVR_MUSIC_BOX_SRC.rar
(7.17 KB)
OC1A-PB5, OC1B-PB6 接喇叭8欧姆0.5W,5V时需要串联2个33欧电阻
STM32F:
STM32_MUSIC_BOX_HEX.rar
(7.39 KB)
SM32_MUSIC_BOX_USER.rar
(8.6 KB)
SM32_MUSIC_BOX_MAIN.rar
(60.48 KB)
PB6(TIM4_CH1) & PB7(TIM4_CH2) 接喇叭8欧姆0.5W,串联2个33欧电阻
Have fun!
|