嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 i" e! l# e0 p+ N% L
Void UPP_TASK(Void)
0 q) w2 M5 n# {" L+ p0 v1 b* ^{
- v) E( a( w  C. o/ O3 y/ s2 @7 j/ u  A! f! ]5 F
    int i,j,k,target_int_count=2;2 [+ w- h) g. a9 l+ K1 P' H! [7 s6 L% J; p
    char ch[2];& z' D( J1 _0 g! }: x) P% [

/ ]" E' I7 Q$ E. p
8 p; l4 R* ~' C- e- R
; [& F+ s5 v7 X5 x! l3 G4 p    upp_interrupt_count  = 0;7 j3 ]) G1 y0 Z4 N+ a. {! M
    upp_error_count = 0;
: K* I* c( }/ s6 R
0 }: Y- T" I: p% ?: T7 w    UARTPuts("\tResetting uPP buffers...\r\n",-2);* X) x8 O4 A+ r9 y
    // Initialize data buffers
7 [+ S, T2 n) Q, X* n    for (i = 0; i < upp_frame_size; i++)
2 i; y7 {8 c2 D& x8 c( r    {* d( M0 W* L6 u6 b
       upp_buffer_b =i;6 o3 x( i" l, Y
       upp_buffer_a = 0xDEAD;0 Q- z) c& }* W* f
    }. G1 j+ T8 r, s: R( |, n! _& c

8 ?0 ]% m8 b7 t% f, ~; p% J    //for(i=0;i<1024;i++)
- p" r) K, k& f$ [4 Y0 D/ ?8 v1 j    //    temp=0;
; g+ D% T2 A& V, w, a8 e% D
# A7 v1 }' I& x1 ?6 l8 m    //UPPReset();2 _& D  x  v- I7 i. i. G
    /*启动UPP DMA传输*/
( W' L. Y" a. h5 }# [: N# D: Y    UARTPuts("upp_prog_dma_i\n",-2);
% m9 w$ Y) {2 u1 G    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;: A5 C9 v6 a* v4 r
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);7 @% H7 c- E3 i) n7 O
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);1 o& s* L3 H5 J9 P( k( M

2 _: M5 C& p9 k7 j% q5 s5 X7 J  w    UARTPuts("upp_prog_dma_i\n",-2);1 N7 t/ n$ q4 g2 u
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;/ x  v9 C2 F; G3 \3 l6 N
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! F' q" P$ H! O; u  C    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);! t5 p. J$ b- [3 d2 g

# T4 D. G3 Z, l& Y$ l" ~    /*等待UPP传输完毕*/. h) y5 Z1 m1 ?
    //i=0;
+ ~4 |  }# f1 t) u% v, _    //j=0;9 Q/ a% p. {7 h% \; c! g0 j
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 Z$ V% }7 s5 y3 F. {( k    {
2 ~& b- `3 l6 r8 h        /*  测试UPP传输的同时操作普通DDR数据
$ K/ v5 j1 }$ t9 s% U' v        temp=i;3 B$ X7 K2 t' _3 V) Y3 g6 W- b
        i++;
6 H! n5 i: q% }* D! i        if(i==1024)0 a9 `" U- [( F/ C
        {
$ t% z* R( F$ w            i=0;
  v9 Z2 \% f2 [% V7 e8 o/ P            j++;! a# K" E& q' c" V# Y
        }
* a, J* Z; p5 z1 H* e2 N" n, ^0 N        */
. b+ `/ _8 H7 K2 v. |' }! E+ W" O) V
9 S4 t  W" |- k) R! g       asm(" nop");) X9 P# {1 Y" C+ p$ r
- i* d4 D# z3 \
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);1 i9 a' J, O0 {
    }
0 _# T( v2 K- z  b. w
" z% S+ |! l# S' o; x3 w+ k# Z+ t    /*检查UPP传输的数据是否正确 (loopback modes only)*/. E0 z7 Y0 p; a! [4 |5 u1 ~" ?
    //UARTprintf( "i=%d\n",i);
9 U/ V# O! H) n: N7 X" n# C6 S    //UARTprintf( "j=%d\n",j);
+ x% a% ^/ [" ~8 O    UARTPuts("Data mismatch in buffers.\n",-2);6 t( f5 K' @, y
    if (upp_interrupt_count == 2 && upp_error_count == 0)
5 |5 L2 R$ m3 J( Y! L    {& `- G7 P1 O1 g$ I
        for (i = 0; i<upp_frame_size; i++): V4 [1 v- A$ k1 o, b
        {: m: t! f* V9 c2 _5 ^
            if (upp_buffer_a != upp_buffer_b)8 _" ]7 j$ F" T" B& n1 _9 [
            {
; b( j+ r- C6 s6 H  A, \                upp_error_count++;: s% S0 \, t. v* n: e9 `2 B
            }
/ ]2 W0 ~2 |* D" J* q4 T        }
: o# m4 r9 _" `: N7 S: V    }' y% g' F  e  R% X  c- H

  l; g8 a" A" V* A  i( k+ Z# t    /* 报告通信结果*/9 Y: ]. A- x8 U' ]$ r2 |
    if(upp_error_count != 0)( L* L8 |- B6 ~
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
! F6 k' W2 W- w; @( |( [    else
! D) K8 I  N. s* `! [" {8 V; o* L        UARTPuts("uPP transfers complete!\n",-2);+ D. E- q2 r+ U6 \

( S5 i/ }* a* k    UARTPuts("Do you want to print all the data?(y/n)   ",-2);$ O7 k8 Z' \) [0 a) _2 S
    UARTGets(ch,2);9 F% I. Y" D4 j2 p# p
    UARTPuts("\n", -2);
- L! X+ K% w& f) Y% r& X2 F& H0 U' V" m/ A; a8 @1 w- M8 H+ w7 P7 m
    if(ch[0] == 'y')
7 o' e4 r( W% J/ F% e    {# X, a# B2 _  }. ~$ n, V+ Q
        /*打印全部读到的数据*/
" a$ Y+ q$ B- D' _3 {" {* ^        for(i=0; i<upp_frame_size; )% M  p0 b% ?% D; s, b' p  h0 j
        {
" Y2 O& w: d% t2 @  E- E6 V            for(j=0; j<5; j++): R3 W/ j# h: F# x% v! q
            {# Q! C- V3 a& z9 a! T; t- a
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
) v) o8 O, b! o4 R                i++;/ _$ q) D3 Z: O8 d: a0 ~
                //if(i >= 4096)- O( F) z6 \2 p( Q
                //    break;
, c  ]- Y' A5 J
. G1 l7 j* P! j; p4 A+ f            }
. i% O, Q/ c, w6 l: L            UARTPuts("\n",-2);
9 o* P/ n% ^6 C3 y# J0 L* r        }: N3 o# G/ o! j: W6 P7 v& q$ O
    }
+ G: i, }8 ~! v) c0 b" P  z- y
, L. E% [' q- `( f0 Y}

* w* S8 x* c% h; p
, D# F- @0 C0 ]
) W, p4 \; K& S$ I

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。% }4 S" ^0 ^. B

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。& n- T) s7 g& h! e; [6 e





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