AT91SAM9260EK-38k产生原理

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:

 

posted on 2016-10-11 15:31  嵌入式操作系统  阅读(359)  评论(0编辑  收藏  举报

导航