|
|
您好:5 G% P# I# x; Z' @6 w
omapl138光盘demo中的ad7606_dsp程序函数void ad7606_start(ad7606 *ad, unsigned int rate) 做了如下修改,即用TIMER2取代clock, 但是却产生不了 ad7606_on_ticked中断。为什么?
`- Z2 X& c. V( X: @1 r( r5 t1 ~5 y E
3 y9 K) o0 R; G5 ? y1 Y
4 b' r2 u- a) {" _
# H# v4 ]& L2 F4 u1 W; `
( Y& L% S6 `) k0 q9 A' A& G
void ad7606_start(ad7606 *ad, unsigned int rate) { E8 ?6 O: l g! b5 ?+ S
// ASSERT(ad);
- b# p1 e$ _% O' {// if (rate > 1000000 / TICK_PERIOD) { b: }$ q1 i1 j% F2 T& ~" v" `
// LOG_WARN("unstatisfied sample rate, set as max %d", 1000000 / TICK_PERIOD);2 C0 Z6 r _. R" L ^; I* {) S
// rate = 1000000 / TICK_PERIOD;: A6 |1 V: p, Y5 b
// }
! A5 J- _2 v5 S1 N. L/ J7 r//( @# {) Z; n6 a! _3 O- y+ V
//
$ z, Q! Y! u7 f, C// int period = 1000000 / TICK_PERIOD / rate;
! x! G8 |4 [1 W8 G' o3 ^: {% Y//1 b+ N5 H# f9 H+ h( U% S
// if (! ad->is_running) {9 U1 w, l1 U& p3 y, x
// Error_Block eb;
6 R' M+ W; s% O+ ]; G8 m+ @1 \// Error_init(&eb);
: T: H9 S) T4 Q- C8 P# }//" a, g e& P, q: D, D
// Clock_Params params;
' ^8 n3 x- [- ^6 j; F; e// Clock_Params_init(¶ms);
9 `; m) S* @& c1 h( i, q" a5 ]// params.period = period;+ a' R6 y$ T5 t+ A, ^0 w
// params.arg = (unsigned int)ad;& |3 Z' m) m6 w0 v4 C3 y. ^( @ a+ K
// params.startFlag = TRUE;# d- Q- M) K Z& F P
// ad->clock = Clock_create(ad7606_on_ticked, period, ¶ms, &eb);
" `* z3 q2 B; j& b// if (ad->clock == NULL)
4 e$ g# \7 U1 Q// LOG_FATAL("failed to create clock");2 A/ J+ m$ U7 l T8 Z9 X* [
//! ^3 u7 L% r" a& s
// Clock_start(ad->clock);
& c/ Q) g. x `: B// }
& ^8 g% C: m8 n. h4 E// else {
! t5 O# P3 |, T2 v3 m" A7 }// Clock_stop(ad->clock);
! P/ p/ H$ y& \5 p4 F// Clock_setPeriod(ad->clock, period);8 S+ q6 Z- M8 `9 Q, ]
// Clock_start(ad->clock);
# ~) y' B6 D2 J6 D// }7 E, }! S' m$ I1 B
+ t# t. f5 P. u% _) V/ B+ Q/ o; [$ g // 创建定时器
% j% M( z8 P/ g# _ Timer_Params timerParams;9 v+ w0 @0 X3 ^. W
Error_Block eb;
5 S' U0 g; f8 L9 u9 a; Q0 {$ a1 H" w
// 初始化错误块8 H3 X5 _4 y6 ~
Error_init(&eb);, \' M( ?! t( @
// 初始化参数
7 i# z' |5 q0 J4 ?& K, I" f; K8 U# a Timer_Params_init(&timerParams);6 ~. U3 c* U* B* n* R+ ^0 |
: s9 r9 ^. m1 ~ Z9 V // 配置周期
: u! D ^9 q3 B0 m8 K. Z timerParams.period = Period;+ M* A k6 b. z% i: c
timerParams.periodType = Timer_PeriodType_MICROSECS;
* G m) U9 `# {5 J2 ~, v/ |: _' X2 r# @2 f, c
// 实例化定时器
; G- m; w. I! `8 c2 h: q Timer2 = Timer_create(2, ad7606_on_ticked, &timerParams, &eb);
% e* W" O+ R+ @% M1 Y2 v: B if(Timer2 == NULL)
6 ^2 w) c+ w6 E$ N9 ~# k9 a {
/ Y. ~5 o" R/ D2 J- A LOG_INFO("Timer2 not start。。。。");
7 {" T& g' z4 W) M }
/ k/ T0 U, f1 ^0 j% p% }0 S; b7 I J1 z6 P% L: p
Timer_start(Timer2);
( s9 J* D1 s8 t: I; _- w) M! d7 K: }. ~+ Y5 {- g" e2 P
LOG_INFO("Timer2 start。。。。");
' Z& v3 T% n7 M7 \" f7 Y
" j ^) ^$ S! l, U& p ad->is_running = true; W9 f6 |! i: |& ^8 R
}
7 \1 I1 [. E7 l4 ^1 J" k. t* b5 ~# ]8 Q4 |3 `4 X! H" P0 u
|
|