嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?- i* T6 |5 Z* [& P% A
Void UPP_TASK(Void)+ u0 E, S- i" g4 ?. {; v$ ^& F8 r
{: z& P& s: Q9 M" |
7 x5 u9 r! k( T/ Q
    int i,j,k,target_int_count=2;
9 e5 N* w/ a$ \) Z8 o4 W    char ch[2];. G" l" L7 ?: {3 {$ J% [' f" b- n

1 y" z- s3 e" h" e7 }
& I6 g! o5 a& m$ u; f- x5 l  \
4 l- n" a' [$ U    upp_interrupt_count  = 0;
; m) b- }7 c, p+ A& Q  V    upp_error_count = 0;' K7 O9 F8 l2 r; j) F- \6 a

7 ^" J- }, R7 f: k5 b% H    UARTPuts("\tResetting uPP buffers...\r\n",-2);) o1 `0 C$ ]4 n; x* g" q4 L
    // Initialize data buffers/ l5 e+ d# {; D( T" ]: x) {
    for (i = 0; i < upp_frame_size; i++)
' b# n9 l1 y* c8 n3 P    {
& Q1 r3 E. p6 E! Z; G# |4 Z  w# C       upp_buffer_b =i;0 e2 x5 e8 N% J7 \9 @
       upp_buffer_a = 0xDEAD;
; D0 N# j, Z- _* Y5 p1 I    }
' a7 C& u! ^- C  b- U& x- V& ^, A
2 V/ R  U8 d6 A- S1 T) M# z    //for(i=0;i<1024;i++)
. O$ v( Q+ K! m0 I& r+ P" Y% ^5 L    //    temp=0;
3 Z5 e2 F$ r% @: V% m: Y
; @8 ?& _) ?' c4 A5 a    //UPPReset();
: U3 l; U# b& e" ~- F( `6 R! y    /*启动UPP DMA传输*/) C: g: ]6 }6 t. G) H
    UARTPuts("upp_prog_dma_i\n",-2);+ ~! X( T2 q, S- m
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
; @; |2 `3 \) |( E3 R# D    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: g& K/ M; M' M8 C. \    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);  i/ z% E9 D, M, f* \9 d3 E
9 K" t! ~" y, o" I- F, y
    UARTPuts("upp_prog_dma_i\n",-2);9 ?% p: r. z; Z$ p' p; z
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 m; d$ l1 p2 K3 h    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);" @( }8 s7 `5 }4 `6 z/ }5 c1 a5 |# d6 ]
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 r. Q$ x- S% {! F4 k# k; u2 E7 m7 ^3 V6 m$ T
    /*等待UPP传输完毕*/
, }3 [9 j+ X: l7 J1 z& g$ [    //i=0;
8 f& S" P0 r$ {    //j=0;& \- `& }; o1 @6 Z. H. C/ Q# ]
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)$ N) }$ C* c! _% Y' L
    {& A: M& U7 J. I. E2 u
        /*  测试UPP传输的同时操作普通DDR数据
3 L7 F) {- Z1 F% _# m) c% }- g( Y" M& a1 I        temp=i;
( _) Z. V$ M6 Z9 b3 E5 _        i++;! h/ m; Q! Y% W4 n, ]
        if(i==1024)
0 W% b, Y: b1 D3 J( x  z# y        {
# q0 E  K* u2 z* C0 S9 H5 ?. T8 q' U            i=0;
9 k/ \, W6 Q. H$ K! a. r1 p            j++;, }; ]2 j0 P: ~0 y) m8 q
        }" ?) Q/ l1 b3 A! S% ~) t9 X
        */
3 ]7 g- ]2 {# Z* F% P9 Z
2 J% S  G4 Y! h       asm(" nop");3 N  C. c# O! q# b6 f, x- v! t
1 m6 K1 ~" |2 l7 a4 T
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, S1 j6 n( a- v5 \    }/ d, ]! j" S9 U) d% e
* I3 Y% H1 |9 }
    /*检查UPP传输的数据是否正确 (loopback modes only)*/) ~0 q! [' `+ _' J& i! u
    //UARTprintf( "i=%d\n",i);
& O: J* d$ T3 @    //UARTprintf( "j=%d\n",j);! W) a- }1 C% z( @5 u8 S* s
    UARTPuts("Data mismatch in buffers.\n",-2);  |$ R' @7 ^  F6 P7 s7 v9 B
    if (upp_interrupt_count == 2 && upp_error_count == 0)8 ~/ Y) |1 ]+ R4 `% F( W
    {
  O9 }' C" Y# l% l* x+ [+ L* ], u        for (i = 0; i<upp_frame_size; i++)8 M% M7 b2 }6 I0 X. O
        {: r, x2 H& ]3 w
            if (upp_buffer_a != upp_buffer_b)
. O4 M' u+ k) s6 @/ m# g. r$ x% e            {
; @9 d) {, o: s5 R0 A, N7 r0 x                upp_error_count++;
7 l" J; Y) w' @9 ]            }7 G, `5 J4 s# V+ o- A2 k
        }: Q) c$ B. A# s4 `1 ^
    }1 C( t  Y) Y& k, y2 f
: u9 `# z5 o- Q  O( d0 Q
    /* 报告通信结果*/. R* V# y( x" c% d; d" b# D0 J
    if(upp_error_count != 0)/ ]8 |6 p& f) g% v
        UARTprintf( "upp_error_count=%d\n",upp_error_count);( ]+ H$ R- J: L' Z* A  V- t2 E
    else' @" ^2 q/ Y; O: E
        UARTPuts("uPP transfers complete!\n",-2);& m$ p# F" s5 B6 A5 \' C% o. P
' Q" T  O# p, o, W+ b8 k
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
+ V" M; L+ f2 x  {0 a    UARTGets(ch,2);% a) T- `$ J. {1 d4 l5 S
    UARTPuts("\n", -2);
- x% l$ k; C0 D. _. @( i
5 x2 X/ Q- k" D. C    if(ch[0] == 'y')
7 A& s% N  P% e# ]  N: X  [3 `  x    {
( V, o, S- }6 d        /*打印全部读到的数据*/
8 U: g/ _5 ~% G; m        for(i=0; i<upp_frame_size; )
7 x# s  P4 K% Q        {8 B) W6 e. c  C. R% x4 c
            for(j=0; j<5; j++)1 F" U1 v5 K6 ]% H
            {2 o2 M' m" O/ W* \- {
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);+ a( _' h2 a/ H' W, d( t# @
                i++;
  o4 n9 e  X% ]# H. G  ~2 H                //if(i >= 4096)$ w8 Y) ?. @7 n
                //    break;2 u' M% }6 u: P) p8 b5 U3 ~
9 P) y9 M; ]' N3 u2 }9 E1 _
            }
6 {- _" j) y* _0 `& I            UARTPuts("\n",-2);
0 U" J( g) ^, N        }
1 v) C) |1 B: v& w% c9 _$ M+ X    }$ N5 i3 |: ]' `" [) B* _: w

( B% R" c9 i+ s* {}
7 ]1 L  Z6 R6 Y3 j- ^/ z
; |5 e1 T, x7 U. a& l7 d' Y

; [  ~5 C6 Y. x5 X( f
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。- k" x( ]; m4 A8 j/ o: H4 a

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。" k: u# F+ h0 d% K9 J) x1 B6 ]





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