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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
ATMEL SAM3X 芯片定时器通道2 通道3怎么设置- r, B. v' X5 m( e4 h
4 U4 ^, `4 m. q# M: Z% z# ^6 `1 ~$ s
各位大神,当我使用atmel的SAM3x8E芯片设置定时器做1s定时实验时 使用TC0通道0时可以实现功能,但使用TC0的其他通道或是使用TC1和TC2两个定时器都无法实现功能是怎么回事?
- r  u9 u% @/ P3 {" A' v以下是我写的代码 其中TC0可以实现功能,TC2却无法实现功能
/ {% K! Q& |; h3 ?3 u#include "sam3xa.h"
1 P* ]9 f; A9 s+ _; V$ d#include "header.h"
7 w( b/ N6 j9 b4 lvoid Init_output(Pio *p,uint32_t pio_pin): k4 S. l9 i+ Q" G5 `
{
2 y8 ?  B1 E8 Y( W: |  g4 U    PMC->PMC_PCER0=1<<ID_PIOB;
- e. X9 ?8 h* A
/ K& G" S! t2 m    p->PIO_PER=pio_pin;$ q6 t$ C+ D; K3 P
   
0 G% J0 k  Q  u" a# D    $ w% m/ `5 l7 ]2 Q5 q: m
   
/ O. v+ J+ C$ v3 J* {0 j    p->PIO_OER=pio_pin;  7 M/ e* s  e) O6 ~& [/ X: J: u
    & h( E+ Q9 |1 c6 u; U& M2 @, q
- e+ V, i- b# t+ B+ p# \
    7 s/ L8 h3 `9 l
    " I8 w: l/ _0 j) R0 c% _; r
    p->PIO_PUER=pio_pin;+ K# E& |2 a/ K6 y

% U3 {. `; a! g5 y0 `) l& H3 c, I   
( b, T4 e+ f0 R5 h}) D4 Y! q+ m. h& M+ @
void Init_tc(void)3 f1 h$ y5 k" ]" F
{& `4 }% }' R" e" N# ?- }* m$ k
   
# S1 M# p$ d/ R1 }+ O. T- q1 T        Init_output(PIOB,PIO_PB20);
* O" M% p: ^8 j/ p/ P& Z" z
: D' h. m, i% e! p$ N* r4 e1 N! z/ p. f7 I# d5 P/ L
        PMC->PMC_PCER0=(1UL<<ID_TC0);
: S5 W9 d8 p  z2 H/ v2 ?& ~       , s/ L/ K2 a* k3 v+ M% [6 S" C
        8 ?5 q: Y* i9 x0 K/ ]
    TC0->TC_CHANNEL[0].TC_CMR=TC_CMR_WAVE    //波形模式5 D+ P( }8 ^% L6 J
                        |TC_CMR_TCCLKS_tiMER_CLOCK4    //时钟4,:MCK/1283 @/ E/ R  n; ~% f  C
                                 
. Y. @* s2 [  U2 h/ u7 J                  |TC_CMR_WAVSEL_UP_RC;   
9 _4 H. n( i& v9 O4 ~; |
+ y3 r/ S5 f- t0 A       TC0->TC_CHANNEL[0].TC_CCR=TC_CCR_CLKEN|TC_CCR_SWTRG;//时钟使能 ,软件控制
( P3 n: @$ p1 \  G   
: K$ a) w5 \0 M9 B7 D9 e4 B        ) i& \9 w0 d6 y; h: _4 ~
    //波形仅上升RC比较时触发
3 h1 h+ ~. W. ?; D7 t) Q    /*设置RC产生中断的时间*/
; p0 D+ b6 q* N; U+ P/ n7 q0 N- x, w    //TC0->TC_CHANNEL[0].TC_RC=TC_RC_RC(656250);//1s定时
4 Q4 P4 l% U( U6 {* u, Q. t; W6 G        
% F: {3 z4 H7 l- H$ m  x        TC0->TC_CHANNEL[0].TC_RC=TC_RC_RC(600100);//(655360);//定时
6 m: E6 u; `1 _1 {        TC0->TC_CHANNEL[0].TC_SR;& `$ Z: }- X0 ~/ q
        ; |" [1 @6 L2 Z) l
    TC0->TC_CHANNEL[0].TC_IER=TC_IER_CPCS;//RC比较时产生中断
7 {- S0 b$ g/ a, n# {    # K( I  |' ?# w
    /*使能TC0中断*/
! x, b$ N7 X1 K& q% Z: o    NVIC_DisableIRQ(TC0_IRQn);- W  k& s) g6 {
    NVIC_ClearPendingIRQ(TC0_IRQn);
3 Z( {$ P* p3 f$ I    NVIC_SetPriority(TC0_IRQn,1);
' @. |; j2 j: S5 N    //NVIC_EnableIRQ(TC0_IRQn);7 d6 a, g- c& H# |) g8 e% O* C
    NVIC->ISER[0]=1<<TC0_IRQn;% J. \; o- n9 u8 K1 T
   
0 D% ]% \1 g+ a5 p' O$ I. f   
- s5 n) h2 d* {( }7 s. Y}7 `1 k7 Q* @) M% d+ R/ T
void TC0_Handler(void)2 G% S6 r( k1 r' a% q# w
{* e+ P3 ?3 N' Q, ]7 J, `" p7 L+ x
  uint8_t status = TC0->TC_CHANNEL[0].TC_SR;
: e& ]* y2 O- [/ f2 m# [8 o% w
/ e, H2 T# N6 G. g- m3 }    /* 判断中断是否为RC比较触发的 */8 X/ d  M! x& g: L7 W. n# |
    if (status & TC_SR_CPCS)
1 S" ^3 q3 r% W" \: ^  l: B        {
1 b6 D. H1 L" G1 }- K          if ((PIOB->PIO_ODSR &PIO_PB20))9 [$ p. D, V& ?6 X' e
        {+ {3 l1 @+ `+ t$ `7 g" g% Q
            PIOB->PIO_CODR = PIO_PB20;" A  q5 R- O, ]: p+ G
                        8 A/ @) {& N7 ]4 ?
        }5 T- u3 P+ q" S
        else9 B' j3 o1 p$ ^; _+ [: n. N
        {
' o% W* U+ B; t- g; z$ g$ [            PIOB->PIO_SODR = PIO_PB20 ;  y/ `, D/ [4 R6 P: n9 a7 t
        }
  u& Z2 f  i- l7 S/ A6 k  D        }
0 W! v3 A5 e+ ^        ! b: |, r% O" `
}4 A) b2 Z) v- Y/ J, J2 c
* x& X- d& M4 V1 Q4 @% ^; p" S" N8 {
void Init_tc2(void)3 B6 ]' l' m9 i% G7 p  L' I
{: c7 G8 t3 w4 u) D
   
- \9 T1 [; M. @4 S
' {6 D$ A  n- `3 y  G. h        4 l; N) n$ C  |  e* m5 K
        Init_output(PIOB,PIO_PB18);5 J4 W7 s2 A) d
  7 S7 K+ f7 n( H' z

6 S% r& \( H2 e6 l/ F+ ?        PMC->PMC_PCER0=(1UL<<ID_TC2);* H0 Q& \$ t' f) b; Z
        
7 l7 y" L+ s8 L) ]        1 Z8 Z; d4 H8 A% @
    TC2->TC_CHANNEL[0].TC_CMR =TC_CMR_WAVE    //波形模式4 l  _# Y) f- q9 L# m4 P. F; f
                                  |TC_CMR_BURST_NONE
  X4 Q9 j2 p& e3 s5 ]$ ]                        |TC_CMR_TCCLKS_TIMER_CLOCK3    //时钟4,:MCK/128
# i7 l, e- t4 _# D- F  u3 z                  |TC_CMR_WAVSEL_UP_RC;    //波形仅上升RC比较时触发
: F) F5 ]5 H% y; d- w
$ C2 {  i6 p0 x% v: C6 L. v& W: X            
  ~. e. m6 j* p7 K: Q4 M  l        TC2->TC_CHANNEL[0].TC_RC=TC_RC_RC(655360);//定时- r" y) ~& E! ?6 S" d4 a3 S7 ~
    TC2->TC_CHANNEL[0].TC_IER=TC_IER_CPCS;//RC比较时产生中断0 I5 k- `! G: u( k. S% R) i
    TC2->TC_CHANNEL[0].TC_CCR=TC_CCR_CLKEN|TC_CCR_SWTRG;//时钟使能 ,软件控制
7 v% M2 D, `+ m% m$ A7 U: s
2 Y) M1 e% Q3 s$ I/ p    - i* W" }5 w0 C& Q: F
    /*使能TC2中断*/
# n, ]7 R5 n) L; a6 n9 M, y    NVIC_DisableIRQ(TC2_IRQn);
. {0 y/ |$ H' F    NVIC_ClearPendingIRQ(TC2_IRQn);
! s$ B. ~" t! Y/ v% ~- z    NVIC_SetPriority(TC2_IRQn,0);! ?+ B8 |- J( y7 ~
    NVIC_EnableIRQ(TC2_IRQn);
* m2 D1 k6 A: Y/ m       // NVIC->ISER[0]=1<<TC2_IRQn;
0 D0 ]# D( n& ?: g# y   
, W3 l& s% x" v0 a. O}
+ a2 o8 @  J, g9 ]& m. R//int n=0;
8 W) D" [0 D8 M( ?  p3 c! g3 Mvoid TC2_Handler(void)
; H8 v! c- F; i8 N2 M5 J7 J1 M9 m{; M7 E3 R: V/ c) E0 {! U  ]! p; L
    uint8_t status = TC2->TC_CHANNEL[0].TC_SR;
$ I: ]/ b" G# L8 X( F
. R1 A) v: v8 x  }' K& k" M    /* 判断中断是否为RC比较触发的 */; |1 i6 k) i' O( @5 ?5 i
    if (status & TC_SR_CPCS)
# W0 `/ o  S2 c9 H! \, |/ r+ Y    {
1 Z2 k( r* A5 ^0 W0 i# d  |% S# O# D1 @+ g% I0 ^
               , W7 \% ]$ Z$ Z/ e" p" q  W
            PIOB->PIO_SODR = PIO_PB18;. e2 a1 s1 e, J9 O; b0 N; F
        9 \. O4 X. s( [8 }0 K
    }- Z7 z! S. [" j: g3 z
        PIOB->PIO_SODR = PIO_PB18;5 @" A4 f% J7 F7 j  C# L
       # M" o7 _# }: P( Q
        
6 y8 p5 A5 {- J}# f  ]# q( X9 S

- I( q4 L; _8 J7 I

该用户从未签到

2#
发表于 2019-5-5 10:00 | 只看该作者
没玩过这个片子,我用的sam4s,给你我的rtt,参考一下,中间用的几个函数,你看看官方的库函数吧1 J2 B& i! o* n2 q( O( ]' a, f
void configure_rtt(uint32_t u32_mdata)
: T3 Y  A$ s. c{- u& H. _! q( i( S  r
        uint32_t ul_previous_time,u32msdata;
1 g# s6 R& {2 ^( y/ l" W        u32msdata = (uint32_t)(u32_mdata * 32.768);
( M) _7 D$ n% w; b- c        /* Configure RTT for a 1 second tick interrupt */; u* W; R7 C) w9 k
        rtt_init(RTT, u32msdata);
& K, J. M% A3 q5 H3 j# z        ul_previous_time = rtt_read_timer_value(RTT);
2 |* m8 @5 D# \$ p( U! J7 H$ i        while (ul_previous_time == rtt_read_timer_value(RTT));
# x) P: k! i! G+ `
3 ^0 [' D( X) o3 f6 U7 L        /* Enable RTT interrupt */% S8 D* ^( P, X3 r1 `; F# E! s
        NVIC_DisableIRQ(RTT_IRQn);9 ?) M; p) N; T1 W/ R
        NVIC_ClearPendingIRQ(RTT_IRQn);1 p8 B: ^5 _2 X# C4 L2 _6 F
        NVIC_SetPriority(RTT_IRQn, 0);
3 |, d4 f; U3 j! \        NVIC_EnableIRQ(RTT_IRQn);
% U3 d8 T* a% o6 t, k( W        rtt_enable_interrupt(RTT, RTT_MR_RTTINCIEN);
* h. u) b6 u' i: u}

点评

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

该用户从未签到

3#
 楼主| 发表于 2019-5-5 10:18 | 只看该作者
helendcany 发表于 2019-5-5 10:00+ I; R+ I7 _/ @2 }6 ]  Z
没玩过这个片子,我用的sam4s,给你我的rtt,参考一下,中间用的几个函数,你看看官方的库函数吧1 l: g# A4 t7 j: e: i0 S
void con ...
; t1 w- Q/ d9 G6 A) d( T3 z
好的谢谢 已经解决。
  P$ T! Z- Z$ Y1 N

点评

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

该用户从未签到

4#
发表于 2019-5-5 10:23 | 只看该作者
artic 发表于 2019-5-5 10:18
, Z7 ?, i2 M# k3 D9 }好的谢谢 已经解决。
* C8 \! Y, v0 B8 ]* E4 t) i' g9 r& D, n& q
解决就好,有时间一起讨论
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-30 12:31 , Processed in 0.109375 second(s), 24 queries , Gzip On.

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

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

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