2410beep.c
上传用户:mhstny
上传日期:2022-08-05
资源大小:793k
文件大小:2k
源码类别:

微处理器开发

开发平台:

Unix_Linux

  1. #include "2410addr.h"
  2. #include "2410lib.h"
  3. #include "def.h"
  4. void Buzzer_Freq_Set( U32 freq );
  5. void Buzzer_Stop( void );
  6. void BUZZER_PWM_Test( void );
  7. void xmain(void)
  8. {
  9. ChangeClockDivider(1, 1);
  10. ChangeMPllValue(0xa1,0x3,0x1);
  11.    
  12. Port_Init();
  13. Uart_Select(0);
  14. Uart_Init(0, 115200);
  15. BUZZER_PWM_Test();
  16. while(1);
  17. }
  18. /****************************************************************************
  19. 【功能说明】蜂鸣器PWM测试
  20. ****************************************************************************/
  21. void BUZZER_PWM_Test( void )
  22. {
  23. U16 freq = 2000 ;
  24. Uart_Printf( "nBUZZER TEST ( PWM Control )n" );
  25.     Uart_Printf( "Press +/- to increase/reduce the frequency of BUZZER !n" ) ;
  26. Uart_Printf( "Press 'ESC' key to Exit this program !nn" );
  27. Buzzer_Freq_Set( freq ) ;
  28.     while( 1 )
  29.     {
  30. U8 key = Uart_Getch();
  31. if( key == '+' )
  32. {
  33. if( freq < 20000 )
  34. freq += 10 ;
  35. Buzzer_Freq_Set( freq ) ;
  36. }
  37. if( key == '-' )
  38. {
  39. if( freq > 11 )
  40. freq -= 10 ;
  41. Buzzer_Freq_Set( freq ) ;
  42. }
  43. Uart_Printf( "tFreq = %dn", freq ) ;
  44. if( key == ESC_KEY )
  45. {
  46. Buzzer_Stop() ;
  47. return ;
  48. }
  49. }
  50. }
  51. void Buzzer_Freq_Set( U32 freq )
  52. {
  53. rGPBCON = rGPBCON & ~(3<<0)|(1<<1);//set GPB0 as tout0, pwm output
  54. rTCFG0 = rTCFG0 & ~0xff|15; //prescaler = 15
  55. rTCFG1 = rTCFG1 & ~0xf|2;//divider = 1/8
  56. rTCNTB0 = (PCLK>>7)/freq;//rTCNTB0=PCLK/{(prescaler+1) * divider *freq}
  57. rTCMPB0 = rTCNTB0>>1; //占空比50%
  58. //disable deadzone, auto-reload, inv-off, update TCNTB0&TCMPB0, start timer 0
  59. rTCON = rTCON & ~0x1f|(0<<4)|(1<<3)|(0<<2)|(1<<1)|(1);
  60. rTCON &= ~(1<<1); //clear manual update bit
  61. }
  62. void Buzzer_Stop( void )
  63. {
  64. rGPBCON |= 1;
  65. rGPBCON = rGPBCON & ~3|1; //set GPB0 as output
  66. rGPBDAT &= ~1;//output 0
  67. }