zoukankan      html  css  js  c++  java
  • TQ2440使用定时器产生PWM,控制蜂鸣器发声


    GPBCON:引脚配置寄存器
    GPBUP:端口使能上拉寄存器                              
    GPBDAT:端口数据寄存器
    TCFG0:配置两个8位预分频器
    TCFG1:5路多路选择器和DMA模式选择寄存器
    TCNTB0:  定时器0计数缓冲寄存器
    TCMPB0: 定时器0比较缓冲寄存器
    TCON:     定时器控制寄存器
    2440有两个8位预分频器0,1共用一个2,3,4共用另外一个,每个定时器都有一个可以生成5种不同分频信号(1/2,1/4,1/8,1/16和TCLK)的时钟分频器。
    8位预分频器是可编程的,并且按存储在TCFG0和TCFG1寄存器中的加载值来分频PCLK。
    定时器输入时钟频率由TCFG0与TCFG1决定
    定时器输入时钟频率 =  PCLK/(预分频值+1)/(分频值);
    预分频值 = 0~255;
    分频值 = 2,4,8,16
    TCNTB0包含了一个当使能定时计数器的初始值。TCMPB0包含了一个与TCNTB0相比较的初始值。当递减计数器到达0时,产生定时器中断请求通知CPU定时器操作已经完成。
    TCON 定时器控制寄存器 定时器0的自动重载开启或关闭,TOUT0变换极性,手动更新TCNTB0与TCMPB0的值,启动/停止定时器。
    GPBCON,GPBUP,GPBDAT这些寄存器只是为了设置GPBDAT的最低位为第二功能。


    输出频率计算:fout = PCLK/(预分频值+1)/(分频值)/计数个数
    根据需要的频率反推计数个数 计数个数= PCLK/(预分频值 +1)/分频值/fout
    其中 PCLK 为 AHB BUS时钟50M
    预分频值为0~255 由TCFG0设置
    分频值为2、4、8、16几种,分别对应的TCFG1 = 1、3、7、15
    计数个数由TCNTB0确定

    以下是一段例程:
    /***************************************************************************/
    #include<S3C2440.h>
    int main(){
          int freq = 100; //想要获得的频率
    unsigned int PCLK = 50000000; 


        GPBCON &= ~3; //set GPB0 as tout0, pwm output
    GPBCON |= 2;

    TCFG0 &= ~0xff;    
    TCFG0 |= 15; //prescaler = 15+1


    TCFG1 &= ~0xf;
    TCFG1 |= 2; //mux = 1/8




    TCNTB0 = (PCLK>>7)/freq;//TCNTB0 = PCLK/(预分频值 +1)/分频值/fout  其中预分频值+1 = 16 ,分频值 = 8 ,共右移7位
    TCMPB0 = TCNTB0>>1; // 50%


    TCON &= ~0x1f;
    TCON |= 0xb;    //disable deadzone, auto-reload, inv-off, update TCNTB0&TCMPB0, start timer 0
    TCON &= ~2;    //clear manual update bit
    return 0;
    }
    /***************************************************************************/



  • 相关阅读:
    js调试工具Console命令详解
    tomcat如何正确的开启远程调试功能
    Cleanup failed to process the following paths错误的解决
    MySQL查看SQL语句执行效率
    MYSQL 的静态表和动态表的区别, MYISAM 和 INNODB 的区别
    JAX-RS之queryparam、PathParam、DefaultValue、FormParam、Context、RestController等
    C语言中的printf函数的输入输出问题
    leetcode 21.Merge Two Sorted Lists ,java
    初识C++ 中的STL
    leetcode 58.Length of Last Word
  • 原文地址:https://www.cnblogs.com/libing64/p/2878747.html
Copyright © 2011-2022 走看看