嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( m- H" G6 {( I. W  U* N" F. P) ]
Void UPP_TASK(Void)$ Q4 a# t' p/ m" C7 O
{
# W( _! r# I, J# j+ n5 H0 x
- P9 w. F7 p/ z  x0 H) l1 ~1 E    int i,j,k,target_int_count=2;
5 y  L" k; ~; k    char ch[2];# c8 A% C* u6 B+ ?. e8 ~4 y' ?
" A# `% i2 R) O# g
2 Y5 P% M7 h; ?4 S: @4 f5 ^' E. l/ Z

$ @( M: i% f! C- a% j' W, P3 {4 M- F    upp_interrupt_count  = 0;
7 ]+ t; _0 r# Q, X    upp_error_count = 0;2 V  c' P" Y" d' |

( |% x7 u0 |9 }0 f- L& e8 D    UARTPuts("\tResetting uPP buffers...\r\n",-2);
. v4 a( H4 R% N6 w2 G/ x) P9 _0 U    // Initialize data buffers
; L3 h8 M, q+ O7 B' R- D5 ?$ H    for (i = 0; i < upp_frame_size; i++)
  ~' D& }! d, W8 A    {
: A3 K7 P' Y5 Z. f. r. j- @       upp_buffer_b =i;* L, S- I1 p5 U8 V1 n; D% B: J4 S# ^* l
       upp_buffer_a = 0xDEAD;) O% s# U! @& n9 K" W* }
    }* N7 c4 w5 B" a/ c. D
7 o0 X. j' f, r/ }& O9 y" {7 j- }7 h
    //for(i=0;i<1024;i++)$ \/ }6 k, C4 k) u9 O
    //    temp=0;
# X/ s* U  T+ k7 {/ O+ k
- X, }2 H5 s, X" g) s/ B    //UPPReset();
. `' E, o3 R% v5 I- Z    /*启动UPP DMA传输*/
( K! F( [& O/ b  b    UARTPuts("upp_prog_dma_i\n",-2);
" T+ F% y+ c  K: o1 }; m1 ?    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
, d  G+ |/ h* A( f1 \4 i    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);0 O$ V" M$ J: l& z8 T. f' w
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);$ ^8 U3 J6 c1 E5 A* P' t
) w: O) g7 q( I- ]; H3 E
    UARTPuts("upp_prog_dma_i\n",-2);
* M7 Y+ M3 ~$ T    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;7 t, X6 F9 \8 T( E. ~
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);& C* Y5 t% O7 n% Y6 s' z& L
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
2 {& A% J# S' D8 T! }$ O/ R
/ W. ]5 e2 {$ w' G, n, U9 x    /*等待UPP传输完毕*/  S7 |7 u  s' @9 D* A7 {
    //i=0;# M- I7 z- P+ d$ r, Q. K
    //j=0;* Y) b1 J5 O+ \# Q# G. c6 Y/ R
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)4 j  F3 S  Y/ k/ ?
    {6 B* y! n! E7 V0 }
        /*  测试UPP传输的同时操作普通DDR数据& k) b; s' G9 s. f# y1 z+ w
        temp=i;
2 o: G4 a7 _0 {5 J7 Y; [, c        i++;
0 u: u( A  u$ t4 n/ a8 r  V        if(i==1024)5 h4 ^! t+ W1 l
        {
3 P4 C, E: t6 s            i=0;
+ V( Q% G3 C% H& c4 Z! N            j++;+ x9 t. }8 q# H" P: x
        }
5 p, O7 R3 f, A        */  h8 Z; q  G6 ^9 K/ ~5 B- z
$ r. H/ P( N0 @8 v4 i
       asm(" nop");
% g' D+ i) _$ A5 h6 H: S: k/ C6 Q0 `' n3 V; j% E
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 P2 {! d9 G6 m- ~" E# L: ?# ~/ t; P    }8 R" _0 p3 E- d
6 Y6 m8 L( X( C: }2 C0 G
    /*检查UPP传输的数据是否正确 (loopback modes only)*/  H  R/ s' B( j' e& A- Z
    //UARTprintf( "i=%d\n",i);
6 w9 [& U! z/ H- S/ l    //UARTprintf( "j=%d\n",j);3 x) ]9 P3 z- E0 a( J) A
    UARTPuts("Data mismatch in buffers.\n",-2);. i: Q0 M/ J# T' P1 y$ p
    if (upp_interrupt_count == 2 && upp_error_count == 0)
5 m5 D2 q1 E) i/ E- p    {. V9 ^8 v: @: O7 G
        for (i = 0; i<upp_frame_size; i++)$ F6 a4 U9 Y0 ?% `- n1 X8 e
        {
/ p" T& r; y3 S: s7 K            if (upp_buffer_a != upp_buffer_b)
3 {/ ?* x' i/ o/ L" |7 ^% y            {4 Z0 G4 B3 ^' ~5 N9 \1 ^; S+ i7 A
                upp_error_count++;
, m7 {1 f1 }2 ?* J& E$ [/ m            }2 o8 Q, M! U$ k' c
        }
* Q: e9 P- U4 @    }
4 n2 |6 P2 t# e' |" Z$ E. q6 R* f: W, g2 E
    /* 报告通信结果*/9 p) _; r. q; `, v
    if(upp_error_count != 0)  s2 I/ A5 o6 m3 b+ `$ j
        UARTprintf( "upp_error_count=%d\n",upp_error_count);/ T1 k) r  ?' r* }
    else' S3 T- y: h' y) i$ g
        UARTPuts("uPP transfers complete!\n",-2);  J- @5 @, B" V& X1 s( v4 e% x
& @( x7 @: t2 e4 P( I4 g. I. R; e
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
9 g. a# M0 e4 X: w9 j7 [    UARTGets(ch,2);+ t" }; a) k, ~5 E7 r: |
    UARTPuts("\n", -2);
& ~' Z8 Z4 |. K7 `
3 Q. w! e+ Y( K6 k& ?; @    if(ch[0] == 'y')
/ m3 d9 m: n( N/ ~% w0 Z/ V9 K    {
/ X8 O4 o/ X  T. M. |4 L        /*打印全部读到的数据*/
9 ^. M! S9 T, i8 c& W" l5 ?        for(i=0; i<upp_frame_size; )
! f0 D: P, z' H" h- |' k+ V+ r        {, L8 C! R% z4 h- J
            for(j=0; j<5; j++)# |5 M; ]/ u% s& a0 q
            {% ~0 O& P. `2 \: T  P$ z3 C& P* ]2 w
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);' U' }5 c0 @) Q* O
                i++;
) Z6 V1 M: J" d0 S" i. w" e                //if(i >= 4096)$ P: z3 B; h% Q9 k; |; f  _  J
                //    break;
4 t4 u1 V& w( ^/ F6 m; L% Q
4 ~5 s' C: b! i% r5 O2 K4 B3 B/ g            }  f* m/ z0 }7 v" x* Q0 k
            UARTPuts("\n",-2);
# u" g2 x( g; p" p' ]        }
4 u' v% K$ m6 a9 }/ D    }
" r9 Z6 I9 u( p3 B5 y" h
5 L. s# l- {. \) P; Z; ?}

  h  e# |# H& M, s" i

/ w% e. ?# K6 _  n  o$ |# }! h) I/ R7 s

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
7 M, v" L- n' v  u# n
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。+ G8 y. v$ ?& Q# X





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