嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- F% j3 x; h& ?1 a) @
Void UPP_TASK(Void)
. d6 E3 I4 h' H! d. m{
4 X' u1 [4 h7 _! ?- A: y; E/ t" Y* r3 T: q5 C: L8 C" b! n8 X
    int i,j,k,target_int_count=2;! i' H0 Q$ r& ?+ o6 f
    char ch[2];' l6 y0 E8 B) ~5 u6 {

' z& m, F8 B" g; C6 Z, Z9 @& l- A' ~3 \
' ?/ C  P$ r- }
    upp_interrupt_count  = 0;2 {" L9 R% T: u" }' W+ h8 o
    upp_error_count = 0;3 z; c6 P4 P* i, w
% @2 J, W* J+ S" F
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
. ]# t' |! B  X    // Initialize data buffers
$ U: B* D7 H% p( C    for (i = 0; i < upp_frame_size; i++)7 s+ u" _9 i$ i. [, [
    {
$ K  b& A: G$ e( J       upp_buffer_b =i;
2 S7 A8 Y. C# u7 u       upp_buffer_a = 0xDEAD;' B! I" }$ t5 W
    }
2 H; P& I! n( r& k9 s7 F
7 {! K3 M$ [! R' I    //for(i=0;i<1024;i++), Y  E0 A: {1 |6 I( ^+ _
    //    temp=0;% `6 q2 K6 I  C% \# F) O

: n( g. S* f0 Q- d4 {; S* X# E    //UPPReset();
* `# ^: d+ J- n4 `    /*启动UPP DMA传输*/
  |" f0 ^# `5 \7 }0 ]$ F- {1 d/ ^/ o    UARTPuts("upp_prog_dma_i\n",-2);" |1 q! H: V, ^( ?/ t, C' o) ?
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;! i1 g: c. s% g# A3 U. ~" _8 b0 o
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) a6 M4 Y/ I, H6 J0 J: b* ~    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);' ~0 n" }* B. G8 ?) _

7 g$ m6 y6 G4 Y8 Z    UARTPuts("upp_prog_dma_i\n",-2);5 I+ k1 g  k! W& U0 @& u. S
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 Y) h9 E& |1 e" w) [6 W- W0 m    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);) D, u  h$ P5 |3 H  U4 M/ `
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);' d9 f* W# g* F* Z% K% H
. O# H, O6 [9 x: M* q
    /*等待UPP传输完毕*// \4 r- R& ]0 X. S; S; K
    //i=0;
0 l& m0 G9 F! Q# O& g* Z    //j=0;
; }3 ~! [# i  [0 K3 u" W4 _* Q6 T6 j    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
$ Z: w- b: b7 X8 ]  L# Z, C  F% _    {+ e7 g- d$ r# e8 H
        /*  测试UPP传输的同时操作普通DDR数据& c9 o2 Q4 B; a% H
        temp=i;
! B$ S8 v! C( p  F5 ^' O        i++;
* {4 W3 Y3 G+ y8 u" s8 A        if(i==1024)
0 P) j3 l9 ~* G; D        {
$ h5 ~) f/ M( i- y( o            i=0;7 e# n& @) [! L; x- W% f/ i% Q
            j++;
7 i" H4 L% R7 U* t4 Q        }
3 s7 a* G& x' ?/ T: c$ @. R        */
* W0 i5 M$ s  ]# E3 {; i( u, p9 d( {# Z( v
       asm(" nop");
/ S/ b: }% y1 p  H$ k' c0 S' g; D* X8 A$ O$ B
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- Y, L  C, j7 S- Y( w  x    }
" Q& l! `- x  v, p/ F" \  ^6 m" W" m' N; w
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
- ~6 o5 @- w9 G! F9 o8 P    //UARTprintf( "i=%d\n",i);
# I. m+ ]. |6 I% e    //UARTprintf( "j=%d\n",j);  f( q9 _% j" f9 ?) \
    UARTPuts("Data mismatch in buffers.\n",-2);+ k! e: L0 \. h7 A
    if (upp_interrupt_count == 2 && upp_error_count == 0)4 g) V  V" M# d: R  x5 q1 E  L
    {$ _9 Y  D4 d0 @) V! U+ G; p, O
        for (i = 0; i<upp_frame_size; i++)
8 K. Z  M# s$ B, l, U        {
, X+ W) J+ G) [, c1 x" f            if (upp_buffer_a != upp_buffer_b)5 k0 I4 o* p+ ~5 {9 `4 u$ {
            {
0 w& l5 r8 [7 F                upp_error_count++;% O& g/ Y! v  T; S0 P3 I
            }
. V2 t5 ^3 M% X. o        }* ]4 \% f3 x7 C: N7 |$ c
    }
7 K: O; u4 u, i" I# ]+ c5 H7 s6 k8 H
    /* 报告通信结果*/
: l7 M: L1 x2 e. D& s, f! [9 Y    if(upp_error_count != 0)  H2 ?3 [  F! {$ u4 b: t5 x0 v
        UARTprintf( "upp_error_count=%d\n",upp_error_count);3 X. _# h, f8 e" j/ K
    else+ P3 p& g& N+ @, y7 a: D3 _
        UARTPuts("uPP transfers complete!\n",-2);4 x1 ^" `7 E' ~; g0 T+ @/ D

. n9 I( N3 w) u: d    UARTPuts("Do you want to print all the data?(y/n)   ",-2);9 }# F% K! O4 r, Q
    UARTGets(ch,2);" J" e. v5 N( P0 u. w$ \; q1 _
    UARTPuts("\n", -2);
3 U7 o. i, d3 S" Z% C0 C2 i, A2 _) `  ~2 r7 A
    if(ch[0] == 'y')
6 r" u2 C2 p1 H! z" D/ x    {# R" Y- q; O% i% V. t
        /*打印全部读到的数据*/
5 q! J: X1 u+ ~: P2 `        for(i=0; i<upp_frame_size; )9 s. X, u" s8 c9 ^: }
        {6 Y' D  R" Z) R2 E5 g8 j
            for(j=0; j<5; j++)' E+ ^$ q1 E, i
            {
. ?2 d  e) D; \- t, b3 S: L6 W                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
, n, u( I* j! u9 z                i++;3 \6 `4 h8 r. d. [, A; c' y
                //if(i >= 4096). T* n* j, ~8 \- X/ d/ z7 J2 ^
                //    break;
+ v9 N" J. o$ k( H' M2 H! {  `. E2 q0 `* H' A+ K
            }
: ~+ p0 q' F$ d) m            UARTPuts("\n",-2);
9 T, O% d. \- P8 ?% r1 h2 b        }* Y8 N$ l1 d6 X" @
    }, t) G  D  m0 t* i; p

0 a( Y8 t( H7 J. W+ X2 |6 G* `}

8 C7 U$ G) w4 |; r5 b+ t

- V8 q  ]$ F$ h2 ~
6 M8 n9 y( o/ ]2 e& a% h
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
4 T  T2 u- z& H+ }
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。: q( a) o& a+ b5 r8 ]





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