嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' s4 ~& D" {5 r3 |
Void UPP_TASK(Void)
% ^8 V* h( R+ i{
& y3 p+ c$ ]3 p2 `
# s2 r+ }% l1 t4 p    int i,j,k,target_int_count=2;8 ~! g! F9 m6 k4 x' e
    char ch[2];
  N) A* L+ V' @1 a4 J( g% n
  M& s( y3 j& `
8 E$ b% z% n- m
* O9 C' p' J" X4 }9 B& K    upp_interrupt_count  = 0;/ w" n5 t0 [- Y. k
    upp_error_count = 0;
1 k) ?( z: l7 e5 V$ g& @
( ~  \( l* W% n3 G' m    UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 S! `+ H0 c8 T9 ?7 M, X    // Initialize data buffers
- k" f1 Q6 K' j4 o) f    for (i = 0; i < upp_frame_size; i++)7 l( X/ v, ^9 E9 ]8 P7 G
    {: C; M+ B% H4 q, i" S3 K+ w2 j
       upp_buffer_b =i;/ @- ~7 y0 ], I
       upp_buffer_a = 0xDEAD;
% i, g: y3 }9 f4 D5 E; Z    }# [. D9 `* Y/ _5 Z( T) k

- M0 a+ C5 K) |    //for(i=0;i<1024;i++): o) X! @2 I, ]4 E; Z2 C
    //    temp=0;/ v: O( w' q$ M$ c; j
  |1 h  N5 P: z6 e  D
    //UPPReset();1 a1 Q/ w" h/ _* B
    /*启动UPP DMA传输*/
5 |- v1 W& o8 R( w1 \; S    UARTPuts("upp_prog_dma_i\n",-2);
. L8 q5 |: w3 w& z& P    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;( y& p0 a7 @' V. w/ X2 e
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);4 w7 R5 H5 p' \6 A& e! K4 m
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);9 n( u- V9 F7 S$ v8 I
. Q0 U0 d. L, J8 x# K1 [5 C
    UARTPuts("upp_prog_dma_i\n",-2);9 L0 w. P$ O' J8 ]
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;6 L. C% v$ {7 m, T; i& Y$ l; d
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: I7 l: l) l9 j) a% W9 W8 P    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);- V& R' P9 W# K/ Y6 U) z
' z# r. X% I& f" E9 G3 r
    /*等待UPP传输完毕*/
5 h  j1 |  j% t    //i=0;5 o! E* F" E/ R0 o6 y5 n7 n
    //j=0;
4 ~5 @: v; Z  y  l+ p# }    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
, |! b8 D; i& x6 t    {
* d1 B8 n- Z, q! d. i3 ^! a        /*  测试UPP传输的同时操作普通DDR数据
/ ~6 E3 B! ~5 ~' `) |, u; Y+ \( l        temp=i;6 T9 L( r+ G8 w& F) u6 n
        i++;: w) \. R' n+ P/ G0 x
        if(i==1024)9 {4 Q% c0 G4 H  [& C; V1 I
        {0 s, j8 S8 e+ P
            i=0;% B1 k& C% O1 n0 x+ j# X1 R" y& B
            j++;% ]* o6 L9 h, j: r, P
        }
) W3 F6 Z" k) H$ e        */! s8 I3 R  K# I0 B- Y$ x  n- ?' x2 z

: H5 J% B7 J9 t$ |4 A! ]       asm(" nop");. G3 @, I1 k; K0 o5 n# F8 e6 g
1 n, s' A3 r6 Z7 B
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
: Q; |! i5 a/ }$ f0 t' _    }4 v7 w+ S9 F% b
' x& G4 X& N( K: Q; C9 `8 V
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
9 k8 [1 A4 H4 |9 n0 H0 r3 q! m2 o    //UARTprintf( "i=%d\n",i);
7 H7 N8 g( `$ `+ T: L( d2 C    //UARTprintf( "j=%d\n",j);0 B* a, ~" c' P8 T7 t: `& X- z
    UARTPuts("Data mismatch in buffers.\n",-2);
# }: u4 ?1 U- c3 @' x( i    if (upp_interrupt_count == 2 && upp_error_count == 0): ~- L8 n1 X' _) ?+ Q
    {/ q" C! }' h0 J: y5 H+ }
        for (i = 0; i<upp_frame_size; i++)
) d& @+ U2 y0 x. K        {
# W0 F, n% ~8 A3 A* h" r            if (upp_buffer_a != upp_buffer_b)
1 u) y: {% v: G5 s            {6 p: `$ Y# Q% M4 q0 D
                upp_error_count++;
+ M. X- g, \' d* @            }
* z$ b" t4 u" R, }" j4 |7 E        }
" G# [+ }1 }4 I- S  ?! R- r    }, a0 }' ~6 d  X2 Y
$ F% ~1 w2 z5 ?5 A2 s2 u9 y
    /* 报告通信结果*/6 A- B1 v) G; ?, j! ?- C: K7 |
    if(upp_error_count != 0)7 d9 Q" @3 o8 [
        UARTprintf( "upp_error_count=%d\n",upp_error_count);3 ]0 P* X" e, ]* j* o
    else- e& n9 P; K% p9 E
        UARTPuts("uPP transfers complete!\n",-2);
+ ~  @( Y" e1 d7 c+ d0 M! V$ Y& K" x& _) ^3 ?* b) ]6 r
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
" R6 S3 u: R* k9 y- O- N- w: B    UARTGets(ch,2);0 g0 K! l( t* }+ U
    UARTPuts("\n", -2);
5 ]- Y' E  j, f" f) r' X
) S3 V5 H# z$ |. L  E5 l    if(ch[0] == 'y')0 c9 h6 c# G6 r( s7 ]9 z
    {
  E% B- @7 D$ R2 x- G- _        /*打印全部读到的数据*/1 P& Q  s1 y& F$ Z$ z) w4 q% d
        for(i=0; i<upp_frame_size; )
9 [, h4 O- z" M        {
, X: g1 l* W2 i( H/ G            for(j=0; j<5; j++)
3 [. K3 h# v& G' f+ C3 Q            {# ]- a) l: }7 e1 Z) U( s: W
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
1 ^! S; s# e* x3 u. K5 }' u' [! H4 ^% l                i++;
% E  \# W4 v6 a5 E$ ~  I# n                //if(i >= 4096)* j: J- Z" G( Z9 S( f# F
                //    break;# I% B# c5 e" D# ~+ W/ V  R
$ Q0 W. `9 |  ?9 e
            }+ s$ l7 N& r1 |$ q
            UARTPuts("\n",-2);2 k( {; s# I8 K% X" N
        }$ X6 ~9 z1 T2 c: e* V: I. v/ K
    }
& [+ n5 Z  N! j5 ~1 j8 A/ ~
' T, j1 g/ g' _( `" S}

. U2 j8 |# f. d% @

0 C- h* P1 I0 E2 V$ |5 z- H, a
! _" w4 B* ~% C$ Y
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
5 p9 P4 t1 Q; _1 V3 K! n7 l
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
% V3 i/ S! e  H9 g. k0 w




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