嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
6 n. y$ t4 T7 F; P& e
Void UPP_TASK(Void)1 U6 X' q- b- V  F4 W
{
" m2 L3 U7 s" N( Y
2 B$ b+ a0 Q4 V% R% j# _    int i,j,k,target_int_count=2;- b+ h! S7 O4 R/ Q; N  a* D
    char ch[2];7 q$ A3 H2 B/ E

$ L3 R3 ?/ r4 t* w$ c/ K( m) `, X8 o: p

% j' B& w) q1 x$ j    upp_interrupt_count  = 0;3 B$ ~* }7 f+ C. e; L+ [
    upp_error_count = 0;
0 ?9 T& q! d/ W. I" M1 }4 @" c( A& Z* v4 N
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
! D4 w! V0 D; n3 m    // Initialize data buffers6 J) T3 A: G9 U. j# ^* r8 D
    for (i = 0; i < upp_frame_size; i++)7 A- Z# E9 |# d% z, A
    {( f" c& x1 b7 R! M$ k4 s" o
       upp_buffer_b =i;  K( M7 L) f- _9 t0 Y
       upp_buffer_a = 0xDEAD;
/ F, A! ?3 Z; g- O4 o& r+ C    }
8 L/ H- O, h( c8 O9 x8 k' ?# w4 ]$ j% m0 V5 W" F2 ?) ^
    //for(i=0;i<1024;i++)9 u/ E% m* K  y6 S! U" C* E: w
    //    temp=0;
' ~4 C0 r0 [/ i; U) K8 u: f0 m! F! j  ?
    //UPPReset();; g* E5 G6 A* G. W/ E
    /*启动UPP DMA传输*/* S: b  A1 r) V6 y" X5 O
    UARTPuts("upp_prog_dma_i\n",-2);8 ~& O" L  Z2 y9 b+ i! [6 V
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
, l# R! U/ o0 u' u+ t    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 k% @8 q  y& ]    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ k9 F( L: j8 H. m+ J! p& n
3 X$ h+ Z' @& D: ?! h9 {    UARTPuts("upp_prog_dma_i\n",-2);
# i1 Y1 Q" L( k& J8 C& w6 \$ {: m    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;0 `+ Z  [; I+ f! Z
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);7 V* ^3 @/ O1 T. E# K
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);* J1 n9 k: j8 n9 G. n8 w( w2 C5 D

) _0 Z/ u8 h3 S+ g3 `( ]3 w7 u    /*等待UPP传输完毕*/1 C' N. ?5 p8 d
    //i=0;
4 J) P: K- S5 d5 t    //j=0;* w  @3 g* ~4 e+ B
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)+ G- j2 I- @8 i+ ]/ E& O$ {. U
    {
6 f4 A2 ]; O+ m) E' o        /*  测试UPP传输的同时操作普通DDR数据' ~3 ^- K7 @- l- `6 _5 ~8 c
        temp=i;
" Y$ B6 b1 P" D2 U        i++;
: V* Z1 r2 o! {        if(i==1024)
3 Q. `  o# m; d1 O/ Y( H( }        {" l/ u) Y3 G6 p( z- L/ j" _8 z2 j6 ^
            i=0;
& T, s& ~9 J0 j  f% ^& `' D  G6 j            j++;
% S6 \9 \& f6 M& W2 D' o# G# T        }
/ Z& A0 @1 V" q0 D" `        */
* O0 i% I; \1 i: N# P
/ \; o0 ]+ ]7 L$ v" V1 d' g       asm(" nop");/ C0 p3 D' H* p: Z1 o6 i  J

( O' e' V; P9 G: ^: d1 c       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);- j6 l( a" E& G: M( k
    }. Q3 Q9 a8 l( d. t

. A$ O* ~' }" I0 ^% D4 l3 s$ m; {    /*检查UPP传输的数据是否正确 (loopback modes only)*/+ W" ~+ U7 V( Y& p" U4 l
    //UARTprintf( "i=%d\n",i);
, i/ d" g! T% ^9 w    //UARTprintf( "j=%d\n",j);; V! v- d2 d! }  q8 m
    UARTPuts("Data mismatch in buffers.\n",-2);9 e+ Y5 ]4 P0 h9 k& L; @
    if (upp_interrupt_count == 2 && upp_error_count == 0)4 O. v& v6 b# F/ j$ M9 Z
    {# U2 q' w' B. M. z1 ^
        for (i = 0; i<upp_frame_size; i++)
' Y9 x  x. L3 {1 C$ u! {9 {( k4 Z        {3 ~' t7 M' A: H" x6 i6 j& V
            if (upp_buffer_a != upp_buffer_b)
- z6 Z6 \* Z! E4 Y$ e3 P2 i- y" ]            {
1 q& c1 w+ I* G8 H: P8 ?) s                upp_error_count++;
  u0 K  _  K6 l5 v5 [            }
- k" ?: U+ d9 M( O! x" `        }
' z% }7 D( h3 |    }
% F* n, h, g7 l' M6 q* z: d/ f) c( s, l7 O; G4 ?6 Q8 t4 n7 ?
    /* 报告通信结果*/: f: C9 O# `" m' p) e
    if(upp_error_count != 0)  v% `1 p- F7 ^3 z" W
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
7 e1 Q! }) J) F5 c7 d    else' O3 W+ M: y: |- j* f$ f: U/ n/ P
        UARTPuts("uPP transfers complete!\n",-2);
5 c) q1 [( e' j6 W6 v+ @, k* l
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
) a* ^) R: h5 H7 @" N( |# k    UARTGets(ch,2);0 K2 D: I0 h8 W/ n, X: f" K
    UARTPuts("\n", -2);, h7 W7 h: m) ?, [7 @
7 }2 g* Q; O) U8 e
    if(ch[0] == 'y')
/ |+ \+ i4 ^, ~! D# G    {
9 ^. z2 h; }; o        /*打印全部读到的数据*/
2 V& S7 Q/ V6 i        for(i=0; i<upp_frame_size; )
6 M/ M3 m. S0 T; m/ T% a, G        {
6 \* O) b! p' z  O! Q$ F6 \            for(j=0; j<5; j++)9 ~- _2 b5 {- p1 M
            {6 f0 L% G$ M0 O/ r+ y4 E0 M
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);2 P& _$ @0 m/ v$ T6 B/ W: J
                i++;( |' c2 f; H, t3 w( `/ [
                //if(i >= 4096)
8 w5 }2 c" ]0 \& p- i% I+ L0 G                //    break;
8 j6 L) z. @  _. e4 K# v0 o$ Q0 B7 q0 v" o# k
            }
$ Q1 O( X( q/ P            UARTPuts("\n",-2);8 l) D, r  Q2 {' b  }. X7 P- F
        }
3 C3 x' @( q* J    }
- y! @! u/ @; Y; H, T7 `. G6 d0 f) y/ i; R6 z  o' T; m
}
1 o7 m. E9 R# v6 _4 s& P3 J

, |( R; _9 ^1 K( }( s& |* _* _5 r+ d- c5 b2 C$ B% x

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 {$ K6 m( n% |  V8 o. \% v
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。, c! I# w2 W. o





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