嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
* l+ b. W1 r6 E; c; u( x
Void UPP_TASK(Void)
5 ?" t6 ?8 N1 W+ w1 F{
- a$ O7 [& ^7 A9 w8 Q
) [+ e" `2 b- \! F    int i,j,k,target_int_count=2;
* f: S! X6 k8 ~: U' x7 _7 Q& C    char ch[2];# b, t4 U, n' B2 `) a% }9 N/ X
" c$ h& s9 n& o7 k  q: P% h

- @% N8 s, p+ L3 u/ J1 K0 v; l: q8 ~/ w. O' c
    upp_interrupt_count  = 0;
, o% w' |% T; [0 E    upp_error_count = 0;* Y, I. ~. Z6 ]4 _+ m! R

% j1 [, b5 a' Z( C    UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ A2 k; W* u1 Z7 Y, X. N8 B& T    // Initialize data buffers
3 u1 q/ p/ K( p: \    for (i = 0; i < upp_frame_size; i++)  {8 W5 B- S) F, F+ ~8 \
    {
$ h$ Z. B4 C. ?) H" P) D       upp_buffer_b =i;3 H( E2 }4 u$ f3 W
       upp_buffer_a = 0xDEAD;
' q2 _) ]0 |9 x    }
2 k  [& \5 X! T7 t$ p
! N3 _, z3 i  V  q* h9 O    //for(i=0;i<1024;i++)
; L  i% M) b# V2 `& A2 n! j! K. I6 {    //    temp=0;- H/ T" `# K( W. ^% d! K: q

2 n2 C" A( [3 Y7 Y( H) e' W9 w    //UPPReset();& n5 `# A: R5 u0 C
    /*启动UPP DMA传输*/
4 ^3 m/ N' A1 b, }; A! v    UARTPuts("upp_prog_dma_i\n",-2);
& E' k! y2 b/ D# N( e3 s3 m( A    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;7 `, b1 a: S9 m0 x3 l
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);9 e; e. x" P$ f9 H. n! U9 `  k
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
/ |, H. @8 r% V2 [8 u( K4 m% G1 `4 }) m$ p
    UARTPuts("upp_prog_dma_i\n",-2);
+ v8 t& }* N1 K% ?1 L6 }" Z( d. F    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;. B# m- @2 S7 G+ f3 e3 A
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 k9 h; V; w/ ^* }    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);" E# t- h; ?7 r6 \! D/ Y* F( ]+ W
: F9 {/ Q3 {9 r! c
    /*等待UPP传输完毕*/
) |) V0 T5 y) m5 C8 C( L6 e7 [    //i=0;) H) [" k# R; i' A0 O
    //j=0;& H  h/ W. d" P3 C
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* B* m6 Q0 K$ G. A# K    {$ _- B8 a% N' P1 Y. G5 G
        /*  测试UPP传输的同时操作普通DDR数据
9 S  ]3 V: F/ J$ e/ p7 b" s        temp=i;
* ]  u) d, ?# G8 J( L        i++;
4 [, J( J9 D# k  y3 k        if(i==1024)+ V. z$ R! s- s" ~
        {) s! h3 M3 x4 n$ c0 n8 f
            i=0;
# x8 @4 z& N- ?2 n            j++;
, V1 t7 m/ ^: d6 X/ k        }
; G% r2 w* a$ ~        */9 _- l. ^1 U# Y4 d! e) d

2 L9 Z% S/ ^3 o  Z; P. Q       asm(" nop");
* l' f7 z! R' h  I: G; y; a( q! M/ s% f
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
: O7 J1 x( p, Q' J    }
" i( M- L# m  q4 y& k6 R# u
; J+ }% t9 f5 n0 f: L# U. U    /*检查UPP传输的数据是否正确 (loopback modes only)*/
) n" e% h" Q1 F: r8 l0 r    //UARTprintf( "i=%d\n",i);
! i6 O' E) u, x+ \' G    //UARTprintf( "j=%d\n",j);
1 S% [, \6 F/ q" o5 k    UARTPuts("Data mismatch in buffers.\n",-2);! L2 w! N: E+ J
    if (upp_interrupt_count == 2 && upp_error_count == 0)1 r( G6 n3 j( h' ^2 I9 _
    {
' _5 |- o* k$ d* e2 n        for (i = 0; i<upp_frame_size; i++)
6 F5 X  s3 z. ?0 o7 y        {) k: z; _2 v7 ^3 X! G9 z, M; L
            if (upp_buffer_a != upp_buffer_b)9 e9 `* r; i3 Z3 [1 E" ]/ i
            {0 r' `% t) M& a" O$ M2 b/ ?
                upp_error_count++;
4 y$ r/ ], ~/ t! |            }9 {. V5 D8 S7 d/ u0 U. C9 V
        }+ H/ a, i! A/ H. d0 @+ j" p& U
    }; w* v8 g1 J, c9 w4 v7 L
$ {, t; Y, M  F5 h
    /* 报告通信结果*/
/ h$ }7 x0 P8 t; q    if(upp_error_count != 0)
, K7 T+ g5 M/ Q5 Q- {        UARTprintf( "upp_error_count=%d\n",upp_error_count);
' F, r' z" f' e" {' o" _# h1 f    else
# Q$ D5 _6 Q. u5 a        UARTPuts("uPP transfers complete!\n",-2);9 H. i4 V& t; N
2 `3 U" g) \  d- H! A
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
  _; G! \9 W$ a3 }; Q! \0 y    UARTGets(ch,2);
0 B! }3 T+ }& J% R* F    UARTPuts("\n", -2);
) L( C  x5 P  b4 q9 Q+ P' o: O: F5 U6 `! g  J# ?4 @. w
    if(ch[0] == 'y')3 t) c8 |1 c/ N7 r' \* y' B8 J( O
    {  j3 I9 Z/ `: p, [( _
        /*打印全部读到的数据*/2 B2 Q7 \4 G% ]
        for(i=0; i<upp_frame_size; )
. V" U9 W/ S% E: m& W0 U1 t9 P. ]        {8 j# H" ?7 j' D( k4 W5 [6 J$ F
            for(j=0; j<5; j++)
: k* X0 e5 x) D0 o            {
: G3 O4 R* H7 K7 o4 R                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
7 A/ o3 E% {, l) k8 j5 Z7 j/ m% r4 q* N                i++;5 \7 X- T0 A' P2 u4 B' S. t( k+ s  Z9 U
                //if(i >= 4096)
# d, h: D+ @$ C2 I8 c2 j" Z+ _( w                //    break;  y+ Z9 M) t* A/ c6 \+ v

; i! c  g6 `) |" X- x& [& I            }
  G8 C( _; o% b9 J* e            UARTPuts("\n",-2);
& ^7 R4 s+ k, I3 P5 C- I% t        }1 _" \: s. \% n6 k6 f
    }
4 b! s* S# \$ {* t2 O: x  ~0 D1 T
}

) K! z) x6 l, d* o' ]/ ]

: M% G4 o3 r7 a* b6 ], t$ X
* X. T# i8 K8 g1 C
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。( \6 {4 _: M  A4 l( s. b& S

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。% Y3 o2 }8 |" S# z5 E$ s# H+ R





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