嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ p' A# w  c  e6 r# t2 q
Void UPP_TASK(Void)) \5 R/ ^+ [' u4 S
{
1 Y7 s2 p( {. z8 J& e( `" t: F/ t3 @0 @$ I; B1 o! x# F" ?3 Y1 H
    int i,j,k,target_int_count=2;
4 e% N8 A! I3 I    char ch[2];( `; j( I# }; i
: Y3 c: z8 g7 `
! r- M; S9 h2 {
6 n; {: k* A1 |( Z* D8 b
    upp_interrupt_count  = 0;
+ V2 k, r% H% ?3 f+ D$ q    upp_error_count = 0;  w( m5 K2 [# o9 _- K

3 i! Z7 G0 U  E9 Z    UARTPuts("\tResetting uPP buffers...\r\n",-2);
/ w$ y% T$ i, a% A    // Initialize data buffers
) h9 u. ?2 a. I4 W7 _& n0 M0 O# o    for (i = 0; i < upp_frame_size; i++)
0 V* s/ }7 K3 {4 X/ K5 s& Q    {, s  Q& p$ _9 f6 k/ x1 J( i6 t
       upp_buffer_b =i;
6 O- L4 u! u) Z8 X; k4 _       upp_buffer_a = 0xDEAD;
9 Q  M& [8 f/ }; B, h    }
2 f3 z. k* c% O" j7 f, Y3 s2 A" U# U% u6 d
    //for(i=0;i<1024;i++): q9 @/ D* H' N. V0 d: G. z8 x7 }, z
    //    temp=0;
) l8 }6 J9 k$ p
4 ~6 S8 K/ [7 D7 k6 T! o4 I6 {4 O    //UPPReset();
: d$ b4 a' j" s0 x    /*启动UPP DMA传输*/
! J& T; j& F$ {6 R8 D6 ]1 b% V    UARTPuts("upp_prog_dma_i\n",-2);2 _7 @& [( K7 j* \
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;" Q' n1 X, f! `* C0 {$ j) _
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);7 T6 }: z  ]$ j5 X
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);- G0 X# n, B; H" b/ @$ D) z
) L2 j* B5 q5 S, }" e  k
    UARTPuts("upp_prog_dma_i\n",-2);
6 \# ~9 f6 M' X* j    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;* }4 i( e0 u, N  l! h( E, }
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* |' W# G* f: `5 K# |
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( A7 l: o6 A- o) [& M, [- {1 }. P, J4 H+ W2 K& K9 W5 |: a- r" q
    /*等待UPP传输完毕*/9 R$ F- q+ ]7 l6 l; r/ ~
    //i=0;
8 @2 ^) Y8 {+ Q( [$ N+ O2 G! V3 Q3 i, r    //j=0;6 d: y% V& @; i8 b/ X; j0 f4 d
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
  U5 B, b: @* E0 Q2 j: @9 k    {
7 Q# C* o! K! x1 f6 _        /*  测试UPP传输的同时操作普通DDR数据8 R1 h2 t' H6 a" h1 S" r5 h, b9 E
        temp=i;
: j( }6 Y7 G$ L( A4 U- N        i++;5 l4 z# g4 a" {% V2 r
        if(i==1024)! y3 O8 Q7 R! [' [6 k# J0 i' p
        {: C. i$ _( X7 W0 I* H
            i=0;
5 }% |+ f6 t9 i6 J% G            j++;
& G& ?0 w$ U1 t0 C; R        }
7 x% w" Q6 z: u. ~% w# r# F        */1 F; \/ M+ J( t) c

4 Q. _1 i) j  r& D       asm(" nop");6 C" d" W0 k0 q+ s
# V+ o6 `9 n3 @
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);4 t% ?0 }; W- Q; Z2 Q
    }
' Z: c% m/ M9 D: `  ~7 v* N% j( @
2 g- z$ L7 k( \; P2 ^8 N    /*检查UPP传输的数据是否正确 (loopback modes only)*/
4 L# D6 t4 ?. b0 k- ?: @    //UARTprintf( "i=%d\n",i);  [: |  q5 Q5 P8 A! f( u
    //UARTprintf( "j=%d\n",j);
6 s2 s% K& J) ^7 r  K- n$ Y  Z    UARTPuts("Data mismatch in buffers.\n",-2);
5 {8 W' P9 t3 o- |+ P    if (upp_interrupt_count == 2 && upp_error_count == 0)
3 P) H) O" j( Q8 P5 u' O4 \    {
% v9 W  R* {' @, n- O        for (i = 0; i<upp_frame_size; i++); E7 s* G1 W: W/ u6 M; d! K
        {
- h5 w* n% h4 B+ K+ {, [/ `            if (upp_buffer_a != upp_buffer_b)
0 z8 X. }! L, p7 j0 C( x/ D1 M            {! S4 P' P- U5 H7 M' S" N2 R
                upp_error_count++;
/ J. Y4 \2 C: g            }
$ ?: M7 L' \$ L. m( E5 S        }, I: Q$ W6 _4 x
    }( w5 z! P1 G8 e9 E
, `. T. s) u4 Y9 i/ l9 F2 f& r
    /* 报告通信结果*/% k  K8 ~2 F+ C) G8 y
    if(upp_error_count != 0)
: J) T3 d3 X# n; J8 B9 O: Q2 U' ?        UARTprintf( "upp_error_count=%d\n",upp_error_count);
& r  E5 k' I+ X    else5 w' x, l1 D# c* D, N" E
        UARTPuts("uPP transfers complete!\n",-2);# s; y4 p& Y1 }0 @* |
( V4 V* q& K6 V4 l
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
- X  z" p( ]9 c9 P) ~, \    UARTGets(ch,2);; S. y" i0 H! ?% ^" c7 n1 T
    UARTPuts("\n", -2);
2 @$ x" x, U' R! f# w0 `  d" ~
- H% A( s3 v$ F- j( B  e    if(ch[0] == 'y')3 x! m# G, \+ F
    {' _; P% ?& Q. X' w
        /*打印全部读到的数据*/3 C% L- e0 `+ H9 h& {7 S$ A
        for(i=0; i<upp_frame_size; )
& |$ B) v' w/ r8 ^        {! \9 J. X6 @% R* U7 q
            for(j=0; j<5; j++)# L" j8 ~* Y4 p# s) I/ c* a. g
            {
% l) ]- x% F& m  E, _1 H                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);* H$ g/ k) W6 ~- f3 |
                i++;# O* q1 T) S) s  f$ q( ^
                //if(i >= 4096)
1 u! o) Y( H1 y: A! ^8 ?4 P6 z1 L                //    break;5 }" d9 I  S  x6 e6 F# [
1 Q  ?$ u4 r2 r/ N
            }* g# T# c$ h1 \- h  D1 n0 F
            UARTPuts("\n",-2);3 F4 {, }& |. P, C
        }
( j7 r% t0 Q9 V4 o  ?; E& Z    }' ]) C: C! L! F' h
& c' W, g- M3 B& N
}
/ R6 d$ s0 T9 h) n
* X9 S* f: N, Z* Q2 T. Y

. f+ l% p8 o9 M! h- H/ n; k
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。" q( R5 F: {$ h/ [9 R

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
  K  T" E4 _" s3 G1 ]  C1 x




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