嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 M* H5 o4 V+ ]' I( q) W" |& H1 g, O
Void UPP_TASK(Void)
( c4 M8 `0 A! d{% z( T6 d0 T4 g1 g# t+ r9 H6 m

5 j' j8 u& o* a3 M1 J1 ]$ L    int i,j,k,target_int_count=2;
: w* X. I- O! J; x5 ~0 v    char ch[2];
+ P7 O' E# T7 ^; p) {
5 W/ K7 c: X3 F2 `
' W1 O2 `! k- |
% b" T4 o$ |- X% y6 V( ~% [  p7 K" t. M% [    upp_interrupt_count  = 0;
2 m9 E9 I1 J, v    upp_error_count = 0;& g0 Q, j) [/ p

3 p3 A# q* T- f9 G8 j    UARTPuts("\tResetting uPP buffers...\r\n",-2);/ n4 P* B) [: z' J# h+ U- s
    // Initialize data buffers. A, Y. U3 o, N$ _
    for (i = 0; i < upp_frame_size; i++)- K" H/ i# S2 l% s, y
    {
$ k, g: w4 A4 _! X       upp_buffer_b =i;5 j5 V+ i  n& m8 U( y0 \0 W
       upp_buffer_a = 0xDEAD;5 Z. c  _5 Y5 m' K
    }2 k; G. |, p5 H5 M+ J! ~
7 v7 ?$ Y' F# W1 I" a5 V
    //for(i=0;i<1024;i++)
9 u# t* A9 h# |* B. s& q1 |. `" y    //    temp=0;: G& L0 T. ?# y& g* ]  ^
  [( f6 t7 b$ x; X6 C/ v1 c
    //UPPReset();
3 |9 N  |3 m  |# L5 d    /*启动UPP DMA传输*/! l) F" n- P) x, ~) Q6 X- I
    UARTPuts("upp_prog_dma_i\n",-2);
* O+ ~6 r" y0 I1 @$ z7 B- y    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 H, J* M$ I) i- U. F    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);8 [6 v$ W3 `9 B, W( Z9 z
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( K$ |2 L, i, K! x
) o& v2 A! ~, L0 y$ T    UARTPuts("upp_prog_dma_i\n",-2);
$ x5 y1 d3 ~" ?7 C  n% t' I    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ N! C1 }- d- Z" r1 ]3 \    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ A" t3 n  H6 ?9 U; V! k4 d    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 j  e, a/ v3 T% @2 {
, S+ O+ ~1 p) C% P- }    /*等待UPP传输完毕*/
& {" p. |& h3 ]$ Q    //i=0;
  z5 d% g/ d. \8 Y    //j=0;
$ H4 {; I2 X; `1 l9 p5 `7 z    while (upp_interrupt_count < target_int_count && upp_error_count == 0)) ^* }4 H! }% h
    {
& _2 _; H" D2 P! ^( N        /*  测试UPP传输的同时操作普通DDR数据  I+ A. x: Y$ q* P5 [, N
        temp=i;5 f; f" r7 a# @, O1 Z9 j
        i++;( Z& Y/ X2 O1 C
        if(i==1024)+ L- o" j2 G* Y- N4 m
        {" g* Q+ F* a  w$ P& B. X3 ]1 ]
            i=0;
- g/ j. i, O7 a0 k4 a+ t% {            j++;& f# |9 ^  Z+ r# {- B  c
        }7 V. r4 ]  Y- M! X& d1 _
        */  Z7 V  r1 J: q/ q; v) r1 k' k
% q# O; K8 R1 D# Y0 F  d* e
       asm(" nop");: f% V, M- Y" n* Y) o, _+ [

9 f+ K6 u& V$ V4 m, `  A+ W# t       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ d+ d8 A, B: s4 q    }
% \1 L/ D7 ^9 l; }/ l. v* u' \; Q! f" Y  l: |
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
. }3 r! G% Q/ R    //UARTprintf( "i=%d\n",i);4 r. O9 G! z3 D/ p* o3 s. M
    //UARTprintf( "j=%d\n",j);
/ I6 A  d8 l" m3 C    UARTPuts("Data mismatch in buffers.\n",-2);
# O9 P  t" k% L" g! Y, c, i  F    if (upp_interrupt_count == 2 && upp_error_count == 0)
5 M  K2 Q4 C+ }- |( I4 w( u! u    {
6 c4 [+ o5 a7 Z* ]3 v9 J. A4 C        for (i = 0; i<upp_frame_size; i++), B0 b/ p( C# D8 C
        {
1 J$ M# `" @& b2 F" [8 w: c5 f$ Z            if (upp_buffer_a != upp_buffer_b)1 p0 g$ F1 b& g0 }
            {. y; R% b( [" ?4 K
                upp_error_count++;
- m7 x! C9 O: `0 Q            }
# e0 [0 ]- q# \/ Y$ _3 N# B        }
& w$ {' ]4 e4 V, {/ w    }
* h- O5 G6 A# E) e2 x  j% H$ \+ I$ O6 B* C! ^/ n. k4 I$ G
    /* 报告通信结果*/
* `/ `; Q+ i, ?    if(upp_error_count != 0)
' W2 \9 C, S1 i& ^+ e: W7 @2 ?        UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 T6 H/ E: a+ E, Q: Q    else
& d" P7 ]5 s; R8 [! X6 K* B        UARTPuts("uPP transfers complete!\n",-2);
  v! Y# V# I( z0 ?- Z! f. ^$ r2 ^- ^& r9 N2 ^( b
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);5 G; c  k% S2 f
    UARTGets(ch,2);% f& F1 t1 K+ q
    UARTPuts("\n", -2);' {; H  h% ]0 l

" e# X0 l# e+ j1 ^" D    if(ch[0] == 'y')$ l+ H/ j9 K) C6 i0 z. F' c
    {
0 p  w2 ?! r0 @) d* x7 @        /*打印全部读到的数据*/$ _3 l% W* i$ J
        for(i=0; i<upp_frame_size; )  e: _; \( H7 K+ Z6 t! V* |6 T) h
        {
, c" k# y' U1 M( ?; N            for(j=0; j<5; j++)
) Z6 q: H4 [+ C: E: t  g4 s            {* e% s+ d, ]" q( Z9 `
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);0 Z) A3 e% ^' y& D3 W
                i++;
( D7 l; f, w8 i% _1 l* B( o                //if(i >= 4096)
# e2 _1 M# O5 x( \                //    break;
$ I1 V' J6 m  }- Z. A  @; v! `4 @0 M3 @
            }
( \5 s3 o) g, F+ j7 f7 P; {            UARTPuts("\n",-2);  L" G# Q2 ^5 b, Q0 E0 W
        }( h6 I" [9 J$ z& X' m
    }0 M4 {; g5 P3 n$ _& N: m! F$ w/ w* h) O# s
' L$ Y3 f4 g/ K6 W, N
}
! E/ A) `2 h0 A9 g  m" I+ m4 Q
4 v! C' w8 J- z% i0 V
+ z" y' a8 g; g

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
; `, i9 O3 ~% j$ k
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
7 p; u" M+ N& _3 b- r




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