嵌入式开发者社区

标题: 关于定时器问题 [打印本页]

作者: vtinf    时间: 2016-11-15 15:17
标题: 关于定时器问题
您好:* C& @+ A* l9 t. O& p- q
       omapl138光盘demo中的ad7606_dsp程序函数void ad7606_start(ad7606 *ad, unsigned int rate) 做了如下修改,即用TIMER2取代clock, 但是却产生不了 ad7606_on_ticked中断。为什么?
0 y% k3 i+ q+ N' |# V6 A5 P  C+ v
% K. p- Y/ u& B# H
  q% L, Q% A3 ~5 J8 H/ y4 _" S9 b. D5 p! ^( m
( }$ G2 O" i5 F8 e9 F
* t: j/ q) G& @% b! w" C
void ad7606_start(ad7606 *ad, unsigned int rate) {2 v4 F  d2 Y" a
//    ASSERT(ad);
3 n3 C3 F' s4 \& B' l//    if (rate > 1000000 / TICK_PERIOD) {- @+ E5 B3 P& \/ I& y
//        LOG_WARN("unstatisfied sample rate, set as max %d", 1000000 / TICK_PERIOD);
/ V3 W% K5 F& @+ `0 J, P/ Z6 V//        rate = 1000000 / TICK_PERIOD;9 ~2 ^6 a6 k7 t, `4 [, F& l
//    }+ X9 ~) Q+ o- u/ g9 h% m
//
" [; }; u& U0 T//
: T$ p" b1 t. l5 |//    int period = 1000000 / TICK_PERIOD / rate;
/ Q7 ]5 W* q) G# G/ A$ T, h9 ~//5 q7 C& v) [' R& ?7 `1 [
//    if (! ad->is_running) {
4 O& {' \2 Y: Y//        Error_Block eb;
# |* @/ Q" D5 s! A//        Error_init(&eb);; `  J2 k* O6 o  s
//
  ^: ], k# y* L1 S2 Q//        Clock_Params params;
, F- [9 K. [) S; \( G//        Clock_Params_init(&params);
$ X; u$ B- ^# P% r//        params.period = period;
/ n$ ?; `/ W9 v- W6 s, z# H) m' D//        params.arg = (unsigned int)ad;
/ R) Q. d& U( H* B; h//        params.startFlag = TRUE;
* Z2 Q1 |. d6 p7 `: J//        ad->clock = Clock_create(ad7606_on_ticked, period, &params, &eb);/ I  I" E0 u4 s. ]
//        if (ad->clock == NULL)
: A* h' @) i8 @& G//            LOG_FATAL("failed to create clock");
0 @* |2 w# i4 _5 l' h//
) H/ a4 O  K% s/ V4 ]//        Clock_start(ad->clock);& f" Y8 p3 {" n: f' o/ B
//    }  r5 U. k% c6 c! W, Q
//    else {8 R4 P& h6 F! }3 T3 G
//        Clock_stop(ad->clock);
: S4 d4 k# c% f& U//        Clock_setPeriod(ad->clock, period);7 w& Y; i; U1 H( E& h, r
//        Clock_start(ad->clock);7 j2 b- F: J+ d8 j; ]8 U) h
//    }( t5 c3 F8 |# m: L
5 q1 q9 k3 N1 Y5 Y: [
         // 创建定时器  A' P5 f0 H5 c- F& g7 n% u% Q$ {
            Timer_Params timerParams;2 c2 l0 T* ]/ ^: T4 t" J
            Error_Block eb;
* z8 P6 N' a* o% |8 s" {3 O" N0 y8 \1 B( e! R, B$ p, l) Z' @6 ]
            // 初始化错误块& N9 o/ e. b6 F4 x. U$ O
            Error_init(&eb);  n$ p# R( Q& W2 ^
            // 初始化参数- g$ O; C1 W! d% ]8 a% P
            Timer_Params_init(&timerParams);
. l8 p3 O' S7 P! ], l1 W) \* f
            // 配置周期' m# [$ V% D7 h2 ~# N
            timerParams.period = Period;9 l+ T( A& Y: O) Y( o# b8 B
            timerParams.periodType = Timer_PeriodType_MICROSECS;, v2 Q) |& E) ^0 T: X4 m4 ?
' ]  o: P; \& Y; M/ x3 b
            // 实例化定时器0 u! ~, z& Z7 K; H; h
            Timer2 = Timer_create(2, ad7606_on_ticked, &timerParams, &eb);
! d( F8 v8 \1 C# u3 S            if(Timer2 == NULL)
1 P; T: g- I7 Y6 Z; ~1 T            {
9 Z4 y0 P2 T9 C& Z) ^8 H/ D                    LOG_INFO("Timer2  not start。。。。");
6 T# T% q; q# b# ], A% S. Q            }9 M. g2 x" c/ o

" [$ }3 S8 ^7 ~* x            Timer_start(Timer2);
" X* q9 U4 F+ ~5 |! Q/ x* A, W% Q0 c& g" b, x# N* e2 t
            LOG_INFO("Timer2 start。。。。");( i9 H* k7 u9 y& J/ q7 ^5 F

; M( z3 }, H( B9 s5 z" r    ad->is_running = true;
" F+ m" o+ E8 I, Y4 i  M}
5 T8 I% m/ y% m0 m" @5 n% _$ Z, _
* E* l% U2 I9 ?3 A4 Z
作者: human    时间: 2016-11-16 20:13
您调试看了是卡在什么地方?是不是进中断的条件没满足?




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4