蜂鸣器和PWM定时器编程实践2

来源:互联网 发布:mac硬盘安装助手0.3 编辑:程序博客网 时间:2024/06/13 22:29

《朱老师物联网大讲堂》学习笔记

学习地址:www.zhulaoshi.org


以下代码为朱老师课堂上所写

#define GPD0CON(0xE02000A0)#define TCFG0(0xE2500000)#define TCFG1(0xE2500004)#define CON(0xE2500008)#define TCNTB2(0xE2500024)#define TCMPB2(0xE2500028)#define rGPD0CON(*(volatile unsigned int *)GPD0CON)#define rTCFG0(*(volatile unsigned int *)TCFG0)#define rTCFG1(*(volatile unsigned int *)TCFG1)#define rCON(*(volatile unsigned int *)CON)#define rTCNTB2(*(volatile unsigned int *)TCNTB2)#define rTCMPB2(*(volatile unsigned int *)TCMPB2)// 初始化PWM timer2,使其输出PWM波形:频率是2KHz、duty为50%void timer2_pwm_init(void){// 设置GPD0_2引脚,将其配置为XpwmTOUT_2rGPD0CON &= ~(0xf<<8);rGPD0CON |= (2<<8);// 设置PWM定时器的一干寄存器,使其工作rTCFG0 &= ~(0xff<<8);rTCFG0 |= (65<<8);// prescaler1 = 65, 预分频后频率为1MHzrTCFG1 &= ~(0x0f<<8);rTCFG1 |= (1<<8);// MUX2设置为1/2,分频后时钟周期为500KHz// 时钟设置好,我们的时钟频率是500KHz,对应的时钟周期是2us。也就是说每隔2us// 计一次数。如果要定的时间是x,则TCNTB中应该写入x/2usrCON |= (1<<15);// 使能auto-reload,反复定时才能发出PWM波形//rTCNTB2 = 250;// 0.5ms/2us = 500us/2us = 250//rTCMPB2 = 125;// duty = 50%rTCNTB2 = 50;rTCMPB2 = 25;// 第一次需要手工将TCNTB中的值刷新到TCNT中去,以后就可以auto-reload了rCON |= (1<<13);// 打开自动刷新功能rCON &= ~(1<<13);// 关闭自动刷新功能rCON |= (1<<12);// 开timer2定时器。要先把其他都设置好才能开定时器}


0 0