历史上的今天
今天是:2024年10月14日(星期一)
2021年10月14日 | S3C2440开发板裸机程序系列05—定时器PWM
2021-10-14 来源:eefocus
1. PWM概述
定时器0、1、2和3具有PWM功能。TCNTBn是计数初值,定时器开启后,减1计数。TCMPBn的值是用于比较的,初始值是0,所以TCNTBn减1计数到0时,就等于TCMPBn,此时TOUTn就会翻转。
所以,TCMPBn的值是用于脉宽调制PWM的,即当递减计数器(确切说是TCNTn)的值与定时器控制逻辑中的比较寄存器的值(确切说是TCMPn)相等时,控制逻辑改变输出电平。

TOUT0即是GPB0,GPB0接蜂鸣器,因此可以利用Timer0的PWM功能实现蜂鸣器发声。

如上图可知,需要把GPBCON[1:0] 设置为2。

关于TCON[2] :该位只是定义TOUT0的极性是否反相。只要TCNT0=TCMP0,则TOUT0就会翻转,与TCON[2]无关。
在Timer1定时器程序基础上改进。
timer.c 增加Timer0初始化
void Timer0_Init(void)
{
rGPBCON &= ~(3<<0);
rGPBCON |= (2<<0);
rTCFG0 &= ~(0xFF);
rTCFG0 |= 99; //Prescaler0 = 99
rTCFG1 &= ~(0xF);
rTCFG1 |= 2; //MUX0 = 1/8
rTCNTB0 = 62500; //Timer0 1sec中断1次
rTCMPB0 = rTCNTB0>>1;
rTCON |= (1<<1);
rTCON &= ~(1<<1);
rTCON |= (0xd); //Timer0 on. 0x9--same effect
}
Main.c 修改如下:
int Main()
{
int flag = 0;
Led_Init();
Key_Init();
// Beep_Init();
Timer1_Init();
Timer0_Init();
while(1)
{
if(rSRCPND & (1<<11)){
flag = !flag;
rSRCPND |= (1<<11);
}
if(1==flag){
LED01_ON;
// Beep_On();
}else{
LED01_OFF;
// Beep_Off();
}
}
return 0;
}
2. 按键控制蜂鸣器以不同频率发声
改进串口函数功能,增加发送单个字符、发送字符串功能函数。其中,发送字符串函数利用了可变参数编程技术。
当按”+”时频率增大,按”-”时频率减小。
Main.c
int Main()
{
unsigned char a;
Uart0_Init(115200);
Beep_PWM_Test();
return 0;
}
史海拾趣
|
SAA7113的LLC应该是每个像素点的同步信号,请问SAA7113的LLC输出的信号是方波还是其他什么波形?我用的时候,出来的波形是锯齿波,感觉不对?有谁用过,帮我确认一下!… 查看全部问答> |
|
Symbian开发内容介绍热线:010-51292078 021-51875830 0755-61280252 传真:021-62450161 010-62475416业务手机:15921673576曙海培训网站:http://www.51qianru.cn曙海培训曙海培训pads培训Cadence培训Allegro培训<a href=\" ...… 查看全部问答> |
|
俺要把一个跑在Windows CE(ARM)上的程序移植到Windows CE(MIPS)上去。 现在已经可以编译链接成功了,但是在Windows CE(MIPS)上一执行exe文件就报错,错误是“找不到($俺的程序名)或它的某一个组件。请确认路径和文件名正确并且所需要的库全部可用 ...… 查看全部问答> |
|
想找omnivision的图像传感器,但是代理商都要求很大的批量才行,我只需要几片,该怎么办呀? 在学校,做东西的时候需要几片CMOS图像传感器,现在选定的是omnivision的ov7740,找了很多代理商,但是都要求要一个包装的才能订货,也就是1700片左右,我的天啊,我哪里能承受地起,现在我该怎么办呢? 之前选定的是cypress赛普拉斯的CMOS图像传 ...… 查看全部问答> |
|
wince5.0 nk.bin大于32M不能保存到NANDFLASH,因为进入CE后后面的32M被格式化了(NANDFLASH总共64M),请问怎么才能保存更大的NK.BIN?我想从48M的位置开始格式化,怎么才能做到?… 查看全部问答> |
|
在读rtt的文档,发现0.3还没有加入yaffs的说,打算在0.4x里加入来?我现在想用0.3加上yaffs有什么办法? [ 本帖最后由 bigmoister 于 2011-3-6 22:25 编辑 ]… 查看全部问答> |
|
看了STM8的触摸按键库,没耐心看下去,就自己写了一个简易版的单触摸按键程序,经过测试,效果还不错,和大家分享一下,有不足之处,大家讨论 简单说下硬件电路,PD6为触摸按键输入,PG1为测试用LED,PA6,PB7为灵敏度微调输入口 ,用的是500K ...… 查看全部问答> |




