找回密码
 注册
关于网站域名变更的通知
查看: 1043|回复: 3
打印 上一主题 下一主题

ATMEL SAM3X 芯片定时器通道2 通道3怎么设置

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-5-5 09:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
ATMEL SAM3X 芯片定时器通道2 通道3怎么设置
4 ~6 \( a7 N$ Z
* V+ c/ n. i: _- i- G各位大神,当我使用atmel的SAM3x8E芯片设置定时器做1s定时实验时 使用TC0通道0时可以实现功能,但使用TC0的其他通道或是使用TC1和TC2两个定时器都无法实现功能是怎么回事?
. ]( m8 q( \- L8 ]& ]; w以下是我写的代码 其中TC0可以实现功能,TC2却无法实现功能% }3 O- ]0 z; F
#include "sam3xa.h"
3 o- l, K) A" @#include "header.h") @; @# O9 `4 h9 [: C& Y1 n/ L
void Init_output(Pio *p,uint32_t pio_pin)% V, a7 k7 {& F, T
{
( P6 F! D0 Y0 {; }    PMC->PMC_PCER0=1<<ID_PIOB;1 ^; T$ H; e1 L! P

+ r( ^1 x6 y* S    p->PIO_PER=pio_pin;" P% l, `9 U- G, X4 H! ~
   
* L2 w; H0 R+ Q6 k   
) W9 q0 r( r0 F4 @: z+ j   
' u) P: D6 F: ~/ G    p->PIO_OER=pio_pin;  4 G) a: f) g2 I
   
+ M! M7 w& M8 `/ p: ~6 ?6 X& `* }7 e4 W! X; V% R
   
% l7 \4 W3 b! [/ T2 ^  Y, {/ `    3 m( C& i  c( Z8 [: L
    p->PIO_PUER=pio_pin;2 u7 c+ V! `; {/ [* l
% I2 T; X; d1 D8 O. D
   
2 `4 |% H# z; Z5 D- G}
; r2 s% S5 b" V; Z9 j: t( gvoid Init_tc(void)
( o2 X4 k: E6 ^% K{' a9 X# h2 z% Z! D) E& p
   
' w; i$ h# S# k6 ?, L5 q0 \) T        Init_output(PIOB,PIO_PB20);
. r4 c2 s/ s. E9 [% T7 J' t) j  D0 a9 S1 z( @
2 e+ o& d$ q: ]5 r, I; `0 m
        PMC->PMC_PCER0=(1UL<<ID_TC0);  Q1 h. s2 l" d5 {5 O9 }( J
       % @1 }) P* K# @/ M2 ~
        
/ r. R* C5 q" S4 ]    TC0->TC_CHANNEL[0].TC_CMR=TC_CMR_WAVE    //波形模式
' J4 J, @. k  A' ^1 h) F* k0 o# M4 Q                        |TC_CMR_TCCLKS_tiMER_CLOCK4    //时钟4,:MCK/1287 }7 l; M3 [4 `$ A
                                  ) o9 o4 f2 W. |3 I
                  |TC_CMR_WAVSEL_UP_RC;   
, g! w3 s; }4 p7 o" ]+ G# q4 ], k/ f* p5 Z
       TC0->TC_CHANNEL[0].TC_CCR=TC_CCR_CLKEN|TC_CCR_SWTRG;//时钟使能 ,软件控制) z) x+ f) l; B% _$ |, S
    ; J3 L+ p  U+ D9 s# j1 b
        
4 J4 ^1 f' Z1 F3 d% Q7 U    //波形仅上升RC比较时触发
  l, D5 W9 J- y; A# R' @3 q$ S0 _; x2 N    /*设置RC产生中断的时间*/
; c& o1 U4 Z8 R    //TC0->TC_CHANNEL[0].TC_RC=TC_RC_RC(656250);//1s定时7 V% J  b7 s- m1 b$ g
        
9 a, b: s' K( W' i4 u        TC0->TC_CHANNEL[0].TC_RC=TC_RC_RC(600100);//(655360);//定时- F, w- z1 x. ]1 O# Z
        TC0->TC_CHANNEL[0].TC_SR;
7 d% f) R( H# X  d. ^8 c2 B        
: \5 G$ j$ V6 s+ t9 R9 o    TC0->TC_CHANNEL[0].TC_IER=TC_IER_CPCS;//RC比较时产生中断! L- d/ {0 k+ K
   
; w$ L2 ~! J- \0 `2 c$ M    /*使能TC0中断*/
/ l* M9 J3 `" q+ Z) P    NVIC_DisableIRQ(TC0_IRQn);
2 Q" n5 e! T8 N7 L    NVIC_ClearPendingIRQ(TC0_IRQn);
1 V  k* }/ S2 ^1 _6 t    NVIC_SetPriority(TC0_IRQn,1);
$ _# v# j3 h/ S5 H1 u% z  u    //NVIC_EnableIRQ(TC0_IRQn);+ _8 |: ~1 Q& ?0 l
    NVIC->ISER[0]=1<<TC0_IRQn;
% A, n7 ~6 ~$ q6 K/ l! Q    6 g4 e; s! t1 w0 t
    , C2 @- X( ~- w# t4 h
}5 z* [" @9 `; h: f/ H: l. ?
void TC0_Handler(void)* m( F7 E1 X% o3 d+ T, o
{8 N- N( x9 U2 h7 u: C
  uint8_t status = TC0->TC_CHANNEL[0].TC_SR;
! g# z' a' b6 h& d/ A8 }$ @& E3 `+ P9 Y. z3 e$ P1 {3 E
    /* 判断中断是否为RC比较触发的 */  b) `9 ~6 m, p! Z& X3 c
    if (status & TC_SR_CPCS)
4 H7 P/ v( L5 _        {( P8 w  q8 Y: e
          if ((PIOB->PIO_ODSR &PIO_PB20))+ C5 q( ~0 g# @7 D, p. _
        {
; _& c* l- y% r' Z( p- Q0 [/ l            PIOB->PIO_CODR = PIO_PB20;
+ Y, b, z( J5 g6 d/ L  W                        
. P2 l* ?8 j7 p% K! e5 y6 o5 c        }7 g, o3 i! E  O. u" k: }9 n
        else1 r* |# f! {6 U( r  }' ?3 L
        {
. Y8 Y  d  f3 A& R/ d            PIOB->PIO_SODR = PIO_PB20 ;; Z- D2 T7 y8 B1 l1 X# v; r" n% ?) R
        }
* Y! K& O7 s  b) r3 _        }  D' @* `- P5 Q8 d+ f3 z
        
5 L7 H# Z9 _* x# ~( D, I6 l}
4 \9 _# B0 ~: y, e) \2 P0 {  [$ Z% U, p/ o% K  m
void Init_tc2(void)
% q3 A* C* x! H! Z. ]$ f{
3 Z0 s! K6 T1 P, j   
3 u9 Y8 d6 U* n% R6 Y! p" X' T
( e* z/ n( Y' S; `$ c$ S        ' m2 H9 s, n6 g$ K* {
        Init_output(PIOB,PIO_PB18);4 C% s' \* P* P
  
0 M7 I1 ~5 E" N( Z& Y. ]1 m7 e0 k
        PMC->PMC_PCER0=(1UL<<ID_TC2);
8 h7 @$ g  `6 ^7 v6 y        ( B# B/ h# Q$ w$ D) J
        
' w! C2 `7 w9 Y: l  V2 r7 b, D    TC2->TC_CHANNEL[0].TC_CMR =TC_CMR_WAVE    //波形模式
0 j0 M; Q& s$ \; }9 `                                  |TC_CMR_BURST_NONE $ a2 E( }  ?" j
                        |TC_CMR_TCCLKS_TIMER_CLOCK3    //时钟4,:MCK/128
& C& V0 [/ ]- B4 a. x                  |TC_CMR_WAVSEL_UP_RC;    //波形仅上升RC比较时触发, {+ g/ x) C7 A- B4 r

3 S* ~9 i' f" G            
$ i$ J. `) ?1 c. k) k3 H: ]* S        TC2->TC_CHANNEL[0].TC_RC=TC_RC_RC(655360);//定时0 Z1 A' a+ S0 K* g& O" N
    TC2->TC_CHANNEL[0].TC_IER=TC_IER_CPCS;//RC比较时产生中断
: \3 ^2 B0 u8 M0 f    TC2->TC_CHANNEL[0].TC_CCR=TC_CCR_CLKEN|TC_CCR_SWTRG;//时钟使能 ,软件控制
1 y* E  u4 |3 Y( x
* V6 l8 |  J: i" J$ b    2 e  U( |0 o7 M. ~$ j
    /*使能TC2中断*/+ p% o7 {% B; E& p# a/ W1 N; }
    NVIC_DisableIRQ(TC2_IRQn);
/ _5 v, X9 F, }5 g) d3 Z    NVIC_ClearPendingIRQ(TC2_IRQn);
' b0 v& [$ E' x/ J3 |  H* e    NVIC_SetPriority(TC2_IRQn,0);
  }: c+ J. N) J; k1 k    NVIC_EnableIRQ(TC2_IRQn);
( B9 {1 O% W# _, k7 Q2 k! J: ^       // NVIC->ISER[0]=1<<TC2_IRQn;
! q9 B- J0 S$ ^3 U4 M    9 O- m# `& t$ A) G: |/ N% x) d. H
}3 M/ X; Q' p+ L. N% U
//int n=0;3 Y+ Q6 G! Q. d. {
void TC2_Handler(void)  E( c1 [% g" @6 Z9 g4 `2 v
{4 f# O5 b" }) R+ b) {* b% `
    uint8_t status = TC2->TC_CHANNEL[0].TC_SR;6 Z+ w) y( ~2 V4 c
+ g% T  u4 S+ ]# @# T4 _) g
    /* 判断中断是否为RC比较触发的 */
7 X5 F' P, h+ b6 Q3 F    if (status & TC_SR_CPCS)# b& W" E- P+ c* t9 |& d
    {
# y9 z6 C% }1 A$ f( l( \" p8 k1 E- \' B7 B! M, m
               & A" U" N( ?# p9 x4 u/ r
            PIOB->PIO_SODR = PIO_PB18;( O0 i4 l. M' |" n
          Y# W. G7 f* V# x1 f3 X' B
    }
, [: k% b: H) _) t  e) U+ Q        PIOB->PIO_SODR = PIO_PB18;. k, G: L/ O3 V+ @* i
      
+ B9 ]2 ^. a& s6 R) D8 F) x$ R        4 R, \, u0 O# S7 b; k  n
}. U7 O1 P1 _: _8 F
* U; [1 Y* [4 b" V4 ^& d

该用户从未签到

2#
发表于 2019-5-5 10:00 | 只看该作者
没玩过这个片子,我用的sam4s,给你我的rtt,参考一下,中间用的几个函数,你看看官方的库函数吧3 p' `  l. f0 C  y2 K4 w
void configure_rtt(uint32_t u32_mdata)
! h5 j- P7 X1 G" I$ S{& g6 V( v6 G6 H! j
        uint32_t ul_previous_time,u32msdata;2 P) w. [4 Z3 G
        u32msdata = (uint32_t)(u32_mdata * 32.768);
$ j/ u3 R4 R( n6 ?        /* Configure RTT for a 1 second tick interrupt */: w- l5 J3 i2 @' r7 Y9 i! ~9 u! d- O
        rtt_init(RTT, u32msdata);, M. S0 r: V, O& A! m
        ul_previous_time = rtt_read_timer_value(RTT);
( {2 z; z  Z' n        while (ul_previous_time == rtt_read_timer_value(RTT));
# Q  L0 [$ C8 V; n$ X3 O3 ]% s* U
        /* Enable RTT interrupt */, x& F  R' a+ J2 c
        NVIC_DisableIRQ(RTT_IRQn);
" |; g, A9 N* |  ^        NVIC_ClearPendingIRQ(RTT_IRQn);
. A3 ~8 ^+ t/ f! T8 H! q9 s4 I/ C        NVIC_SetPriority(RTT_IRQn, 0);
) c, I) H3 `, O" Q5 b8 @/ M        NVIC_EnableIRQ(RTT_IRQn);
  x/ T  d2 V( Z, l6 w* z8 ]        rtt_enable_interrupt(RTT, RTT_MR_RTTINCIEN);
6 I. L5 N5 r* P& R* e2 Y}

点评

好的谢谢 已经解决。  详情 回复 发表于 2019-5-5 10:18

该用户从未签到

3#
 楼主| 发表于 2019-5-5 10:18 | 只看该作者
helendcany 发表于 2019-5-5 10:00
$ ~; M* `2 I- e3 N/ H2 S' [没玩过这个片子,我用的sam4s,给你我的rtt,参考一下,中间用的几个函数,你看看官方的库函数吧
  B: m0 O6 I  M6 z: P* m; mvoid con ...

7 F; d- X% r+ c) ]0 d" E好的谢谢 已经解决。$ a+ |1 {7 z' H/ y. e5 K

点评

解决就好,有时间一起讨论  详情 回复 发表于 2019-5-5 10:23

该用户从未签到

4#
发表于 2019-5-5 10:23 | 只看该作者
artic 发表于 2019-5-5 10:18
1 L  }& d1 B1 R1 R2 Q好的谢谢 已经解决。

2 O* v8 T1 W$ r解决就好,有时间一起讨论
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-27 20:36 , Processed in 0.140625 second(s), 28 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表