|
|
您好:
7 J" Q+ r/ Z) k* S, u9 Y omapl138光盘demo中的ad7606_dsp程序函数void ad7606_start(ad7606 *ad, unsigned int rate) 做了如下修改,即用TIMER2取代clock, 但是却产生不了 ad7606_on_ticked中断。为什么?
; t: u" E7 u$ j: G3 ~2 A9 G* R* h( @+ ]" p& X
% i2 U& X- @4 x' c: o3 P7 w- R' ~2 k2 ^" v2 c9 ~7 ?
( T2 A& v8 Z3 k& ]# o! ?
/ ~ @: ?# p0 M9 k7 `. D/ \$ u4 jvoid ad7606_start(ad7606 *ad, unsigned int rate) {4 r, q3 Z. W4 v! H" P' ? m& u
// ASSERT(ad);1 X x y E8 `' `
// if (rate > 1000000 / TICK_PERIOD) {
7 O6 L; r4 f x( A2 x" m// LOG_WARN("unstatisfied sample rate, set as max %d", 1000000 / TICK_PERIOD);" p: _) u4 b9 ?/ i! ^- y5 F
// rate = 1000000 / TICK_PERIOD;
4 Q9 X, r; I( a- s! d( k// }4 e- o9 `2 Y) X+ A0 S
//
% o1 x* U$ z9 p, N/ h1 E1 Y& T. |/// z7 J) e# O U
// int period = 1000000 / TICK_PERIOD / rate;
# ]7 ]% r" B9 D; I1 Q//, ~& d8 C/ Y! P T
// if (! ad->is_running) {
: `5 j: S. E$ ~// Error_Block eb;
1 R" W! @; @& s; w4 p1 w// Error_init(&eb);
; I) `( M% M9 x- Q//
% V, i0 d+ H, D- X// Clock_Params params;# T. Y8 {3 u6 C# i
// Clock_Params_init(¶ms);
- H9 \ j- u/ K; M ?// params.period = period;
B) r9 G; c: l% N$ n: w$ a// params.arg = (unsigned int)ad;
' J& Z- J6 L: s7 C2 R: Z// params.startFlag = TRUE;
( D5 V: c! Q- H( I, v// ad->clock = Clock_create(ad7606_on_ticked, period, ¶ms, &eb);0 v5 P0 N5 ^: ]) F1 L r
// if (ad->clock == NULL)
5 j+ L- C" O5 g" ^// LOG_FATAL("failed to create clock");
6 @7 b& m# [% B/ J//
7 `3 X" K- C/ @/ G// Clock_start(ad->clock);# e0 T+ ^; R, X! e% O
// }! n5 w3 O# \+ l& W9 d! _
// else {
0 g0 e q8 J. l8 g& U4 q, D// Clock_stop(ad->clock);1 I! k( ]* _. o; S. ^& c( [
// Clock_setPeriod(ad->clock, period); B' v& @" d2 G. g
// Clock_start(ad->clock);6 `- x# K% H O
// }$ {+ e( l! U5 Y
0 u i6 h' [; {8 z
// 创建定时器
, `( W6 X) q* f/ d& } K Timer_Params timerParams;
2 P0 R2 y4 G: ?$ i1 V Error_Block eb;% R# \- K! k3 `, i
9 f: n7 H/ h: U' S9 P3 L" P
// 初始化错误块
! ?8 |; m4 z' ^( T Error_init(&eb);
4 R( X3 Y; y- y1 q // 初始化参数
$ Q9 r% E* e: _# Y7 P- M9 s Timer_Params_init(&timerParams);# C0 W( _/ V" D7 b5 b$ C9 ?. A
+ l4 L# P# d* q9 t! U/ w, D // 配置周期
o% e0 \8 U9 }( \* R timerParams.period = Period;
! h7 O5 k% X8 d# A* x timerParams.periodType = Timer_PeriodType_MICROSECS;
5 ~5 f' j- s% A& J2 A! Z3 f
7 J9 l: x0 C) ^ E0 u6 f // 实例化定时器
4 O* z0 P. O) w6 k* ?. p Timer2 = Timer_create(2, ad7606_on_ticked, &timerParams, &eb);
4 v& y1 }' F& {- A/ H' b if(Timer2 == NULL)
) J* `# m( s) k, i; ?" w0 p {
' a) L9 Z1 A5 b) ?( p5 n LOG_INFO("Timer2 not start。。。。");
) n; m: x. T, p6 c$ _# @* z% Y' m }1 Y r% _+ X, ~( H
7 o' l& e1 u! \/ @: C* c: o& M Timer_start(Timer2);7 R- z4 O$ j2 E* o4 g2 F" r& [
8 s* q2 I9 q: A, n' s9 x
LOG_INFO("Timer2 start。。。。");
! t0 n" |8 G' t5 V
9 n5 ~ G/ S3 L6 a; z7 Q% K3 r ad->is_running = true;& u; ^7 U/ i; j
}9 F7 K, z3 I1 ~
$ f9 ^( ^0 v; m: q' M5 q8 _ |
|