|
您好:
; j& n. Y+ S# S/ z- K- r2 o3 B omapl138光盘demo中的ad7606_dsp程序函数void ad7606_start(ad7606 *ad, unsigned int rate) 做了如下修改,即用TIMER2取代clock, 但是却产生不了 ad7606_on_ticked中断。为什么?7 a8 }3 F; D; e9 G
" z& Q: {8 r- S+ J- b; M# a1 b* `6 m" t1 S9 E6 x6 z' f* R
4 S9 F/ i$ D, W, N! b9 w7 r. E* i' Q. w6 u2 q$ l9 G- N- r
% P% T3 K1 X# C8 L# \void ad7606_start(ad7606 *ad, unsigned int rate) {
! ?1 W% I, d- o// ASSERT(ad);
8 X; r5 R T/ j' F/ r/ G: L// if (rate > 1000000 / TICK_PERIOD) {
7 f: k2 J/ \. B5 }5 m! p1 c// LOG_WARN("unstatisfied sample rate, set as max %d", 1000000 / TICK_PERIOD);
+ O1 H6 w- \: j. ~# N: K7 J# s$ o// rate = 1000000 / TICK_PERIOD;
; q$ Y* a! _1 x& p! M9 _5 E: H2 I4 j- ?// }
2 C) N7 } v9 u//$ V8 z: b# ^; u3 H/ C* O: j
//; X( s# L2 z1 l; ~) Z Z
// int period = 1000000 / TICK_PERIOD / rate;
* f) A( N7 r3 \: K" w2 E//" k# Z" }! |$ l
// if (! ad->is_running) {* W9 x& Y2 S! X" M% k+ } l
// Error_Block eb;
5 J& V# e/ K4 \4 }4 o( E// Error_init(&eb);
. N7 {# r ?. y% m$ d% _$ Q& k: q//
3 [0 ]/ S% Q/ q// Clock_Params params;5 Z2 Y" A' N- b( V) C9 ^, [4 Y
// Clock_Params_init(¶ms);
: F+ ]* n; A' T// params.period = period;
( n: f5 `+ c* i B// params.arg = (unsigned int)ad; f. l: I# Q- m2 x$ W
// params.startFlag = TRUE; D) l1 L% Z: @0 h# o% d
// ad->clock = Clock_create(ad7606_on_ticked, period, ¶ms, &eb);
4 z) j* [; e- l; z X/ J// if (ad->clock == NULL)
0 e( M+ s: w1 r7 k) z// LOG_FATAL("failed to create clock");3 \1 w7 Q& L, e# N$ h9 L. V4 c
//
! d6 `3 s) [: x; R6 Y1 }5 {// Clock_start(ad->clock);
1 ~& Q' V+ ]% K$ N$ m3 L% }// }) w$ R% O7 R2 U6 q* h
// else {+ B4 O/ f9 I0 M# a. H
// Clock_stop(ad->clock);
2 c7 p% H5 l# K3 Y- ?// Clock_setPeriod(ad->clock, period);, @2 A; q" U& j1 e. d- T
// Clock_start(ad->clock);' ]! G/ j! }, `" Y
// }# ]# l8 }; z1 i- n/ C$ B a0 G
, m' T8 M- Q( `1 k
// 创建定时器
: k, Y; C; r' ?( F8 Q4 O- q: _6 X! e Timer_Params timerParams;$ H. X* V9 N1 E' S% C' t; j
Error_Block eb; [ |7 r* m* |0 h, A9 v2 l5 U
" q7 D9 a# R8 T0 G* u2 t' b
// 初始化错误块
; y. l& Y+ A6 q5 j" L) D1 W; | Error_init(&eb);! W8 n+ v. S* L1 U; b Y/ s& M$ P
// 初始化参数& m- P( R! l% j* N1 P
Timer_Params_init(&timerParams);( \5 f- H/ G; D' K8 `- q% H8 `1 T- }
$ n6 F7 w3 U8 `2 x" E \7 j, }
// 配置周期% s- y6 v! c4 W+ g" E& F$ @* Z
timerParams.period = Period;) O! z, H/ h' i( l) D( c$ B+ V4 C; \/ j4 q1 `
timerParams.periodType = Timer_PeriodType_MICROSECS;$ O9 N3 N4 G2 }
& f5 [) W6 V9 R7 Z$ @; Z5 r0 f0 Y9 E // 实例化定时器 {+ @# k$ y+ u7 s0 ?+ ~+ l
Timer2 = Timer_create(2, ad7606_on_ticked, &timerParams, &eb);
n! d/ z# ]' {5 S% \) Q; J# w2 y) M if(Timer2 == NULL)
+ C0 [ K- ] H/ ^ {
2 B$ W; R( b, \: I! W, u LOG_INFO("Timer2 not start。。。。");
/ r& W: R% H8 y9 Y5 |3 Y6 g P( k }7 Z) v( x, x9 a9 ?/ n
- z7 o$ H' E u" e. K. J Timer_start(Timer2);
% m' ]- @, ~6 F2 Y5 L8 H8 c: v! p$ t0 d* V
LOG_INFO("Timer2 start。。。。");
! R0 j- X, M! h
4 }& w* ` m! M( B) H; y ad->is_running = true;
3 F1 t, `9 X# _}5 `" P/ K2 O8 B4 C/ E% T
% U2 ^4 T! a) B9 w; _7 f! X& ]
|
|