嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( B; k) R' s  j+ `2 d' Y5 Y
Void UPP_TASK(Void)  Z+ ]' E' }  o0 ?0 _- ]  X2 x
{
5 h4 t$ v" q. B# z$ N/ F7 @5 F
+ |9 h0 O8 U  O, a9 J' J1 V    int i,j,k,target_int_count=2;
# d$ O& f: W( R; v    char ch[2];& U; d% l8 r# S8 ?- }$ y2 a; O0 x

& m: y1 X5 q( n% H, S- o; G# J* Q+ ?9 Z9 e

& E# ?2 x$ x* C3 ]    upp_interrupt_count  = 0;; v- U$ I9 d  c1 X4 I
    upp_error_count = 0;/ G/ H" E/ `$ l+ b. z
3 |) Y- N" m) @, K% h
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 B$ ]1 p! _9 G7 E( w. l# Q    // Initialize data buffers
' K0 K0 V0 ^$ a$ i3 d    for (i = 0; i < upp_frame_size; i++)
. C* w( V8 C8 [    {
- P+ J3 N) }8 [& X! `4 L! ~       upp_buffer_b =i;5 y7 M: k3 b; Z1 M+ ]: K
       upp_buffer_a = 0xDEAD;
+ L" B9 V2 x$ m& F8 Y- Q( a8 ]1 I    }
9 M. `6 j" n& l9 I# [
0 ~/ S2 Q; _8 t+ {    //for(i=0;i<1024;i++)
. M* z: P2 V" }& C7 T    //    temp=0;  d, a6 M) ~- d$ k- G& X! V

' r- }1 Y$ ]3 f) t( V+ c    //UPPReset();& N& T1 V* D7 n. S
    /*启动UPP DMA传输*/
0 V6 R( ?8 ?: y" R    UARTPuts("upp_prog_dma_i\n",-2);! U. v- e. n. o
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;1 D5 O. W# x" O- L
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);3 S# n/ E/ u( `# H
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ P4 c% `. B( [
9 F$ @3 m) Q  L7 R. A0 @) o( p    UARTPuts("upp_prog_dma_i\n",-2);* y' X4 p& b& V+ M
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
% ^+ r' ]/ N# l8 O- C    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" l" N5 N' \8 a0 v6 n0 i2 ^    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);# r) f. X# w. @' u9 y: N
& a. q8 C( d' i
    /*等待UPP传输完毕*/
! u/ p$ o/ o5 r6 n9 d    //i=0;
& P' b# N6 Q- I6 O/ G, Q5 z/ V    //j=0;6 ~( E, E9 @! B. O1 z
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( r& t( k0 F5 b8 r: i7 H' {1 O) L    {& Q7 P7 b" K; u5 c
        /*  测试UPP传输的同时操作普通DDR数据
3 n5 F, G8 I4 Y( S& {        temp=i;  }" ^% @' d3 h  {
        i++;. y6 j# \2 q" z- _# s/ M
        if(i==1024)
  a; m0 C+ E- X4 s" u% s        {
4 t& [# L5 D2 |4 e6 M            i=0;
* D. L& o, @! I( j( k            j++;4 m& o3 \& z" ?! |& a7 H% T9 ]! v
        }$ @9 c' l1 g) l8 e; ?
        */
0 _/ A6 \+ z4 ]) F, L7 G* S7 b9 q" _% [: R
       asm(" nop");& Q* p& T8 N. x! ]; Y
* r9 [% N6 g% x& ]0 L: [7 ?
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
% @, R: H6 }/ `3 ^' p! `+ E$ ^    }8 e- m7 d, V3 }3 u# l$ Q' d0 x
2 `. J$ C8 D+ e  l7 e4 \; {% l4 L( P
    /*检查UPP传输的数据是否正确 (loopback modes only)*/( j! \# p2 Y9 g: U# U
    //UARTprintf( "i=%d\n",i);$ E" x; w2 }$ ~% |5 n8 y
    //UARTprintf( "j=%d\n",j);
4 M# E$ j' c" _- V  a0 a    UARTPuts("Data mismatch in buffers.\n",-2);$ s  Q) X5 F) B% [( R: r
    if (upp_interrupt_count == 2 && upp_error_count == 0)
9 A0 m2 J$ J, S1 q2 a. n  F( s0 c7 B    {
( H5 o* ]' q3 F) q/ c        for (i = 0; i<upp_frame_size; i++)
" o  g. I" j  ^, C1 E3 p+ P  I; p        {
4 r! D' B: K4 M) f$ t/ z) Q3 p: B$ R. k6 B            if (upp_buffer_a != upp_buffer_b)+ f( k% Z% {* n
            {
+ [  C% b' d, x0 g                upp_error_count++;+ W8 D. r1 N/ J0 r
            }
: {+ G7 h; p. @7 T; m: j6 L; ^1 Y/ }        }
: r; T% Y8 O( P% u2 u    }
5 d$ ^; T& |( `) e% T6 W7 Y* s& X- {4 ^- Y! v
    /* 报告通信结果*/1 h7 J7 r" w: ?% O# g/ I
    if(upp_error_count != 0)
' N2 O( q5 D7 k. e6 F: f: J        UARTprintf( "upp_error_count=%d\n",upp_error_count);6 k& Q/ d6 c) p8 t! z* N$ p) p# l
    else
* U: Q4 v) ?* q* S        UARTPuts("uPP transfers complete!\n",-2);
3 S% U: X* b1 e' a! ^8 U: a  N8 W/ O4 Z* ~
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
+ @1 x( \9 b4 D2 l    UARTGets(ch,2);& C* V* O% H3 l. d/ X; I
    UARTPuts("\n", -2);) S" n5 o6 N% _4 ]# g; j* v) I

7 g: x( A' W/ h1 D( C( P1 V! S    if(ch[0] == 'y')
% ]. L7 j7 B- \% V) \9 w    {# r0 m! i, z" s: O* E: g1 Q
        /*打印全部读到的数据*/) Y! g! b8 l& v  ?, |" s. T
        for(i=0; i<upp_frame_size; )# _4 n! D3 j- E2 l0 d6 w
        {
3 ~* ~" e& P  [& \* |            for(j=0; j<5; j++); O$ u  _- ~5 h/ j& N& W$ d; h
            {* s' Z, Q9 ]: L0 c
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
. h: B9 I0 e/ p: F+ P* i                i++;1 S/ L- d5 Y' y9 z8 t
                //if(i >= 4096)# n; ?1 ?# }2 ^8 @) X
                //    break;
5 e  ?& B+ x  K* g5 T: B) F
1 P8 ^  F2 P, N9 G+ U, |            }; U1 m. a4 m. G9 j
            UARTPuts("\n",-2);' d5 I" A; p" \- y% m) u
        }
) V* C; A6 Q- y    }
7 l9 N9 O$ \/ |( v; @; G
6 n% n: l! j( |% h}

" m) R5 I* J  n5 J

0 ]8 ^$ n: F: `& J- {0 V9 M
7 y( O9 ?) z) {6 m3 T
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 o. f/ g, b) |- x" }& X6 W
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* R' f" n0 ?8 \) R+ e




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