嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?5 |4 z6 b* k+ ~
Void UPP_TASK(Void)
7 ]7 Q# h: o; ]  D) k{
% k5 A+ W$ o, b" K' ^1 M* d4 z
* p; O9 G% h7 a    int i,j,k,target_int_count=2;
/ q7 }5 V9 ?6 b+ `0 A1 `5 y/ C    char ch[2];
2 C; i8 a$ p4 E& [) u4 i
2 W# }2 _9 w) g$ {7 }* X' g" P) F
( X0 i$ X6 f1 Y* S; }5 r( j" v& j
5 m. r7 d+ o) g* A    upp_interrupt_count  = 0;
! j, v0 P) s1 ^5 s    upp_error_count = 0;
" ]" r8 G& d8 z* t1 {  f2 D. B- v$ _7 k0 K, x0 E
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
# D& s, u0 j, T! P* P5 E, E    // Initialize data buffers
7 N, d; r+ B0 M) U+ U" v    for (i = 0; i < upp_frame_size; i++)  ~8 r6 l3 {7 q4 k; @
    {* w" ^+ |2 r% t( u% @4 m0 p
       upp_buffer_b =i;
1 b7 q  Z& }2 O) S7 @6 n       upp_buffer_a = 0xDEAD;: z3 V# `4 `" f) N9 W/ P3 S
    }
2 e) A8 ]2 i7 E6 G) L4 |5 k
3 w# ~0 A$ N3 o: `    //for(i=0;i<1024;i++)
7 U+ p( Q$ t& K& ?% M" o9 M, N+ v    //    temp=0;
3 v) b5 e, R1 ?" v+ ^! G, }! P
* k4 O( f/ q+ s8 C2 e$ N    //UPPReset();
1 |( \5 c- i: A" i0 @    /*启动UPP DMA传输*/; N1 F( u3 L" K6 R- e0 _' Y: Y; o
    UARTPuts("upp_prog_dma_i\n",-2);
% R* {( k7 I6 y& f    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;9 N% y- W1 O" v$ b
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- W* u# w3 X% |2 y" a* j    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
! \! O9 e& |, ?/ W" L  a/ B9 a% c- ]7 h, |( A8 Z' {/ X1 l
    UARTPuts("upp_prog_dma_i\n",-2);
0 `$ f% l1 H4 n1 F5 W+ _    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;7 E+ d2 ]- F: H8 @+ s
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* e: [0 _+ O4 x0 j( v5 c    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);" y+ [  }) i6 I/ Q
. e' s, @: D8 l
    /*等待UPP传输完毕*/
6 `; {6 _5 `$ e# k    //i=0;& x6 n6 A+ d. ?/ A; p8 z
    //j=0;
: n* i9 j: }, Z% r5 R    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 x& b% L  U3 n0 ^7 p    {
& ^& n2 w0 ~# k6 b        /*  测试UPP传输的同时操作普通DDR数据2 j0 j, R) ]7 n( h0 Q% e* j% q. n
        temp=i;
8 a4 A- J8 w* G* I0 Y# Z        i++;: V7 n; Y- H* J2 k) M! p( q9 w
        if(i==1024)
, L8 \: I' Q3 S" p* G9 _        {
5 _. W3 R1 w3 u/ ?# Z+ Q2 ^, t            i=0;" A# s5 T2 J  y% Z3 I$ B
            j++;8 i* m- V- Z* j/ v
        }
! X7 k3 t- V  d: G        */
9 k' a. T3 g: V- Q- [  [; n8 P! b/ |* N7 k1 `9 g
       asm(" nop");
, D# c' p/ |0 b" H4 u6 F/ `
4 ^1 A, R4 w: i( W% ~9 b2 @: b       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- w5 H# B2 a& z  b4 L) ^    }
9 u$ t$ l' T: D) h6 b- S" h  y* H) p9 t7 s. X* m
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
9 [6 }' P4 E( l* U    //UARTprintf( "i=%d\n",i);" E% ]' }/ H1 |3 S  s7 F1 b
    //UARTprintf( "j=%d\n",j);6 |# H( h2 U1 ^3 x# k5 k# }
    UARTPuts("Data mismatch in buffers.\n",-2);" z6 M" {; a( u2 E# U
    if (upp_interrupt_count == 2 && upp_error_count == 0)
. z! y0 M$ ^. s3 M; \: d4 i0 @! k  G; E    {
; ?% c& V# T0 y9 d, z3 }        for (i = 0; i<upp_frame_size; i++)
, v$ M- W3 p4 k) m! T- R1 C" }        {
8 Q' B/ u1 e! X5 ]0 Q4 H3 J            if (upp_buffer_a != upp_buffer_b)
5 T' A2 i" f$ j9 ?' l) v5 s! }) r            {
6 k0 J3 e6 w2 i  k                upp_error_count++;  D* g  q+ D/ R6 |4 ^9 {
            }
7 k# X! ^* M! h7 Z        }
9 B* X" _/ l+ ~6 {    }
; {$ v" \) u8 g# p8 t. `* @! }- Z* z- R8 J& x9 U
    /* 报告通信结果*/1 r' M/ t/ s! S2 ?- t& M2 D1 V
    if(upp_error_count != 0). ?' Z! w2 ~7 f$ y2 H" I& L
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
0 C! f. s( t' A# N( K* \5 h/ p    else$ A1 J4 [) _+ L' _
        UARTPuts("uPP transfers complete!\n",-2);
! [$ d# l# Q/ O4 A3 i
# c: L# C. _2 n$ e6 |# k    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
+ e$ u) ?! {( P7 S    UARTGets(ch,2);; P( z6 G$ h8 \. E& [0 E8 X0 L
    UARTPuts("\n", -2);) @' e3 S# D& t6 ~

  o' w; f( t  D" ?9 L  n    if(ch[0] == 'y')8 d# C+ F  ]# O9 X" |# M
    {
0 g8 G. z1 U+ ~/ e7 ~        /*打印全部读到的数据*/
$ L8 s7 K1 }/ K7 ?8 a7 v/ d; B        for(i=0; i<upp_frame_size; )
& u' `0 f% t5 M% g7 j, e        {# V3 b. J7 P) `- P' V6 J+ c- T
            for(j=0; j<5; j++)
" c  c+ k$ `: X8 I+ Y            {
, K7 @5 w, L7 h% h) F) P                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
2 h7 y1 @' B8 c! l                i++;# H' X4 q% s8 @% k" |+ \
                //if(i >= 4096)
" G$ [4 w2 T+ L6 D- p6 q                //    break;
! h- ~! q- j+ `" T. P6 Z8 p8 A5 d
2 j: k: y2 V7 n7 p6 C1 a            }6 N. V! t: b/ K3 K
            UARTPuts("\n",-2);
5 O$ E7 b3 x7 F$ Z: J        }/ \/ |' \3 k( x% `
    }
0 Q# k  ~# Z+ Z: f' I. A7 T9 k' w8 R) T$ z7 m
}

6 _3 M1 W! d8 I

1 l" A' Q2 q! d, D: ^5 _$ \8 Z" `4 u$ M  C; o+ c! G7 E

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ `# h1 t: o6 Q8 c1 H5 O
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。; w+ s8 G9 Q3 c( s! f) n





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