9260内部有5个内部计数器,分别为TIMER_CLOCK1 --- TIMER_CLOCK5。通过这5个时钟可以为各种内部设备提供时钟基准。

其中,红外发射38K方波,是通过CLOCK1计数产生。

配置寄存器如下

//选择TC通道

__sys_reg(AT91_PMC_PCER) = 1 << AT91SAM9260_ID_TC1;

//设置对外接口

at91_set_A_periph(AT91_PIN_PC7, 0);

TC_CCR(tc1_io_base) = AT91_TC_CLKDIS;

TC_CMR(tc1_io_base) =

//挑选时钟源

AT91_TC_TIMER_CLOCK1

//选择waveform

| AT91_TC_WAVESEL_UP_AUTO

//选择RC比较器是对外接口清零

| AT91_TC_BCPC_CLEAR

//选择RB比较器是对外接口置位

| AT91_TC_BCPB_SET

//设置为waveform

| AT91_TC_WAVE

//the last num set the port tiob to output

| AT91_TC_EEVT_XC0;

TC_IDR(tc1_io_base) = ~0;

//确定RC计数器的值

TC_RC(tc1_io_base) = MAIN_CLK / 2 / 38000;

//确定RB计数器的值

TC_RB(tc1_io_base) = MAIN_CLK / 2 / 76000;

//时钟使能

TC_CCR(tc1_io_base) = AT91_TC_CLKEN | AT91_TC_SWTRG;

因此,方波的频率多少取决于MAIN_CLK,即系统允许的频率。

2.  25K方波的产生

1.  之前的驱动程序采取把系统允许频率MCK写死的方式,进行处理,即MCK=99328000Hz,算出的RC=1306, RB=RC/2。NOTE:占空比1/2

2.  因此,如果核心板是降频处理的话,主频是665600000。如果搭配之前的驱动,即RC= 2*RB = 1306,算出的输出的方波即25KHz。

3.  如果更新最新的驱动,MCK是根据系统的寄存器配置动态生成的话,驱动会自动调整RB RC 值,以匹配38K PWM波的产生。

3.  附录A

TC Channel mode register:

Meaning:

AT91_TC_TIMER_CLOCK1 |

TIMER_CLOCK1 =  MCK/2

AT91_TC_WAVESEL_UP_AUTO |  2<<13

WAVSEL = 10

AT91_TC_BCPC_CLEAR | 2<<26

RC Compare Effect on TIOB = CLEAR

AT91_TC_BCPB_SET |    1<<24

RB Compare Effect on TIOB = SET

AT91_TC_WAVE |  1<<15

WAVEFORM

AT91_TC_EEVT_XC0   1<<10

TIOB  output

Example:

Interpretation:

AT91SAM9260EK-38k产生原理的更多相关文章

  1. 奇异值分解(SVD)原理与在降维中的应用

    奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域.是 ...

  2. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  3. 线性判别分析LDA原理总结

    在主成分分析(PCA)原理总结中,我们对降维算法PCA做了总结.这里我们就对另外一种经典的降维方法线性判别分析(Linear Discriminant Analysis, 以下简称LDA)做一个总结. ...

  4. [原] KVM 虚拟化原理探究(1)— overview

    KVM 虚拟化原理探究- overview 标签(空格分隔): KVM 写在前面的话 本文不介绍kvm和qemu的基本安装操作,希望读者具有一定的KVM实践经验.同时希望借此系列博客,能够对KVM底层 ...

  5. H5单页面手势滑屏切换原理

    H5单页面手势滑屏切换是采用HTML5 触摸事件(Touch) 和 CSS3动画(Transform,Transition)来实现的,效果图如下所示,本文简单说一下其实现原理和主要思路. 1.实现原理 ...

  6. .NET Core中间件的注册和管道的构建(1)---- 注册和构建原理

    .NET Core中间件的注册和管道的构建(1)---- 注册和构建原理 0x00 问题的产生 管道是.NET Core中非常关键的一个概念,很多重要的组件都以中间件的形式存在,包括权限管理.会话管理 ...

  7. python自动化测试(2)-自动化基本技术原理

    python自动化测试(2) 自动化基本技术原理 1   概述 在之前的文章里面提到过:做自动化的首要本领就是要会 透过现象看本质 ,落实到实际的IT工作中就是 透过界面看数据. 掌握上面的这样的本领 ...

  8. CRC、反码求和校验 原理分析

    3月份开始从客户端转后台,算是幸运的进入全栈工程师的修炼阶段.这段时间一边是老项目的客户端加服务器两边的维护和交接,一边是新项目加加加班赶工,期间最长经历了连续工作三天只睡了四五个小时的煎熬,人生也算 ...

  9. 菜鸟学Struts2——Struts工作原理

    在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...

  10. Objective-C中block的底层原理

    先出2个考题: 1. 上面打印的是几,captureNum2 出去作用域后是否被销毁?为什么? 同样类型的题目: 问:打印的数字为多少? 有人会回答:mutArray是captureObject方法的 ...

随机推荐

  1. [转]Java中Runtime.exec的一些事

    0 预备知识 1 不正确的调用exitValue 2不正确的调用waitFor 3 一种可接受的调用方式 4 调用认为是可执行程序的时候容易发生的错误 5 window执行的良好示例 6 不良好的重定 ...

  2. easyui中combobox的值改变onchang事件

    今天在公司里,那jquery中的easy-ui-里面的combobox,真的郁闷死了! 把郁闷的事情记下来,下次就不会犯错了! 首先,肯定少不了,引入jquery的js文件!请大家注意了! 下面是代码 ...

  3. jquery判断选择元素是否存在

    有时候我们需要对jquery选择器选中的元素进行判断是否存在,如果存在才进行某些操作,不存在就不进行,那么如何判断元素是否存在,代码如下: //判断是否存在特定ID值的元素 ){ alert(&quo ...

  4. JVM调优——之CMS GC日志分析

    最近在学习JVM和GC调优,今天总结下CMS的一些特点和要点,让我们先简单的看下整个堆年轻代和年老代的垃圾收集器组合(以下配合java8完美支持,其他版本可能稍有不同),其中标红线的则是我们今天要着重 ...

  5. 源码解析-EventBus

    示例使用 时序图 源码解读 EventBus 使用 官网定义:EventBus 是一个使用 Java 写的观察者模式,解耦的 Android 开源库.EventBus 只需要几行代码即可解耦简化代码, ...

  6. NGINX宏观手记(变量|配置)

    前言 任何一个工具都有它的灵魂所在,作为一个PHP程序员,我们可能仅仅使用了它的一小部分,这篇文章让你更加了解Nginx,本章大多都是总结.翻译.整理 ,希望你可以知道nginx不仅仅是PHP的附属品 ...

  7. SqlServer四种排序:ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()

    首先,我们创建一些测试数据. if OBJECT_ID('Tempdb.dbo.#Tmp') is not null drop table #Tmp create table #Tmp ( name ...

  8. express中的会话存储方式

    会话存储需要用的express-session包 app.use(require('express-sessiion')()) express-session接收带有如下选项的配置对象: key;存放 ...

  9. blocking

    package blockingtest; /** * Hello world! */public class Sync implements Runnable { int n; public sta ...

  10. C++11 构造函数的改动

    一.继承构造函数 继承构造函数的引入原因:如果基类的构造函数很多,那么子类的构造函数想要实现同样多的构造接口,必须一一调用基类的构造函数,有点麻烦. 于是乎:C++11引入继承构造函数,子类可以通过使 ...