嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
5 i+ a) e( G3 d
Void UPP_TASK(Void)& z2 M7 H- ~. _  R- Y' [% O
{! a- |6 j1 t  N) G. l
1 k7 C9 C* ~4 J* `; ^, V
    int i,j,k,target_int_count=2;5 |/ L, i  U1 X) r
    char ch[2];9 f5 O" F2 Z6 p# h: y7 r

/ n& u+ @9 r! \) O- D' {- k
: [, a% y4 S0 t: ], v& r, _# K! k( ]5 N+ A$ v/ @% O% F
    upp_interrupt_count  = 0;! e, W2 ~0 V9 q* V3 j7 J6 w  V* Q
    upp_error_count = 0;( A8 `9 H1 c: z

" a0 a0 L. t1 l, v1 i" j  Z& ?    UARTPuts("\tResetting uPP buffers...\r\n",-2);
" K1 m1 h7 E' y2 \    // Initialize data buffers! z4 {: W$ o9 y; S) J- e  w  Q
    for (i = 0; i < upp_frame_size; i++)
% a0 b+ k5 ?5 p3 X0 s" c    {
$ {* K0 q! I( o) R       upp_buffer_b =i;- C. F0 O; u- g' R2 U, ~
       upp_buffer_a = 0xDEAD;- W1 A, E/ K( w
    }
& J$ M" d$ S  R  b4 ]7 ]
$ u' c9 p8 ]% f) ~! _    //for(i=0;i<1024;i++)
" {$ _$ w. M7 G8 }: F    //    temp=0;. d  V* F) h, X+ C' O1 _; A

0 u5 ^4 t5 `6 ]6 W7 B% i    //UPPReset();
9 p) E+ k  e' A4 s  J* `    /*启动UPP DMA传输*/7 M9 _0 W9 @" _7 V9 S9 F
    UARTPuts("upp_prog_dma_i\n",-2);( A7 B/ f- s# w- `: m9 K+ h0 g9 B
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& D6 U) K8 Q; M& @    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);/ K! [/ J9 Z3 U6 j
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: z5 M* x; n7 |9 ?; m' ^% X$ i% ^' I% a
    UARTPuts("upp_prog_dma_i\n",-2);/ c6 n6 O" f2 _1 s1 t; i1 O4 w
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; l: T! H0 ]' ]5 ]( d+ T    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);, H) O/ h* }9 v5 @
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);) X- c& u9 j, |* q# O9 C0 p
) z' }9 O% O/ e: u; b" z
    /*等待UPP传输完毕*/
! ^! y- [$ y, _  P, m- L$ ]    //i=0;
7 K  b* N9 W/ @3 g4 y    //j=0;4 d7 z3 h. A! ~) g- g6 \) F
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
) L% ^; |9 M1 k# m( R# h; N    {
( o# w- [2 S" B, ]; L9 Q# j        /*  测试UPP传输的同时操作普通DDR数据
- [+ s; `. }" }; n4 V0 y        temp=i;
2 a: l" Q% Z3 j7 q        i++;0 J6 R% A5 O9 z) y7 O% t  a
        if(i==1024)
# u$ ^2 t/ }* E+ ~8 ]9 j) j        {3 ]0 ?. [1 w- ~2 p* R0 O# l% p
            i=0;
0 ]/ N% ?+ z6 C" Q5 W            j++;
1 x" `* u, B8 E0 W2 y" i        }
+ c7 y7 }( h1 g        */8 a) ~, t  R2 `3 Y4 S5 A0 g0 w

2 ]7 G$ ~- B( r3 L' w       asm(" nop");
6 G! D/ G4 c' _  O* E% x: U& I/ d- w; c5 l, @8 k0 t! t7 v5 y
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);+ h9 z: G/ L& C- J0 \
    }
/ b7 ~8 n& P' N$ s6 m: M6 L7 F& V" t' I
    /*检查UPP传输的数据是否正确 (loopback modes only)*/  d5 s! }& C, s: P8 Z
    //UARTprintf( "i=%d\n",i);! W$ C4 a6 T3 V) _6 j
    //UARTprintf( "j=%d\n",j);9 U1 A5 o1 ?! ?. o8 w
    UARTPuts("Data mismatch in buffers.\n",-2);2 t8 h0 d, {2 x2 H8 _
    if (upp_interrupt_count == 2 && upp_error_count == 0)7 m" |. _2 Z+ E
    {
$ Y! O/ ]! A4 y" ?0 y$ K- n        for (i = 0; i<upp_frame_size; i++)
) q1 x5 t; ]) v& K0 a        {
* ]1 S" m% Q" k            if (upp_buffer_a != upp_buffer_b)
- x+ W% [/ c% r* Z: ]            {0 s7 G6 g6 L% ]% f* u( J$ d7 u
                upp_error_count++;
2 `* o# j  t! T. z2 H5 D            }$ B+ `9 g* o" M% s4 E4 E0 ^
        }1 i4 [& r/ v+ z' Z2 q
    }/ J3 C  k3 C& A* t8 j
- I! D$ I% u) P1 n7 |: F$ R1 y
    /* 报告通信结果*/1 \- m! w9 f9 z2 `4 K& Z% F
    if(upp_error_count != 0)
8 R) @0 w8 M) F/ `3 u! V        UARTprintf( "upp_error_count=%d\n",upp_error_count);
# ^: K0 Y3 r- `; R    else
" Z, Z+ w* ^; M2 _" F        UARTPuts("uPP transfers complete!\n",-2);
9 p! h/ m( l, ]% v& J0 n
0 `1 v; m) _! g/ e( N) V    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
& v+ U$ F0 V6 P& e! @) ^$ v' \    UARTGets(ch,2);
$ A$ o' T  s  X: ^    UARTPuts("\n", -2);* h2 ~5 j; t/ G& H: s3 H' Z0 i

" [4 D  L/ p; m( y2 C    if(ch[0] == 'y')! A6 H+ }" S. J8 K: V' R' U! s3 Z% G' t
    {
! u; W+ d5 s) A& j9 K3 v        /*打印全部读到的数据*/
; C9 i% d2 L$ E( K* Q+ ?% _& p! Z        for(i=0; i<upp_frame_size; )$ Y. `* [/ }# m+ n
        {
: n, a+ V# c6 p2 i5 P            for(j=0; j<5; j++)4 u- ]0 R& a7 k/ P5 S
            {: T7 r- ]. k4 \* b8 R4 J$ Y# {
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
. `% L; u' @$ r3 f5 @! o7 r1 Z                i++;0 [" f% x8 T# ^: U& \
                //if(i >= 4096)' L1 i- [" f& E' C+ Z- D  a- z
                //    break;" Z) T5 Z% ?1 b0 W# [1 a
' u  @" B* P$ G* L7 V
            }" v' S9 ^! K# t7 {; m$ x
            UARTPuts("\n",-2);
, X  E7 h$ y, r5 x2 F! u) B$ f5 x        }
* {, w# W# v+ U4 m% M3 C    }2 Y- A/ H2 C3 T1 }, t' U
- x& M0 e7 n$ _- w( \/ z* Q! Q
}

( c2 y4 u4 V" w# G

: g5 U! B" a2 d5 F. Y. }5 m9 r# v3 f5 I

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
, n5 o6 l, T/ m# L; [
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
+ t5 p. p0 Q9 [& m/ P& C, S




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