|
您好:
* c" a4 o$ ?2 b3 L( O9 I7 j omapl138光盘demo中的ad7606_dsp程序函数void ad7606_start(ad7606 *ad, unsigned int rate) 做了如下修改,即用TIMER2取代clock, 但是却产生不了 ad7606_on_ticked中断。为什么?
, o* k7 x2 S4 K# B7 `
, m, s8 w9 I7 Y+ [8 @0 Z, b
+ C2 v d3 C5 Q6 s6 |5 o9 N! O/ {9 p7 c, e, F6 o* [
1 n6 }, V; x' I1 `3 R) R' I- ?. S! M+ F( }5 Q
void ad7606_start(ad7606 *ad, unsigned int rate) {6 t; _+ S5 z' t1 M9 l
// ASSERT(ad);- P+ F" N! W; Q0 C- q
// if (rate > 1000000 / TICK_PERIOD) {" I+ }3 C3 N2 { R a
// LOG_WARN("unstatisfied sample rate, set as max %d", 1000000 / TICK_PERIOD);
, i$ D. H# N: l$ p4 u! E// rate = 1000000 / TICK_PERIOD;
; W+ S* \4 m- T// }# ]3 [1 b/ u6 T
//# m, z9 w* L3 I
//
0 n3 a9 u& Q5 @; S// int period = 1000000 / TICK_PERIOD / rate;# m1 v- W7 h& f6 f) |
//
0 u/ D5 g" t* q// if (! ad->is_running) {8 `7 ?2 P8 X+ D
// Error_Block eb;$ B2 m5 ]% `' [' j3 i
// Error_init(&eb); ?4 |) M2 t }2 \" ?6 T4 ]2 Z4 G
//
! i5 z r. e1 g5 R& X8 V// Clock_Params params;- Z2 {5 D* h( q6 L, e
// Clock_Params_init(¶ms);+ q) J$ j' {) |( W0 r1 ^
// params.period = period;
6 q! s5 z, p! l// params.arg = (unsigned int)ad;
: ?. [, v/ R$ k8 A( z: b+ A, b% b// params.startFlag = TRUE;
! u& W' S3 Y9 S5 c+ B6 f( j/ M7 Q9 w0 |// ad->clock = Clock_create(ad7606_on_ticked, period, ¶ms, &eb);" k. S9 s# {( \2 n8 `) S
// if (ad->clock == NULL)& R6 y% E/ f% H o/ @" L
// LOG_FATAL("failed to create clock");
2 R6 ]9 g' U" C/ |, v y//- ?$ d" F5 @* m! m
// Clock_start(ad->clock);" M/ g8 M* r7 }" ~5 t- K
// }
; ?; B" b- B0 @4 O6 G; _# ]7 l7 f' @// else {) x& A, ~4 d) a# ~2 n: O
// Clock_stop(ad->clock);! M! }& ?5 [1 u; P$ {+ w: W s
// Clock_setPeriod(ad->clock, period);
% t4 x, c- m" D& c' E( @4 b// Clock_start(ad->clock);
0 i' N" ~3 |" n! P% U// }: q* B, i7 C" f
* N+ p0 _4 W3 @
// 创建定时器
4 k6 a/ Q+ o& ^( }- t" Z3 ~ Timer_Params timerParams;/ T/ E4 v5 S. D h! v1 P
Error_Block eb;
+ R2 p8 U$ N) S6 _* ~, `9 H7 O" |
?$ d2 B1 a: j // 初始化错误块/ ~% ^5 z: P# i# Y2 P: I: X
Error_init(&eb);/ L5 U# H8 `& v0 u! S
// 初始化参数
5 N& n( X0 x Z Timer_Params_init(&timerParams);' [( W8 ]+ R0 z
% K+ I" [' ?7 ^4 L( u$ Q3 { // 配置周期
5 ]# ]1 X6 p' F6 u% ~2 l timerParams.period = Period;# B8 n) y8 z4 b$ A
timerParams.periodType = Timer_PeriodType_MICROSECS;* W0 f/ j+ [, p9 Y# F3 I
/ C" Q" H( Q4 Q% O1 F& T
// 实例化定时器: m7 j3 [5 w* W4 `8 f" y
Timer2 = Timer_create(2, ad7606_on_ticked, &timerParams, &eb);
8 I! k) m. ^. x+ @4 w8 Y if(Timer2 == NULL)& x9 B$ [$ ]1 k1 N$ ?8 u+ V6 F3 s
{
' ^# ]2 e4 Z+ i( v8 H2 W( s LOG_INFO("Timer2 not start。。。。");
6 M- ]0 f: A/ A* F7 F }
/ S3 m( k; p) U& l% l/ ]% C* B$ D" P+ r7 Y- m
Timer_start(Timer2);- Y0 x' K: P2 ]/ s( v9 G5 h
7 @: S }" A$ t0 b
LOG_INFO("Timer2 start。。。。");
7 M2 h( Q2 { z: m: v+ p) X, }$ B) V7 H/ S; s/ i
ad->is_running = true;. x( R1 k+ l2 e
}
$ A* L& a. i1 W8 g- Q0 k/ B( B* y- E) v1 |* {
|
|