嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 r& G/ z7 g8 X. j
Void UPP_TASK(Void). d: O" r* [8 K4 F& L" ~
{2 d) ?" K3 r; G* h( M6 S2 S( G- g

  m2 @" z9 L0 p+ c* j    int i,j,k,target_int_count=2;
0 N  b& z4 U) T4 Z    char ch[2];
, i1 i9 ]$ Q/ v# T4 ]/ Z
* A. e! d" n: O% c1 Y4 e6 i" B* L/ r. b9 x1 E& p1 c+ \
0 f! s9 q/ r% @" l2 d# K
    upp_interrupt_count  = 0;
5 g& b, L/ z  W6 @    upp_error_count = 0;
( l9 ~  S  l4 e% K5 o
+ b' O8 l* T5 ?    UARTPuts("\tResetting uPP buffers...\r\n",-2);" ?$ U( h; T, F) I  a1 U2 p- s  T" t( y
    // Initialize data buffers
# h. b4 I* s5 \: W! o2 }$ r6 i7 ?    for (i = 0; i < upp_frame_size; i++)) I  y) v1 M8 ]
    {+ }+ P7 |' w- O9 Q' f$ m% H# [
       upp_buffer_b =i;. D3 l& G. k$ ]+ A" ~
       upp_buffer_a = 0xDEAD;, v( Q% m; o$ L1 Y8 e; C5 h
    }
5 L4 t5 Y/ K% V
: x/ m  Y2 k. a& e    //for(i=0;i<1024;i++). @$ u4 m- u8 d& n& s) n
    //    temp=0;; K% B- ]* H' h  ~( F
0 C. j% T9 T8 c: l! o
    //UPPReset();
# x  w! T. U( E    /*启动UPP DMA传输*/
! _) ^* q5 Y& T# k5 z- t4 Y4 P    UARTPuts("upp_prog_dma_i\n",-2);) D% j+ ^7 e1 ]. B; @  }
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
! d: Q/ V/ V9 U7 C$ g, ~8 t  O, n- o    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);3 r' H8 @  U" c$ H
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( k( p: H& q: b! j$ t4 W- y4 L7 S  }! u# J! h: E9 P
    UARTPuts("upp_prog_dma_i\n",-2);% T9 h0 e6 I, D
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;2 q$ n# q9 ]' B( {
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);# _& ?# U/ z$ Z, A" Z
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);' A4 {0 W& N# k( }2 K/ ?
5 z4 l# k8 O5 y% L1 P
    /*等待UPP传输完毕*/
  V" Q/ J9 t) l. u    //i=0;8 s' Q7 U9 X4 E) M3 l/ @( K2 ^
    //j=0;  i7 m. y" z/ \1 ?6 ]2 ^' G/ Q
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)  T5 N3 P1 ?4 Q( n: ?; B0 L
    {
/ m" t8 }! o( i1 b        /*  测试UPP传输的同时操作普通DDR数据" \7 s; b, v4 R4 E% C
        temp=i;
# Z* R( N- q+ x$ m3 h4 ^        i++;0 G) w- s' z: K/ c7 h5 @
        if(i==1024). ?1 v$ {) a- L; Z9 p% L5 R% B  |
        {
3 x! v+ f/ ~. Y$ r            i=0;
: x- G/ J5 [3 O5 p+ O4 c+ d$ x            j++;
# f5 K' b9 t  r: h) @- @, z        }& D5 Y6 t6 I! o% V8 \6 x
        */: R/ i' r8 p& x
3 S( t$ E  j1 G5 B6 T
       asm(" nop");4 l% e, @  r' G7 r2 @
3 M% G# u. t4 h; c* \
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ w  j/ g5 N1 {) n( `) J    }
' W; N7 j  }. V; x' m
0 G8 _4 \, \& P& z7 p( @    /*检查UPP传输的数据是否正确 (loopback modes only)*/" d( P* y. J- b* G
    //UARTprintf( "i=%d\n",i);! E, s7 O" g! q6 c6 p, g
    //UARTprintf( "j=%d\n",j);
6 L% }( |, d0 Y  j- M0 y; w    UARTPuts("Data mismatch in buffers.\n",-2);* c, r+ Z2 V  h0 N% G/ q
    if (upp_interrupt_count == 2 && upp_error_count == 0)
! S6 J* ]' J5 x$ ~$ @    {; P2 X& C4 p0 z# o/ C/ O) u9 j
        for (i = 0; i<upp_frame_size; i++)
; L0 |) K; L$ ~2 \+ ^/ h& q+ V, {( y        {* q. q" s1 |7 E+ q8 f# u
            if (upp_buffer_a != upp_buffer_b)
) H1 {+ O  o+ F; P. w( F            {9 C% g: K, m) E2 x8 a* @' T% r
                upp_error_count++;( e4 X6 q2 v" c! P
            }
5 {/ B8 r3 O" W4 {) t" d        }
7 E' F* i& a) z: `0 R; M    }
! @2 [4 E9 S# h5 E  e( J* g) r! D! E5 J8 V3 B# f6 O* k2 c
    /* 报告通信结果*/2 m- R+ ^4 g8 \: m
    if(upp_error_count != 0)8 ~+ |6 J# y* b2 |  G
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
) k1 ?; \& N/ l$ q) e" ^    else
% I) E+ U5 \$ N        UARTPuts("uPP transfers complete!\n",-2);5 N! x' n% E# v* l

; b/ r! @8 j' m3 `    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
2 u7 a) S3 w2 H    UARTGets(ch,2);6 p  [9 U& k; W% |1 P% D
    UARTPuts("\n", -2);
& a: o+ {! q2 \7 r: i2 p, f. ?- b4 q$ C0 X
    if(ch[0] == 'y')
) _8 r; b% h+ |0 p    {5 C% N1 A! P7 a) V
        /*打印全部读到的数据*/- p- s5 }4 p4 {6 w( \( R- U
        for(i=0; i<upp_frame_size; )" f$ K- A% O, d  U
        {
5 H: ~9 z" B, }2 o( ^            for(j=0; j<5; j++)
) B' A* }" T0 i0 p  {; i            {: `# B: f, _' n( f9 i* d
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
! v4 n3 s4 s/ ?7 p. u1 h+ t7 u3 v5 W/ g                i++;* [2 m, `& r: C. |; v) S6 }
                //if(i >= 4096)* R; Z- P; m/ l
                //    break;. R/ l$ b/ Z8 O, r! Z
1 N  O9 D, X( `  t4 z
            }
: X# V6 j. p. l% ?2 H- N8 I            UARTPuts("\n",-2);
4 O" A4 R3 _1 Z' I& T: O1 }        }
7 K0 [, g% R* B1 }2 Y7 n    }$ Y+ v9 a* n  R
! v; _9 H- m* h, ^$ [
}

7 N! d& S0 b. Q* }4 |

  S; W/ b6 K, q( i: _# R# g- t! a5 P5 E- N, ~- z

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( V, g8 }6 n6 Q% [) U' A
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 T; B6 A1 S9 `/ x" y* g5 l, f! p




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