嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?, ?. Y- s5 Z% ~) b9 M9 t
Void UPP_TASK(Void)7 N) J2 i- O3 R1 T- m. U
{
# P( H/ X4 [+ V7 ]: q1 Z
8 y1 h" W+ V& g% k. j) }    int i,j,k,target_int_count=2;
% u& I- `4 T9 s8 l9 ^3 R# [    char ch[2];$ r. V  j/ q  K, \

3 g  p% k; B" j5 H  {2 o  Y  ~% {$ t$ |& v
9 c  }* Z9 G9 R. G8 e; @7 j/ T' b) @
    upp_interrupt_count  = 0;
, z' K  l1 G6 j9 U8 Z5 L    upp_error_count = 0;" J8 @. h! ^1 S6 t, y" |0 E& f! O
8 ^  p! H& _6 O2 g
    UARTPuts("\tResetting uPP buffers...\r\n",-2);! A8 u! Z4 Q& m$ S" X/ G
    // Initialize data buffers5 \! u( }" {; Z/ H% e
    for (i = 0; i < upp_frame_size; i++)
- d( |: j$ ^/ J$ n7 b# O: {. q5 f) A    {
; v2 v$ M+ h0 O  K( k3 {' K8 |5 R  J: C       upp_buffer_b =i;
/ O# `7 ]3 V/ X% h' [! _1 F# H4 o0 B. `       upp_buffer_a = 0xDEAD;, {* W# y2 Q5 D2 @7 _( J' P" o, p2 m
    }, Y$ L6 A' ~% a9 w: B  y

$ `1 C+ F: J. d- P    //for(i=0;i<1024;i++), ]; u" T  C* |
    //    temp=0;
1 Q) w+ R+ b: m& Z7 g& n; |+ n/ t; C: L! J
    //UPPReset();
) L; r4 z! Y: a! J6 T    /*启动UPP DMA传输*/
* {7 K# p3 |( a    UARTPuts("upp_prog_dma_i\n",-2);
: k* K: K$ b" L+ I! q    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
! m6 F% r* f6 |6 k    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ ?7 c) b. Z1 e+ X0 Z    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);# ?' ]) n! r; `; ?0 I+ N5 G
" F& L" G( ?; _
    UARTPuts("upp_prog_dma_i\n",-2);
  ?5 M3 E, z! ?6 v- o    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;: F" ?  r7 ~7 P3 b2 T+ d
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);; P5 h; K0 D3 O' ?* V
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! H9 o' c5 I4 N8 M- x8 O% C- w* P
    /*等待UPP传输完毕*/
9 D+ t0 `% _8 B8 r" K    //i=0;+ s$ ~4 l9 }7 q8 Z2 L& d
    //j=0;
1 A& M/ F5 t6 B/ |* |4 a    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ x. `1 T2 d, I1 y4 P8 V/ x    {; ?$ C) y/ O1 L& n2 n) e" y4 n1 u
        /*  测试UPP传输的同时操作普通DDR数据' O' }$ @! H% r0 d* P) ?
        temp=i;1 B# H; M, U% n% s, r* w
        i++;; p5 U1 {& J' g! h  ~. J
        if(i==1024)
- a+ m, b. H7 s7 H: b        {: J7 e2 V2 E* N
            i=0;
/ B0 d* t# |- g: V: s9 ~& J            j++;
. U! }- V& p' Y$ o( b        }
1 \% j9 k1 s' k: R) S. v        */% A  \$ s- g7 R. C4 |* s
! n0 c. P/ C. Y( T
       asm(" nop");8 c8 o0 o# m4 j! A
2 u: ]$ R. `! @+ {# J) Z
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 [( `7 i3 n; m' o7 C    }% ^+ l6 e6 ]# c* `& Y$ \

' y0 ?8 z( t. k3 O2 ?& j    /*检查UPP传输的数据是否正确 (loopback modes only)*/3 |- c4 t' m# _* r1 s# d
    //UARTprintf( "i=%d\n",i);6 k" O$ e: i0 X
    //UARTprintf( "j=%d\n",j);1 K2 v' K2 |& j. T/ R, x; H
    UARTPuts("Data mismatch in buffers.\n",-2);/ n) W4 Y# C9 x4 Q# C+ u, `
    if (upp_interrupt_count == 2 && upp_error_count == 0)6 V0 Q) m1 W2 W. y3 T
    {
! e. R$ O4 Z: \" Q6 T        for (i = 0; i<upp_frame_size; i++)" A; b3 ^# ]2 G
        {
5 B6 W) C! K" }6 F$ ?  C            if (upp_buffer_a != upp_buffer_b)
3 {# ?% A( e5 M            {
% R4 e5 h7 k$ ]$ y6 q/ s                upp_error_count++;
$ y4 w8 G9 B# M            }: k% W. K- p! _# T7 `6 ^
        }7 K9 R5 E8 B, N. P& E( D7 g
    }! L/ l% y4 E4 ?$ n" W. ]

, ^8 W; O* H) M0 d- Z    /* 报告通信结果*/, q3 p0 c' F0 c7 }
    if(upp_error_count != 0)
, a% `: m4 `7 U% J7 }" c) f1 G        UARTprintf( "upp_error_count=%d\n",upp_error_count);
2 P; j2 Y- |4 K9 @: G& l# x) e! [    else" [1 y7 M9 m0 ]& w2 R4 ]* C5 X# i
        UARTPuts("uPP transfers complete!\n",-2);
1 w' z3 S, c& \* b+ v
3 |+ c; }1 g- T" k+ g    UARTPuts("Do you want to print all the data?(y/n)   ",-2);; K/ Q, }! @4 l5 a+ s
    UARTGets(ch,2);' N/ b. r- r  n' k+ {% ]4 G
    UARTPuts("\n", -2);
% W9 c$ v$ X" A' S5 O0 n2 C6 ~
! E2 [6 |9 {" i% M9 u! q$ N" j9 ~) v    if(ch[0] == 'y')! q7 I: r# o# |3 ?: M6 R
    {
; p+ M! F  d% j. I# O& v        /*打印全部读到的数据*/7 m# Z; a& I2 W3 F+ U* z0 w
        for(i=0; i<upp_frame_size; )
$ d7 i/ h8 x: T9 P4 r; i8 I% v        {8 B) h: Q" e4 y! S: x. K
            for(j=0; j<5; j++)6 C% J$ k4 z, J6 L5 X
            {; Z1 u" Y  [: i7 e# f  @! B2 V4 @
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);  P/ ^( U8 W+ S, T8 F2 F4 b) X( B8 F
                i++;
, q6 y+ G/ r  }" b                //if(i >= 4096)0 K8 a# u$ o/ b9 `, t3 e$ Q2 E
                //    break;9 N  G7 ~, y5 ^2 I3 e

( \  m! A! e( \3 w            }
2 P3 b9 x, M  p: o" u/ `            UARTPuts("\n",-2);4 ?( @8 h5 A9 R0 h; o2 \
        }( Y3 V  I$ \9 u4 Q" i- g* U
    }  ~$ L, I+ v& }
$ _. s3 d, p0 L* N& B) x
}
8 H4 L/ I7 j5 Y) M

# V7 j9 ^$ e' I. |: T3 [6 A8 g- Y2 L0 d0 C  _& e& d

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% U2 \1 C# I, B( L
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。9 a  L; X$ a* _( y8 A' C. z) v





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