嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% F6 I4 A" v6 \( f
Void UPP_TASK(Void)
/ j. z" S: O2 y: }/ w: s{
$ F$ c9 n6 i/ Y5 [# ]. |' Y7 Y3 ?- m
    int i,j,k,target_int_count=2;
7 B$ r7 {5 G. I' c7 H# s/ P    char ch[2];
4 e; l; I8 |$ @3 ~
9 G: y0 S+ ?3 X# A7 H, _* ~6 p& ~6 {# F- L

6 ?7 X8 d4 k+ \0 q4 Q- J; i$ p    upp_interrupt_count  = 0;
) B5 r2 e* N$ Y, q    upp_error_count = 0;
% R$ S4 l9 D+ k
7 D+ _/ x4 e! ~' U& `    UARTPuts("\tResetting uPP buffers...\r\n",-2);* `9 b: ~0 _% h+ z
    // Initialize data buffers
7 `* x) S+ ~. k8 v0 @, F1 ?, K3 V    for (i = 0; i < upp_frame_size; i++)
0 T3 T% ]; Q. D' V3 ~    {
3 M7 b# h0 M- P6 N! z       upp_buffer_b =i;6 C7 N0 p1 i6 y' ], q5 Y
       upp_buffer_a = 0xDEAD;
  }0 J6 I" T6 p, l8 W    }4 p6 ]9 ^- v' h( R8 b6 b! o
9 _  O6 m/ X1 F/ x
    //for(i=0;i<1024;i++)$ g, i7 s2 m5 T4 Z" A0 D
    //    temp=0;, X3 z0 O2 m! M' ~6 c& [, h

; V! _: a. X% g: ~    //UPPReset();
9 q  [5 U2 U& F, d, ~/ ^' p0 i    /*启动UPP DMA传输*/
$ ^+ G! F! y5 x- s. _    UARTPuts("upp_prog_dma_i\n",-2);
& y6 P  `, i, H  |/ e8 H+ X6 S- F    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
+ g( i  L! Z2 }. Q    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 ]( `5 O: X* ?0 c& i    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
# G' o6 X% G) O5 b8 Z- n8 p: d6 k3 H8 ~7 U7 h$ {! W& I- ]  F
    UARTPuts("upp_prog_dma_i\n",-2);, e6 c  n* H5 r% _
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' b, O. U0 A) O9 M    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);' o" o# I9 R* {0 V  R0 I
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);! X5 [! p0 |# v' t+ g- o
* \+ G3 e: j8 j1 n2 C
    /*等待UPP传输完毕*/4 O0 O7 g3 j2 G" r+ `: {! h  E
    //i=0;: I) L9 b3 U; Z- O2 ~: H
    //j=0;
/ ?) ?) }2 \( m0 `- c7 @    while (upp_interrupt_count < target_int_count && upp_error_count == 0), h# Q0 H( z0 `1 p- R" f
    {8 z1 L; `. B+ V1 E* {- S" d
        /*  测试UPP传输的同时操作普通DDR数据3 Q8 e/ h0 Z5 J$ K( B  l6 I# _& r7 h
        temp=i;/ Z& M; ]) b; j- O8 \! e+ z
        i++;
. c& P; b) c$ q: [6 w+ F        if(i==1024)6 c5 K  ^% l& \# c6 {8 u& M' o- \
        {
  M$ c$ i* X" J6 V            i=0;: O& }2 A/ L' u  e* j/ d7 C
            j++;& ?# w3 {  ^* F  m7 ]* Q
        }! d* u: n9 Z) q4 H% E0 H
        */: M) d& u% E! n, |/ k: N3 o

$ n4 L+ A$ |: R" I       asm(" nop");
( m) T$ }+ w/ r( {
4 r% W3 q6 V4 R; q5 N% F       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 u. L' s: E) A1 ]& p$ F    }
9 _0 N2 Y, e' {1 O9 S  D  `9 |, J' e  K+ i7 ]6 D3 l/ {  m
    /*检查UPP传输的数据是否正确 (loopback modes only)*/5 R: {! d5 m3 B; j% O
    //UARTprintf( "i=%d\n",i);  s/ v. ~; `7 E1 U" f; |
    //UARTprintf( "j=%d\n",j);
+ J/ I' J+ \- B, C* |    UARTPuts("Data mismatch in buffers.\n",-2);
, k! n, U% q& l2 v) p2 \    if (upp_interrupt_count == 2 && upp_error_count == 0)
3 p& B$ k* k3 y2 H    {9 G7 Z9 ^4 \$ A9 v6 G. u! s
        for (i = 0; i<upp_frame_size; i++)
& Q; A/ e7 u) k7 t" |$ q: T2 r! x$ Q& T        {1 o) r! {" n; x+ e! N* z: b1 h$ a
            if (upp_buffer_a != upp_buffer_b)% c2 ~4 i9 u8 j: Z2 R; P( u( N! q
            {
- v; x+ E  F9 ^- L, X                upp_error_count++;
& C; B* ?9 j1 Y; o8 E& `            }
' q- F* K2 W; M, V        }9 l! a8 D- D3 d% ^
    }, Q+ P& f' n& p

* m% i9 B4 J8 y" }9 P    /* 报告通信结果*/' M- B2 a/ o* A0 J5 t  i
    if(upp_error_count != 0)
% h: I* A) y; ^# {6 R3 K        UARTprintf( "upp_error_count=%d\n",upp_error_count);
2 h, b- ]5 K: r: T1 u( A    else
7 B7 R' ?- l& k3 o8 a3 ?        UARTPuts("uPP transfers complete!\n",-2);
% J' ?4 n& S! Q; O( R4 T1 o" _) _5 w+ d6 i/ M; A
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);* N& ?5 k1 j; C5 H1 T
    UARTGets(ch,2);
9 m' E' L6 e' V& h( r1 S- J7 i1 a    UARTPuts("\n", -2);6 b9 i7 U* j8 r$ G# b& I) R
. a) ]9 u) P, ~$ {7 b2 f
    if(ch[0] == 'y')2 }/ H% p! E& T$ ]; h
    {
3 V& M" m7 y1 ]1 K0 G        /*打印全部读到的数据*/8 e5 p' B; @; N4 R: V0 m
        for(i=0; i<upp_frame_size; )
3 j( M1 P1 N2 T- {8 T        {
# c. ~% k7 ]" C  ]% ~            for(j=0; j<5; j++)' A$ j/ d9 o3 B- E5 `0 I6 o4 ?
            {2 }: _! h& ^5 ]
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
7 e8 l2 E' q2 u8 |  J- u: t6 w2 }                i++;
' n1 p2 e$ |  z                //if(i >= 4096)" d  T/ R9 y# b1 F- w6 c7 @
                //    break;
% c! s  H( O- m" m% r/ \4 k7 B& D8 A9 `3 H$ a
            }; \3 F0 H& D' @/ s
            UARTPuts("\n",-2);3 A- z" ~! [+ q2 D
        }7 b& Q4 ~1 Z4 _4 P1 j3 [; @
    }
) O5 q+ u; f  ?2 S8 T; O! H4 L/ R+ K( O1 t$ _" [- D# p7 J% n
}

, s: Q$ x# E# X$ [* W

. ?, q) q! `) B+ p, Q. T$ d6 e
4 k% ^8 S+ I! i  ]; [$ d
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
7 ?* ]2 D' [; A/ Y5 O  k+ S
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。" V" X# n8 K9 ^; g" v3 I8 B+ T





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