嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?# s, I1 U# ^. a0 V9 y# |" ?; j
Void UPP_TASK(Void)
  Z* M% Z' Z; {( C6 X2 `{
# P6 s% U; v# l# g5 [: G& V3 ~8 y# }1 O' L# E3 ?
    int i,j,k,target_int_count=2;& c3 h1 j4 d, p5 t5 Z* c7 s
    char ch[2];
+ n! }4 o4 J, ]  N) u1 \$ G8 p( t) m, V" }( y
8 }% l; m/ d4 q, o7 e

4 x8 N7 e, f& N/ v1 H    upp_interrupt_count  = 0;/ n. l& c6 X. Z
    upp_error_count = 0;
7 C# E+ C. X# ^$ }/ m5 D
8 f  A5 C; j! \* Y8 ^. g5 H    UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 Q& R& ]- N4 e  E    // Initialize data buffers
4 ]2 O, `/ v8 E& S! P1 v3 {  A& y" ^    for (i = 0; i < upp_frame_size; i++)/ ?4 R3 V' d7 j$ s. \$ z
    {
4 t- ~$ i" v/ J; ~1 e/ q       upp_buffer_b =i;
( F) Y9 X; c7 ?( O; D       upp_buffer_a = 0xDEAD;8 S' f! j8 U4 \0 M" Q
    }
% l5 [5 ?% R% w  ]8 F6 N4 V  t' H' m% S3 z* R
    //for(i=0;i<1024;i++)
' z- i, r" f5 q4 W+ b1 _2 }    //    temp=0;
. b" X! b: m4 |; D, D$ y" F4 G# X0 D
    //UPPReset();
- O" U: v! U  K# H; q7 v; f3 H    /*启动UPP DMA传输*/
% b1 K- H- [! q  q% n    UARTPuts("upp_prog_dma_i\n",-2);7 d/ l& m' M. U
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;6 ]4 C/ U. |2 ]: i  t
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);  x( ]# \4 b6 e" t
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);" C9 I7 b2 O* S% R  O( z

  t5 G% A3 F& f3 G; Q" I    UARTPuts("upp_prog_dma_i\n",-2);
5 w6 }; ]+ H% z9 |# O3 T! d1 }    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;  f6 Z/ E% m2 k1 d% X# j
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);) L) \: D+ q6 D9 n9 A6 U9 V- {/ w
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; p# S, P) [- ~9 n4 [# S0 v7 ^4 s. f. @' a9 o6 F, j$ A. s: C
    /*等待UPP传输完毕*/
6 b. x( J. w( q# w0 T& ^' D    //i=0;
: b7 H; E) E( v% |0 y! t    //j=0;/ K% a4 u2 b! A& D
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)+ l; i% l+ U7 }. C
    {
* c! O( W% Z" [$ Q6 O+ _8 E1 r: m. A        /*  测试UPP传输的同时操作普通DDR数据
4 T+ S* K, t, {/ t6 z# [        temp=i;
" v' T% \- @& z& I8 v" e8 U5 c, {        i++;
0 `5 o. B. u$ \& y        if(i==1024)- [3 I8 I9 w& Z
        {
4 T1 S. B5 W% Y  C* y) N            i=0;
0 t( R; b& ^4 q, M            j++;- m+ ^3 x2 W( u/ a2 f" G
        }
* U6 w6 W+ M0 ^4 v( ^        */
5 C9 n" P# O/ P6 ?1 ]7 u. C: G! S* d2 q0 P7 H9 a
       asm(" nop");8 u( T; P# b% u

0 I9 r+ ^5 _8 D% H       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' `2 U4 O; b" k+ i0 H+ M    }3 D+ {) l) B8 _! W
" Y. ^1 P1 A- z$ K: `, g
    /*检查UPP传输的数据是否正确 (loopback modes only)*/6 M$ A6 U" O" S3 E
    //UARTprintf( "i=%d\n",i);, x$ J: S7 L8 F
    //UARTprintf( "j=%d\n",j);
1 P3 F: T3 p' `- R8 m& ?! |4 o    UARTPuts("Data mismatch in buffers.\n",-2);; r+ _" ]- ?0 R( w' n) r
    if (upp_interrupt_count == 2 && upp_error_count == 0)
" g# K$ }; `8 J, \    {  R! Y: a: v( L9 b+ p  |, d' l! M
        for (i = 0; i<upp_frame_size; i++)8 c( Q, P* V; O' v& ?1 `% U
        {0 K4 c/ t% p, k" \# I
            if (upp_buffer_a != upp_buffer_b)
- g5 ]4 n/ O' S9 K" Y& E% M& z            {9 }- _( v% c+ y; i. I
                upp_error_count++;
" T/ o5 J2 B% _( O            }* E3 ~4 e- Q; k- g! r# K! C: {
        }
4 d5 t5 X: ?$ x: }5 e* c    }* ?/ u, A* w& r

4 N" W( z9 I5 X2 U1 Y' `, t" H    /* 报告通信结果*/
* v) v/ w; g5 N9 \    if(upp_error_count != 0)
1 P. u3 B5 z8 \        UARTprintf( "upp_error_count=%d\n",upp_error_count);
* B! v1 \, d: P$ u# L) V5 V) N; C* N    else) \: z2 D/ c" Y' r" r
        UARTPuts("uPP transfers complete!\n",-2);
8 x' U7 M$ I3 R1 p* Y& ^/ {# o9 h* j3 D8 ]' n
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
: x* k, s* v% N" F    UARTGets(ch,2);
/ w, D! o2 w0 x& j; B7 y    UARTPuts("\n", -2);
& T" `8 L3 F7 n9 N4 q& b, z& X" {$ j% v" l6 V' k' T+ C
    if(ch[0] == 'y')
" f1 S' F' M& z& h    {
( u( U* f' q3 S        /*打印全部读到的数据*/3 ]5 G* `4 _2 p! m3 i. P
        for(i=0; i<upp_frame_size; )
2 [7 x  y$ w1 R2 M3 d: W; ^  S) Z        {$ f& v, S% T+ J- z! A- v3 e# l" W
            for(j=0; j<5; j++)3 q' _; e5 ^2 x
            {6 V& o: l; q5 I) g* S9 ~" f' e
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);+ \# k* ]: ~! I
                i++;2 \; i3 D9 S  w
                //if(i >= 4096)
2 I8 U% q) q" A6 l5 Y8 `                //    break;
- C9 c6 D& O! `* v7 k+ D6 G% ?1 u$ g3 H5 x/ {- z) p2 m# q# F& V
            }
* R' x/ r" |. p            UARTPuts("\n",-2);
$ @6 c8 X1 {1 Z8 m2 H, p2 v- g& X        }) ]8 ]/ y; l) L2 l; z
    }
* D, C) Q+ I& z! f8 b% m7 c% \  P% [! d7 ~8 F
}

2 m' Q6 t; }0 r$ j+ x

3 h! R) G! J$ c- g6 p. o
  F4 a) i. X3 W) y7 z
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。  L; [8 L6 c: L- N; ?

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 G( a& v+ N% H5 m( w, Q  k3 ^' V




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