S3C2440之PWM

来源:互联网 发布:java实现排序算法 编辑:程序博客网 时间:2024/05/16 01:48
#include "uart.h"#include "stdlib.h"//MS延时void delay( unsigned int time){unsigned int i,j;for ( i=0; i<time; i++){  for(j=0;j<30000;j++)  {  }  }      }void pwm_init(unsigned int tcnt,unsigned int tcmp){/*//中断配置rSRCPND |= (0x1<<10); //TIMER0rINTMOD &= ~(0x1<<10);rINTMSK &= ~(0x1<<10);rINTPND |= (0x1<<10);pISR_TIMER0= (U32)TIMER0_IRQ;*///定时器参数配置rTCON &= ~(0x1);//关闭定时器rTCFG0 |= 0x7c;//125分频 124+1rTCFG1 |= 0x2;//TIMER0 8分频rTCNTB0 = tcnt;//TIMER0   0xc350 50000,0x3e8 1000,0x1f4 500rTCMPB0 = tcmp;//25 50%   0x61a8 25000rTCON |= 0x1<<1;//手动更新TIMER0->TCNT0rTCON &= ~(0x1<<1);//关闭手动更新rGPBCON |= 0x2;//定时器PWM输出引脚连接蜂鸣器rTCON |= (0x1<<3|0x1<<2|0x1);}/*//定时器中断函数void __irq TIMER0_IRQ(void){rSRCPND |= (0x1<<10);rINTPND |= (0x1<<10);uart_printf("timer0_irq");}*/void choose_speak(void){char dat;static unsigned int *array = NULL;static int flag;dat = uart_getchar();uart_putchar(dat);}/*    播放蜂鸣器参数设置:vo ->低、中、高音的选择 cnt->dou/rui/mi/fa/so/la/xi tim->每个频率响的时间buzzer数组存的是频率的周期voice 数组存的是低电平的占空比!*/void start_buzzer(int vo,int cnt,unsigned int time){//close_buzzer();static unsigned int buzzer[][8]={{191,170,152,143,127,114,101},//低0/1/2/3/4/5/6  {96,86,76,72,64,57,50},//中/7/8/9/10/11/12/13  {48,43,38,36,32,28,25}};//高14/15/16/17/18/19/20static unsigned int voice[][8]={{160,140,120,110,100,90,80},{80,70,60,56,48,41,36},{38,34,30,28,24,22,20}};pwm_init(buzzer[vo][cnt],voice[vo][cnt]);//重新配置定时器数据delay(time);close_buzzer();}//关闭定时器,不在输出PWMvoid close_buzzer(void){rTCON &= ~(0x1);rGPBCON &= ~(0x3);rGPBCON |= 0x1;rGPBDAT &= ~(0x1); }

0 0
原创粉丝点击