嵌入式开发者社区

标题: upp问题,在SYSBIOS下的应用问题 [打印本页]

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
; S. [$ B/ R# O, r2 x1 T+ C
Void UPP_TASK(Void)
: m0 c* V/ D7 X( g7 A( M{' t4 c3 }9 K% Z# W/ o) S

5 ~. G: w) |7 e" a    int i,j,k,target_int_count=2;2 [+ e5 N2 t  F/ A1 x
    char ch[2];
4 S. N4 y9 o& t: u7 e0 N& ^: X3 ^9 e1 }  N/ F, z# D

& A  H/ R0 @3 S& o0 X
/ [9 o$ D; j4 _7 o    upp_interrupt_count  = 0;8 B" z6 |3 k3 p+ O# d; K2 E; o* r# ?# O
    upp_error_count = 0;
( W' H4 x- L8 L0 |, R6 b6 {7 u  q3 O2 Z; B
    UARTPuts("\tResetting uPP buffers...\r\n",-2);& w8 W0 Q' _8 U3 j
    // Initialize data buffers
% A  @" |$ q$ x& h' n    for (i = 0; i < upp_frame_size; i++)6 P' q4 x' q) b) W8 L5 {; ^
    {
  e) ~2 w  Q$ A& F7 l' j       upp_buffer_b =i;
4 n" c# K5 h  D       upp_buffer_a = 0xDEAD;
9 b8 `7 l/ v8 E& d/ y3 \5 A4 d    }
) E0 X, ^$ N5 j' O0 c9 B; J, B) _+ V' \4 S: G1 t
    //for(i=0;i<1024;i++)" Y9 n4 W( w& J) @
    //    temp=0;9 G: y" X) V9 H0 h

# y0 E7 v* m. H) t- w# @# Z    //UPPReset();2 s3 ^+ }$ _8 a) d5 }  K
    /*启动UPP DMA传输*/
  L" ^0 z: O0 }- n6 \0 L    UARTPuts("upp_prog_dma_i\n",-2);  c- k7 ]4 \. d& r
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;5 L$ m; B3 A; a& ^! V: ]" G
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 f( ~. v* l* m" T" T    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);8 X* j9 I1 Y" O9 a( [6 n

% X, W0 B& l$ t- f  L: O    UARTPuts("upp_prog_dma_i\n",-2);$ f$ I7 m$ t7 {& w8 V6 ^  S
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;. `# r& a1 W1 m3 @
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, Y7 }7 r$ f. H# `! J    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);; N" `  t. N2 X$ B2 ?7 i" z
7 p* `- F) A; Z  T7 P
    /*等待UPP传输完毕*/
$ w, i3 V4 j5 j: {% X9 H    //i=0;
9 o+ n4 v0 x. C6 R. _9 U    //j=0;. E- Z7 f% h' u2 z  w' d
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)1 N; E! m. \; c7 o' j; Y$ W& U0 a. ?; J" x
    {1 K' d+ r. T9 q! m$ L% R; W
        /*  测试UPP传输的同时操作普通DDR数据% {* F0 x2 ?" z* q3 T& {: P
        temp=i;
( T" K- Z3 \9 x6 Q5 z# J        i++;
# |) w8 E. d* C4 g        if(i==1024)
7 l: K+ N2 ]9 i2 G8 B. {4 g        {& J, M4 E- t2 `: P) R  I% J
            i=0;! @/ |& t) }; Z" O, L$ W: ]! s
            j++;) `* S& u4 o+ l( F
        }; S  I7 ?( P5 \0 x% @
        */
, J- ~; f' ?; Q7 q  d9 z! h) s- |+ \; m
       asm(" nop");
0 P8 o6 T# u$ ?2 g3 w. t4 u4 z
2 f6 C2 p) W8 a6 C( O/ ^       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' o- q9 ]8 ^$ p0 d. F9 V    }
+ l6 @! v- ^# ~: ]* I% S! i
4 I# \) I3 p+ p" P1 d) d9 @    /*检查UPP传输的数据是否正确 (loopback modes only)*/
# ?- z7 \5 R; C* e0 c2 @3 j* U& r5 ?    //UARTprintf( "i=%d\n",i);
  w8 R. a+ }0 m) }- c: d' H) L    //UARTprintf( "j=%d\n",j);
  ^, s0 f" ]7 z1 {4 h+ U4 W    UARTPuts("Data mismatch in buffers.\n",-2);; D8 f; a) O( C3 I) O
    if (upp_interrupt_count == 2 && upp_error_count == 0)
7 d3 A+ a" v- k6 H    {5 S+ e" `) k! T% k  p$ d, T
        for (i = 0; i<upp_frame_size; i++)
! u. D# V" m/ C0 {) K4 \+ r6 C( o        {5 g; b; D* F4 L& R
            if (upp_buffer_a != upp_buffer_b)* B/ J1 f0 G, S% f+ G/ L
            {
+ i* U7 v4 u( \7 p- k# ], M; J% ^                upp_error_count++;8 p# l8 u% z  w' o+ W" m( u7 S
            }
. Z$ T4 C# K5 ?        }
$ V2 C% U% b- ]    }6 f% [8 ~* t. F* r& ]
" f% [. V0 i; u
    /* 报告通信结果*/
. c; `3 u: F/ M0 H    if(upp_error_count != 0)
: z# o" i) _7 D6 q8 ]" N% W        UARTprintf( "upp_error_count=%d\n",upp_error_count);
. G$ N3 ^7 F6 J! p    else
  G3 x3 h7 G2 ~; h* K+ y' D$ x2 ?6 I        UARTPuts("uPP transfers complete!\n",-2);9 r7 t* q2 k! n+ m5 m3 k0 P

: ~7 q/ p" m, H/ C    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
" E7 L1 f6 }$ U    UARTGets(ch,2);/ R1 j) C9 W% `1 Z0 h
    UARTPuts("\n", -2);" V7 N) q' V- I  C7 h+ n# q' X/ T
1 `  O, h, Y5 a% j; I1 u2 P
    if(ch[0] == 'y')
: X% x0 k/ N* E, C    {# U# O8 ?4 c+ D) [/ }: q& {; }
        /*打印全部读到的数据*/
9 p- ]' s, n4 N6 \9 s( L        for(i=0; i<upp_frame_size; )
: T; J! }6 ?1 A8 v        {9 W; M3 d4 B$ O
            for(j=0; j<5; j++)" v* v7 M' Z& B6 [1 |+ Q) P
            {: C& r8 m0 |: G7 e  C% I, r
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);1 P+ T$ b. S) u$ O3 i
                i++;
4 H( o( C4 c. {                //if(i >= 4096)0 V! G$ U; `% U3 `7 i% H
                //    break;% }5 N4 W, s! }+ S8 O$ h  q- d
3 _+ ~% ~% X0 e4 ^7 i# s, _
            }
) k  v5 e. f' _+ j1 g. u7 F* i            UARTPuts("\n",-2);# c6 d( n9 R; q, s/ N
        }. g7 v2 h5 E1 |+ S# l6 t! k, S
    }
" k: s  d' b* p6 i- t6 x9 d& W1 @: v. c$ x
}
% d9 w) e8 n3 t
1 \- ]- V* M1 }( t: W+ Z- H4 n  W

6 h4 i5 f, ]& e+ \. i# e
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。( v/ B+ `" g0 R* o" Q5 P* F

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。* r( ~' B. T+ w7 G' K; d# V$ S5 G





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