嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, S- m9 T, H3 m6 `9 R2 O) y
Void UPP_TASK(Void)
) ?: w! l8 W, D, q% {% ^2 a# m{: y8 _" n' g" M, }3 W
$ N2 N9 ~5 D6 t% B, X5 i8 {$ e
    int i,j,k,target_int_count=2;
3 |* @/ q) v& z. a7 J! v5 r  a/ |( P: B    char ch[2];
2 a0 M* I8 p/ u0 m4 ]0 O- @4 g, w* ?$ e
( w! B3 {3 g9 h/ A6 o
! B5 j' [4 q8 M4 E% w& a6 s  Z$ a
    upp_interrupt_count  = 0;
# U8 e* P' ]' [$ H! d9 {2 C  p  F: l    upp_error_count = 0;
/ E8 n' x9 p0 i- ~1 j2 }8 |
5 C& ~/ e$ s5 [$ _8 l    UARTPuts("\tResetting uPP buffers...\r\n",-2);0 z  p% S3 `/ y3 J
    // Initialize data buffers
, n  X6 @# P) b3 S2 ?4 Q    for (i = 0; i < upp_frame_size; i++)
; B$ w2 c! B; V8 v    {- T- @* {% X; T( J
       upp_buffer_b =i;& O4 u2 C4 K( V6 {$ J
       upp_buffer_a = 0xDEAD;, s' z! V9 \2 h" Z+ m# ?
    }
+ F$ O2 ?- O7 r5 W- ]& z9 q
$ B; _6 ?& X& b4 n9 l' `    //for(i=0;i<1024;i++)
" H9 z* G# h! c/ C; d7 E% s+ Y    //    temp=0;
% c* B( m9 Z2 h: [( B$ h. \' C" N) K/ b
    //UPPReset();
1 O7 {+ H' E2 Y  k    /*启动UPP DMA传输*/& X7 F/ n3 b6 `9 x3 d
    UARTPuts("upp_prog_dma_i\n",-2);
; j& K" f1 {# ~8 z* u. u    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;+ p, c- Z% T$ a  H7 j
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& U" i: D4 z/ R! w: ]$ Q    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);2 D: a, Y% ]  t1 o0 [$ F2 Y

8 s$ X2 |5 q! {' y% o+ e    UARTPuts("upp_prog_dma_i\n",-2);& T  a6 V3 d) h7 }& R" P4 t# A
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" w: |7 q  E# p; N! H6 k3 Z) G% q4 F    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);  D; }+ s- J* C) d8 U
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! }5 j+ f5 b0 K
0 K' J# t5 D- ^% _$ A$ Q    /*等待UPP传输完毕*/$ x+ S/ @- v4 p1 f, V2 Q+ B% o& Q6 s5 Z
    //i=0;
. \$ F4 A9 K7 l8 }9 D6 Z% Z) N    //j=0;4 n5 W9 T6 Y0 ]" D/ o% j$ q
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)$ Y- k: y4 `" J/ k1 b1 S5 w; x; k
    {
# ?: @) R- u& X$ u        /*  测试UPP传输的同时操作普通DDR数据
+ M* ^1 a' W, e2 E1 q) C7 F& Q        temp=i;
# m  W  C- M3 m  t: L        i++;) n7 Z; B& v+ Q" X6 x  H# ~
        if(i==1024)
3 L, I4 ?( @, G4 h0 o0 s: m& y0 \        {
; f6 P4 I6 H  K# k2 D+ M, g            i=0;! K. k. ^* S4 |/ A  Z8 ]7 p: b
            j++;
" i8 D3 m: q. w, K$ S0 `" F        }1 K* r8 D0 x$ K6 B$ x, Z' Q2 `$ ~
        */
  u- J4 |1 y6 A" o
7 C# h* c& k$ ^/ }4 l       asm(" nop");
1 O6 k, k7 t8 o# |4 H* w/ k! |
- c5 k! z4 d- Y1 S9 i0 t4 [& \: P       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 g0 u) U* s9 `  j6 @/ T6 M) R/ D, f    }& k( K0 |' A( I$ o, ^

- Z+ [7 S9 t+ ~- z5 Q; Z, n    /*检查UPP传输的数据是否正确 (loopback modes only)*/
7 s. g: K& W6 B8 o2 ^    //UARTprintf( "i=%d\n",i);* G8 q( J/ \/ n! e0 b7 f! u5 v
    //UARTprintf( "j=%d\n",j);8 q& ^/ Q  y9 e- }' _+ X: a/ i
    UARTPuts("Data mismatch in buffers.\n",-2);
/ j  G$ v/ t+ W9 J9 x( o    if (upp_interrupt_count == 2 && upp_error_count == 0)
& x- o: b4 Z7 D8 v! A% S    {( E* V. J, y, K2 C! o7 S
        for (i = 0; i<upp_frame_size; i++)
: x- a0 }9 R; P6 K        {
$ Y+ C& l- Q: q% [5 ^" O            if (upp_buffer_a != upp_buffer_b)2 S* _* H; {  d" m/ p+ f7 g
            {, |( t1 r0 q& F4 _- S
                upp_error_count++;
8 b$ q3 Q9 X1 J7 A' j' a( L  x            }6 R( d# L6 Y# E. c  u
        }
3 Z: m" @3 M- l- _8 x$ U    }
6 F4 ]& ^8 [% x% K. b' _8 T
+ D& h% {, N8 I    /* 报告通信结果*/
* O" i" O& i; K9 x2 f9 A    if(upp_error_count != 0)
5 W8 b* f1 l5 E0 A6 @! R* ~! T! E/ @        UARTprintf( "upp_error_count=%d\n",upp_error_count);
! v. X% v+ ^/ J- W8 E    else2 t# S6 u0 i' \' L
        UARTPuts("uPP transfers complete!\n",-2);7 H* z* A4 H/ }! Q' b& J) r  c6 E. _

/ ]8 T+ a9 z% F* a/ }1 G    UARTPuts("Do you want to print all the data?(y/n)   ",-2);% h/ G) m5 E& P' p, V* R! g
    UARTGets(ch,2);
8 J5 K, W1 c* f5 @    UARTPuts("\n", -2);
& G" d; M6 o3 S) s$ p4 b7 D
! z, M; ?, Q9 q9 M  V+ K    if(ch[0] == 'y')
5 l- Z" M: h$ k# G    {8 E  Q7 t+ o, Y7 \1 z, J  R0 Y
        /*打印全部读到的数据*/
2 y5 \" @1 {. q4 I        for(i=0; i<upp_frame_size; )0 c$ X2 R, f) J  |! x
        {
) F8 n; L. m4 O1 ]9 J            for(j=0; j<5; j++)1 o8 l1 u/ v5 d" w) T* O5 r' L# v. R
            {
; e$ d1 _3 c$ O3 q+ }                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
9 N( a% h' |4 h( |! U                i++;* L3 Z( q# X# {4 I7 l' M
                //if(i >= 4096)# _4 }4 `  d0 C7 M& S
                //    break;7 r; H5 y2 D- E; u
2 l9 D5 P  Z" J' Y
            }% Y2 Q& G' s$ J0 q# M
            UARTPuts("\n",-2);
/ _& Y  J4 }3 |- |7 M6 j        }1 U7 f# n- j! Q, k( p. H
    }- t# Z( Y2 K- G  ?4 K
4 h) }7 \0 l' [& ?6 T0 _. m# S
}

; ]5 z) ]/ i( h+ n2 {( m$ }) Y
0 c7 Z$ a* u$ k. V" W  B' ^
7 G" P* |& ?. o2 u( U) }- u* I

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。  d9 ]" \. A! ?- f

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。) `& ]  v( q( i





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