|
您好:
$ H3 B* ?& x+ l" h! p$ u! J omapl138光盘demo中的ad7606_dsp程序函数void ad7606_start(ad7606 *ad, unsigned int rate) 做了如下修改,即用TIMER2取代clock, 但是却产生不了 ad7606_on_ticked中断。为什么?
5 S \$ J4 `+ Y! x8 Y* U. B) M4 Q' i* W6 {/ i
$ l' h) ^+ n4 O0 G7 t- P9 F: y5 I
$ z0 U0 L1 d7 m; C9 F8 W- @0 o" q" Q) ^6 ]1 Q0 X5 K
4 Q: C& m, Z' F: R, E1 ?
void ad7606_start(ad7606 *ad, unsigned int rate) {
7 W: X; T. B& F) x3 b" i// ASSERT(ad);0 j( r* H& s t, t8 i
// if (rate > 1000000 / TICK_PERIOD) {
' u# o4 h/ S: o, T; w$ L" D0 z" n// LOG_WARN("unstatisfied sample rate, set as max %d", 1000000 / TICK_PERIOD);
0 f$ b4 R- E8 ~1 T// rate = 1000000 / TICK_PERIOD;
/ A% a9 L, K5 c# M8 L: f// }
) I, r; c9 n- r//
& s, h# ^' X) A: N//
! X( h1 j6 N' h) I1 X// int period = 1000000 / TICK_PERIOD / rate;6 L# R9 p) j0 v+ m
//) {. n" t4 I; H6 s; L& I
// if (! ad->is_running) {$ v1 N0 j7 s, N0 i
// Error_Block eb;& p; I& x: Y! E( R) Z+ N/ W* t6 ]. t& [
// Error_init(&eb);
Z! g' w% d* M' B) T# R) |$ k//' v4 u8 a3 F5 h
// Clock_Params params;/ g' v! W4 n: R) j9 t
// Clock_Params_init(¶ms);2 d* P! T& v; x1 Q7 x! K3 K
// params.period = period;. Z% H% t1 h5 ?4 f) b9 g, g
// params.arg = (unsigned int)ad;- f( ` l- {0 n+ y3 [! A3 g
// params.startFlag = TRUE;7 _ T4 f& `5 U! L; b
// ad->clock = Clock_create(ad7606_on_ticked, period, ¶ms, &eb);. }* P" @2 ~, x, P5 f% T$ `4 Y. C a
// if (ad->clock == NULL)6 \0 c) u+ q: Z0 d
// LOG_FATAL("failed to create clock");
4 \4 _: Q; \) `0 B8 F//5 _4 C% F; j5 V
// Clock_start(ad->clock);# o8 [3 d# J0 N" X$ b2 d& w
// }
) s4 Z' i* Z% ]// else {
5 ]; E. d$ h* S# l; D// Clock_stop(ad->clock);, T9 h& g+ a( [' |7 _8 r# I
// Clock_setPeriod(ad->clock, period);
( \( k: Z) N6 m9 _" h- a z) `# N// Clock_start(ad->clock);
3 ]* T, D- E' w4 ^, F) i* o// }/ y$ R I. i6 ]! O+ X4 W! o
# ]' W7 p8 r5 E% q6 e$ p) h4 z
// 创建定时器6 ~- @3 e/ X+ _3 g1 _
Timer_Params timerParams;
8 z& H- ~9 I( M% a& Y; r0 I Error_Block eb;
* s3 p) y7 z( m- ]
1 ~! ^: c% P# X // 初始化错误块
% N4 N- m7 D' k0 ~2 F9 R/ d Error_init(&eb);
1 @% C) Z9 S8 @6 {4 U // 初始化参数' H+ I% h+ \' C2 v' @
Timer_Params_init(&timerParams);" v: N2 V1 u8 ~3 ~0 B$ K9 g% M
# U! J1 m2 U, X$ T& G* K/ I
// 配置周期6 C {% _8 s. [5 Y P
timerParams.period = Period;) u7 M' |# {1 G
timerParams.periodType = Timer_PeriodType_MICROSECS;
) X+ b( \' s5 G! [% l
! ~4 m- O4 `) J$ ]* a3 f // 实例化定时器
% z- ?# z3 g) q" ]5 B; Z# ] Timer2 = Timer_create(2, ad7606_on_ticked, &timerParams, &eb);
5 N' m" a" Y$ f1 n! W5 L6 } if(Timer2 == NULL)+ _7 L! ^5 K# ]/ h' t) _
{
2 L6 U- E* L7 Y# R( b F" t3 B( p LOG_INFO("Timer2 not start。。。。");9 l) r9 @. F" a
}
2 `- p' N: I6 Z; f) Q5 q* f
; D: p/ \9 ~3 U2 H" B- X Timer_start(Timer2);& B1 S5 j* I# f' M$ n9 F
) L4 M: Z0 [/ ] LOG_INFO("Timer2 start。。。。");
g/ c* J) _( J0 M2 r+ q( E- w0 Q
9 T2 r1 ?' a" U8 S) D ad->is_running = true;
- P' z: S+ Q/ i, R}
( d+ g Z9 A6 _5 ?+ ^; K* q* v- l. Y$ e: c/ ^# O, x
|
|