|
|
您好:4 E6 @' @8 U) u
omapl138光盘demo中的ad7606_dsp程序函数void ad7606_start(ad7606 *ad, unsigned int rate) 做了如下修改,即用TIMER2取代clock, 但是却产生不了 ad7606_on_ticked中断。为什么?' p/ @7 P4 U: s- R
, H' l# k1 n% L M0 G$ o
/ ^9 p! T0 ^8 e, |( \3 `8 Q9 i; _2 V, O4 w T1 k
" k a- Z: c$ |# v& b
. Z/ R4 v [ D" e7 fvoid ad7606_start(ad7606 *ad, unsigned int rate) {4 T3 I0 ~5 V" X2 a0 }
// ASSERT(ad);. B. C/ j5 B* ^4 c$ R3 A- ^7 b
// if (rate > 1000000 / TICK_PERIOD) {
! W4 D8 [- \* ]2 I# |// LOG_WARN("unstatisfied sample rate, set as max %d", 1000000 / TICK_PERIOD);! l- E& @ U& C9 L: u
// rate = 1000000 / TICK_PERIOD;. R8 d4 T6 F' \. Q
// }# q8 ^$ w$ X* E5 M& |4 c$ @4 R
//
' Y3 \1 m: R! ^& A a6 N//
/ n2 x/ `( O- r# o% i5 D, z// int period = 1000000 / TICK_PERIOD / rate;
3 K) R: Q: {3 T) U//
. ?3 u! O; s8 H// if (! ad->is_running) {
4 ]' P" L9 J# }3 }. }. h% M// Error_Block eb;) U1 C& J! n/ K
// Error_init(&eb);
9 b" {% y6 j) p0 O7 U4 [//9 e- h* N0 Q( f s
// Clock_Params params;
6 T/ g# y+ j) Q' s! N1 B7 w, K/ }// Clock_Params_init(¶ms);" i# a8 q8 C6 F) s! d$ x/ }
// params.period = period;: b0 I2 g6 p, V, j9 t
// params.arg = (unsigned int)ad;& p3 t; V/ \! ]6 K+ R8 P" x
// params.startFlag = TRUE;) U! S4 Y( A( z- |$ j
// ad->clock = Clock_create(ad7606_on_ticked, period, ¶ms, &eb);
1 `+ Z# I+ G: A2 m3 m: B2 C3 F// if (ad->clock == NULL)) T' |: n' o9 `$ z/ r7 F$ L
// LOG_FATAL("failed to create clock");; H, }6 M3 f" t: f; S. Q. j
//3 ?6 O8 ^9 L+ S
// Clock_start(ad->clock);9 \, h- e# v$ A7 t) F! i% u
// }
" f3 E+ G9 F6 C// else {
+ i$ D( t' k, b* U! V! ?+ W// Clock_stop(ad->clock);
" ]9 a/ U2 w N. A' ~& H// Clock_setPeriod(ad->clock, period);+ [! y+ ^0 [3 e* H7 j" }) L
// Clock_start(ad->clock);0 a& O R: U6 z8 i4 I& S
// }
1 I3 L( t1 V" s7 e3 \; n& [: |' ~$ |% X7 L0 U( y$ }) w
// 创建定时器
6 v. p: N' Z1 F$ h" B Timer_Params timerParams;% R. C4 g$ C+ u6 r# I, Q+ d
Error_Block eb;/ m) A( a6 ^: S/ k' W# h/ ^) O
1 @, N& B( R$ _: p+ P // 初始化错误块3 g4 a* j, k" S3 ]* e) q+ ~$ R+ p
Error_init(&eb);+ ?/ z5 g8 F8 N: B0 @' P1 d8 g/ A
// 初始化参数+ k: Y4 p, v+ B+ ~) i, y
Timer_Params_init(&timerParams);
F: g1 q* K9 q( O9 o
) u5 `# e8 s) x' s8 k8 c0 f // 配置周期8 l) L. z9 ? v7 V+ a- j6 x
timerParams.period = Period;, @0 u3 l6 |' c# z* I: l, `
timerParams.periodType = Timer_PeriodType_MICROSECS;' e7 g. s) ^) c- v9 @
" ]- J; p2 {; \ // 实例化定时器
4 B1 B, S t C" R Timer2 = Timer_create(2, ad7606_on_ticked, &timerParams, &eb);
) h# y! ^, r! [2 [8 c if(Timer2 == NULL)
% I2 n$ u. t4 D4 T {
! ^ s! ~& o. k8 R. K" @, Y LOG_INFO("Timer2 not start。。。。");2 b0 U1 R/ n0 |/ e" p8 S
}
" G) Y0 z3 W% d {9 H
& D2 ?/ {; [# l4 h! I8 Y Timer_start(Timer2);4 d, U' `8 K) w, a! K
5 o+ z1 H0 z2 g7 q, L
LOG_INFO("Timer2 start。。。。");
: }8 \/ c* z9 n- X7 F: R/ R. o @: R# p" i& v" u* C1 y9 N3 u
ad->is_running = true;0 a; O! O% _3 {+ p& s
}
T# m: O. f) ^! w1 h/ B$ x8 D
1 x1 o- c2 }- d3 ]5 u3 a$ A |
|