嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
+ G0 h" a5 G* K# d
Void UPP_TASK(Void)/ q7 o" D$ ?0 ?' F0 G
{8 ^3 G5 p) u. o
: y+ x2 T$ o+ C' G# N% V8 q
    int i,j,k,target_int_count=2;& P' y! I. \" x# L5 a$ ]9 R
    char ch[2];
6 Q! o; [8 l9 M1 r: i" W5 c* |  x/ S* R* g

2 W8 g$ n: h% A& p6 h) I% s# P+ A1 G' J* N6 b2 }
    upp_interrupt_count  = 0;
! w+ @+ V. H" q2 a$ f. ?. N    upp_error_count = 0;3 B$ I! m6 |2 Z

" _6 ~/ P- d) S. H5 A( D$ ~3 p    UARTPuts("\tResetting uPP buffers...\r\n",-2);# l; v7 Z3 |) L' o: J
    // Initialize data buffers
. ?7 x3 @. I; H    for (i = 0; i < upp_frame_size; i++)
3 [# \- X% U+ T2 i    {* v3 J, V4 h% ]9 s1 T
       upp_buffer_b =i;
% [$ w; j& \) \       upp_buffer_a = 0xDEAD;
9 ~7 r. |8 @  k5 R3 U% B2 |    }
. L( g3 {0 h* w  O2 y( h
: C' @3 X$ n' y" ~7 Q    //for(i=0;i<1024;i++)7 x, r3 h' t9 W4 w* I
    //    temp=0;
% x$ ^) ?# u/ i- o1 m+ `$ S, }
5 e3 ~  S$ y" a3 m    //UPPReset();
% J. f- S7 m+ e, o9 T  O% Z    /*启动UPP DMA传输*/  R/ m' @, [4 ^! r& e, x% \  A* o7 e  R
    UARTPuts("upp_prog_dma_i\n",-2);+ B" N; w0 D  A8 s  l4 @
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: F, Y8 d' n1 z- u    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" E* T6 S3 I4 q8 F    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);- ?/ A+ o& b- ~7 Y& W$ V
  k9 l( D: R, X7 ?% O4 m' \( j. Y
    UARTPuts("upp_prog_dma_i\n",-2);
; G5 _2 Y& {" n, Y  x, ?* X    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
4 K3 D0 M( P4 p' f    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);! k# Z- f6 ]6 _
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) w' J& U, c, {% j. g, h% V( Y( W. Z. X( z3 I
    /*等待UPP传输完毕*/
7 `9 b# X6 m4 w+ l8 j# ~    //i=0;
6 x: `, H; m/ \' z" Y    //j=0;& B2 }3 q8 r$ ?6 C
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* ?7 Y0 v; b* J6 C    {( h# C9 |9 ?! z: @" }3 T
        /*  测试UPP传输的同时操作普通DDR数据$ I: z+ w1 K: F* k3 w
        temp=i;" w+ w  ^# I4 N
        i++;
) |+ ~1 z9 L. H6 b3 l& L) r        if(i==1024)1 y7 I- I+ H8 T0 c
        {
7 i1 g( W/ b$ n3 ]- K" c9 a" W            i=0;. D% V( z3 U5 O* Z
            j++;' |2 g. J' ^' m* ^; H& u
        }  c  u8 c( h6 R# [2 ^
        */; U& ~5 I6 x. ?& t

4 z% Y# X: [3 {& m5 J) [       asm(" nop");
' D3 Z( O  ]  [7 n; k9 Z: E2 G4 W0 A% P4 ^8 \- J2 X
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
( u" r" B3 t" h, s: j    }* f$ C7 E& D5 j1 g8 X: ~' {
+ l" |. y0 b) r  c" i9 f
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
1 w2 K3 t7 G: {/ K% ~! M" U    //UARTprintf( "i=%d\n",i);7 F9 t: z* ]5 X* r& E! V9 F. |
    //UARTprintf( "j=%d\n",j);" ]1 X1 w% z3 _) D) }0 ~* n& v
    UARTPuts("Data mismatch in buffers.\n",-2);
  g, v# z4 S  T( S1 f0 A# R  c    if (upp_interrupt_count == 2 && upp_error_count == 0)
5 K2 [. t; E3 u# b" p. D% e0 C' i; `    {: D4 P# h( z1 ]9 s( o/ t  K
        for (i = 0; i<upp_frame_size; i++)3 C4 {% x; l0 k; p0 {9 P
        {
2 v% C3 I4 L% z& t+ y- z$ M, D* z            if (upp_buffer_a != upp_buffer_b)! q$ s2 _' F% Z. V
            {
( @7 M5 R! x8 V. s8 J4 d! C                upp_error_count++;
# ^/ i- I$ z/ t2 k- w            }: q# P. I. B2 z6 b9 l! c* q
        }
) ]- j$ v) t, r" o" U4 O    }: G) d7 k/ \: x/ @, ~6 k9 v
2 C6 Z5 v3 ~  g, }7 T' I
    /* 报告通信结果*/2 K% i0 x/ C$ S- Y
    if(upp_error_count != 0)3 i; t- \% q) J; ?7 x, a3 m6 K; s
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
( w, O6 u" ~1 A( [( a4 V* r- b    else
) u7 z  {7 {" t        UARTPuts("uPP transfers complete!\n",-2);1 |- [  G; X. B

" G  U. X- x1 @$ H% Q    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
( {2 O) K- w2 o* j1 |! I    UARTGets(ch,2);$ p  G8 h7 |: N0 ]$ {
    UARTPuts("\n", -2);7 x" u0 b, n$ Y% v/ ^2 W4 U" w

: m" D5 j1 T. x% [    if(ch[0] == 'y')
. F$ |; w$ Q: U$ x6 \    {/ h: f( h' K+ N  ^1 t% P3 C
        /*打印全部读到的数据*/
% S1 |4 K- Q) u! c        for(i=0; i<upp_frame_size; )5 E3 n% i1 V7 t) h* E% c" o
        {
! t5 V( b! g" n            for(j=0; j<5; j++)9 r9 s$ I: [. g+ D# y
            {, V. R7 a) k# b' t3 z2 Q6 G
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);; o) c, Y' j. h" w2 z
                i++;
9 L  I* H, T& v6 J) m                //if(i >= 4096)
: g/ H0 P" K6 O. u                //    break;
# C! t2 f' X* g) e/ r( c: N# X& ]: s* G4 P* V4 y+ z3 ]
            }3 P! W1 k! J8 D- h
            UARTPuts("\n",-2);9 ]# p& o/ r' R7 `$ s7 v9 X
        }
, i9 K0 B0 V) q+ E8 I    }! e, @0 F( v0 `5 w7 u+ A4 }& R

; P9 ~: C: }, y2 }/ t+ M- T6 T}

# @/ k- q: @3 Z7 D: A

6 \: \5 ^; |" ]) f
6 [3 H# `0 v, Z! q
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。3 x1 ~! A' C6 c2 \0 d, L" E: [- ~

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。  H9 H; n7 [7 \- |: D  F





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