|
您好:
: k$ Z6 H- q. I7 Z' U) o0 g1 Z omapl138光盘demo中的ad7606_dsp程序函数void ad7606_start(ad7606 *ad, unsigned int rate) 做了如下修改,即用TIMER2取代clock, 但是却产生不了 ad7606_on_ticked中断。为什么?
" q0 k; A8 u/ a+ [. f/ g$ \& s9 c& T6 X) t0 @
9 P+ `1 O0 B2 ?2 c
2 K' e; }% k; S
/ O/ C* `$ J$ R$ i* E+ |: e ]; h
9 } k5 i) B: X+ c$ f. }- m- L7 N dvoid ad7606_start(ad7606 *ad, unsigned int rate) {3 K* s5 y. ~% K6 M% }8 l2 j) ^
// ASSERT(ad);5 _* a5 e; P' k& c7 X
// if (rate > 1000000 / TICK_PERIOD) {% ^% m w& C) g7 D- ^
// LOG_WARN("unstatisfied sample rate, set as max %d", 1000000 / TICK_PERIOD);
, V* h' w2 T0 u1 e3 k// rate = 1000000 / TICK_PERIOD;$ O# G2 t+ @: \/ e! l
// }
3 S% D3 [! T( M3 q1 @' `" q# B//. ~2 K! ]" w$ y6 p8 Q; M! q
//# D9 G! l) ?* E
// int period = 1000000 / TICK_PERIOD / rate;
3 P+ m+ p0 s) q) r: U/ v//
( m0 i$ D4 A) f- E7 [! N// if (! ad->is_running) {
5 |3 J! f# b5 J! S9 d" A4 O6 i// Error_Block eb;
- ?1 B W5 J7 R, p" |+ g+ w// Error_init(&eb);" E* S, [' y8 r& A+ I5 p. N
//
+ q, F p# e# p1 ?" c. `5 P// Clock_Params params;0 L' V% N3 V, j' ?
// Clock_Params_init(¶ms);
* J( c8 l6 F6 e m// params.period = period;3 D$ V4 t, G6 L+ R) ?
// params.arg = (unsigned int)ad;
. w8 }, v$ W4 q+ L2 p r// params.startFlag = TRUE;
$ }. g8 X; w$ b$ r& {// ad->clock = Clock_create(ad7606_on_ticked, period, ¶ms, &eb); @5 a- t; X# {. U* J# b4 X2 a
// if (ad->clock == NULL)
" {* Z3 @& H$ U8 m7 X' j) k// LOG_FATAL("failed to create clock");/ z+ F# B) e/ s/ L9 T! s, S# ^+ e
//$ l) j% j* a5 U# l/ ^
// Clock_start(ad->clock);. T1 c" P) s: x a4 P H
// }1 m1 ~. K0 t5 [& m8 D
// else {
% g3 i% f, q* h4 s* v// Clock_stop(ad->clock);
2 J; Q" Q/ Y* w- h3 G5 R// Clock_setPeriod(ad->clock, period);" f* l; Y0 l' K. O o' L1 ^
// Clock_start(ad->clock);
, S- t3 V, o/ A% ^! b// }- n: z; N6 C/ A% j2 [, l' k# a
, o# N/ Q: |0 f9 b! w0 L( N // 创建定时器
1 U- K/ O" |) n Timer_Params timerParams;( g9 @$ x6 k, T. |% k
Error_Block eb;# a, Y1 M9 D4 i U2 I
, _* T; T; s1 r+ `" w# x* V // 初始化错误块
+ ~* y1 g4 i0 K Error_init(&eb);5 V: G+ ?4 p# N+ a. g6 J
// 初始化参数
8 O1 }# k/ v/ U# ?: s z+ i Timer_Params_init(&timerParams);
+ o. h$ h- Y; G2 ~0 M4 T$ U* d E6 g% F
// 配置周期0 S, l5 |, ^$ M0 Y
timerParams.period = Period;
( g' j* Q. |! T5 b) s* e; S timerParams.periodType = Timer_PeriodType_MICROSECS;
$ @& V( v0 S5 ?/ n6 @! A; \% d8 V9 u, ^! s: [7 j
// 实例化定时器- K& c8 q# n; l/ U7 Z" Y e
Timer2 = Timer_create(2, ad7606_on_ticked, &timerParams, &eb);
5 x, S; p: e+ T5 U" h% _# l: ^ if(Timer2 == NULL), v+ m# Z9 f" f# a
{
' i1 \6 _$ A- X# a. Z6 F0 | p9 d LOG_INFO("Timer2 not start。。。。");
2 {( Q$ L' R- g5 c; ?: l/ Y }
8 o- {. O$ q" s: l& J( e% ~, k' f1 U; F& o, ]2 |" h
Timer_start(Timer2);, b1 B9 `( M5 n
+ l* l0 Q, y# m
LOG_INFO("Timer2 start。。。。");
, s, C( F' N7 b
5 P4 P5 `9 n' r. ~8 T2 v C& Y( \2 c ad->is_running = true;4 y" y# H5 x* z- ~$ N4 ]8 X
}
' T6 q7 Z- a9 J( q+ K* s
/ U8 Q4 B$ C1 O5 e0 X$ ^ |
|