嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?/ f0 S& f6 `: d+ q) F% l: Z/ o; |
Void UPP_TASK(Void)
! H! w# A) [* H% a{
$ N0 k" f! u# m2 z  L) X3 v9 i" X% R# c0 W( ]* o
    int i,j,k,target_int_count=2;
/ F, l9 c; {+ {, e( ?/ s) [    char ch[2];. z& C* `+ w$ v0 Y% q

8 _  X, m2 B+ A
  [# _  \. ?# X' w
0 G, X( c  v" g    upp_interrupt_count  = 0;; Z5 ]7 d9 {( C" p
    upp_error_count = 0;
" j6 g, z1 v8 a& ]% S
8 H9 j5 L* ^: U  y; G1 C, g    UARTPuts("\tResetting uPP buffers...\r\n",-2);" ?9 Q! N( s4 V) O9 j3 \' [
    // Initialize data buffers
  E- Q+ [5 w$ _* q, m- v: `    for (i = 0; i < upp_frame_size; i++)
9 v  C; D& R* Z4 N/ j- l# u    {/ V/ p, d. U( K1 |  o$ {4 B1 e7 q1 z
       upp_buffer_b =i;
% W& @/ H& i( t) p+ B       upp_buffer_a = 0xDEAD;( ^) l4 e+ t5 t0 X1 v3 `2 @
    }
9 G; J8 D" L: O- c6 M
) Q& O7 h1 \; w; @3 c6 t) P    //for(i=0;i<1024;i++)+ D" ~+ V% D4 Q' V
    //    temp=0;/ u+ ~) f! z$ a5 ^4 }$ p3 a5 a

! `8 X" O! E( X- J7 j- _8 l+ t    //UPPReset();
' X6 X/ n! T: V8 y/ L    /*启动UPP DMA传输*/
/ s' c( z$ n2 R" n" V    UARTPuts("upp_prog_dma_i\n",-2);" M2 Q  Q$ Z: c! a2 m# Z6 N$ V
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;/ A5 j! v; e% u5 h1 v1 b9 v& V3 Q
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);7 j* U4 R, }2 Y1 j" p# n4 \
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
0 E/ T# B. Z+ a/ Y. q/ ]; N2 r8 h' s: A7 P9 F  }+ V$ W
    UARTPuts("upp_prog_dma_i\n",-2);4 A  K# j$ k+ {6 H+ t' Y
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;2 F7 R. Y' s7 H0 r3 J
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);+ T2 C: L! w, n2 B) w$ c( n7 j% K$ n' n/ ~
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
' ^7 N4 \) W/ z0 |+ A6 @! r8 d) i2 v$ P( g; [' S5 ]+ ^
    /*等待UPP传输完毕*/, S$ B3 R. s% P" {
    //i=0;
0 W+ N5 }% n1 ]+ d% C6 Y& v6 P    //j=0;9 p, i5 a( O3 U) T
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)- T* d- ^; G/ T/ d& G' q, g
    {3 D0 P1 e0 s! g8 B
        /*  测试UPP传输的同时操作普通DDR数据2 d, B: t/ }; s( E
        temp=i;
6 [& X" F- J2 O$ r        i++;
( d* t' T3 l$ V1 _4 y2 v/ Y        if(i==1024)
& A  B; F& {2 S( q        {
/ n  p2 t! z, y! |, K: c  a            i=0;
6 ]' B  |" ]% _, n0 w' \1 i3 B/ r            j++;) k9 D7 V: S6 [# C- y
        }
8 S+ W1 X8 m/ x! @3 S4 r" C( H4 R) I        */
$ j& ?/ b) e$ F8 @- T0 h
$ o6 x( {9 I; a7 U4 `5 B) C$ ]4 Z       asm(" nop");2 n; R& j) w, ^2 R9 B6 `/ L
0 Q; m) @3 @0 |1 D2 X/ L
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);* V6 m; K( ]( z, b# D) L
    }
5 A: z! j: ]  x% q' R4 u& v7 f2 ]# x* S. s! {% F# A
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
% N' v2 m, r6 |3 z' e7 W7 j    //UARTprintf( "i=%d\n",i);
$ B# z0 [9 `9 J' R- j' H    //UARTprintf( "j=%d\n",j);
8 t) E' u" H6 G" c0 |7 ]2 E% R' |    UARTPuts("Data mismatch in buffers.\n",-2);
- ~5 t5 x  S! g& h# ^    if (upp_interrupt_count == 2 && upp_error_count == 0)2 }8 K# s1 r) _' g/ D: n
    {4 Y+ n5 P* t7 p$ v$ v- I* a
        for (i = 0; i<upp_frame_size; i++)
" s+ b/ f7 r% j4 o+ b( t        {' [! d8 p( x" F. K! O. y
            if (upp_buffer_a != upp_buffer_b)  p' `" q$ W7 w; g9 M
            {# L5 B: |) n: b$ E+ H7 L6 t
                upp_error_count++;
0 K. s; k1 x! T            }" l& }0 ]! w: i, a7 q
        }
" M  b$ Q4 Y- k) q9 ^    }( d3 w, ]* D) k

9 S: v# ^) m2 O+ T/ K7 E7 y    /* 报告通信结果*/  K, p3 s! p- |/ }$ g
    if(upp_error_count != 0)) e6 z9 D% n: x* L, f: _+ o
        UARTprintf( "upp_error_count=%d\n",upp_error_count);6 i. w1 B! k, l6 c
    else" u6 z8 X  r0 p' a, F9 P6 y
        UARTPuts("uPP transfers complete!\n",-2);4 v1 f4 u. Q* n# L7 F8 _
  g5 p5 c% A. x* H+ s
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
1 \! S+ R1 {2 ?5 Q    UARTGets(ch,2);
) i4 r8 n8 B' C: q- G    UARTPuts("\n", -2);
- h! W* }: D' ^% ?2 |2 n' w1 J9 e# Y0 W( @4 {( X' L: C% I, s( ]2 C
    if(ch[0] == 'y')% ^8 w/ A+ ?! p* {$ z/ ~
    {
+ s5 l, }  g4 J* @# ?& q- r        /*打印全部读到的数据*/' j! O7 V/ H+ x7 n3 ^0 V
        for(i=0; i<upp_frame_size; )! O: E; `  B) V; a+ z) l5 r) h, @4 Z
        {. R2 R& A6 q: P7 ~
            for(j=0; j<5; j++)) n( E2 E; y  D, G
            {4 g/ {; J( S2 s" V/ \) z! c* d( @
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);. g1 n2 X5 {0 v1 W" n4 M0 j
                i++;0 \; C; i5 l3 t# i; E2 t1 j
                //if(i >= 4096)
( E$ }2 }2 u+ o! k/ p  |2 O                //    break;
" o0 M7 y) ^$ g! r
5 o) d6 L% W2 I: Q            }, f1 {0 a: ~8 U
            UARTPuts("\n",-2);5 D# \: h* R4 `
        }! c2 g3 w" E0 [- ~; i
    }
/ _' R' u4 b2 D
9 K+ \, {1 N3 C9 o4 o}

" I; b5 b8 z' i
5 h; U/ q3 x1 T9 I' L: b/ f

) _2 g$ g% q3 r. E  g  r7 j% G3 }
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
4 M+ V4 b/ ^/ d" ~
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
. g0 X  B4 _8 T5 t* A; z" X




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