|
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
|
|