嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 W! F" _0 t, d6 A4 ]/ `. w0 {# A
Void UPP_TASK(Void)/ F$ n5 M1 Q. u* P" |; s
{* `6 T9 |. Z1 H7 H( P6 z

( n0 ~& g0 C1 e, K) h, Z    int i,j,k,target_int_count=2;! H7 ]# ~3 W* i0 }6 s# j6 N
    char ch[2];
9 t' t9 c7 y% v! N4 u% J. U8 j: V) e2 v
; E3 k" w& g  c9 h) o: E( Y
$ _! T8 K) y8 C  f9 |5 R
    upp_interrupt_count  = 0;* @3 v$ M$ C4 c! E- C/ D
    upp_error_count = 0;
& i  H8 g5 l3 }: L3 ?" X8 _6 }# j6 k4 ]
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
. ^3 z' ?7 m: I    // Initialize data buffers  S7 t- k9 S! G/ @# R7 I
    for (i = 0; i < upp_frame_size; i++)0 \- L4 o, A3 d! m# S& a
    {# s4 `' |5 q5 N- ?  m
       upp_buffer_b =i;
' V+ [5 n# w, k       upp_buffer_a = 0xDEAD;+ O! X) N8 C) `+ i
    }7 c/ d9 h1 p% ^# A

$ h# o; y# _- M" i! h7 |4 U    //for(i=0;i<1024;i++)
" R3 H0 f% a2 c) U: _    //    temp=0;* B) q5 x& P2 p8 _7 m% ^
" L/ V% Y7 t* C. A( m' m
    //UPPReset();
& J3 |1 d! }% q% L: Q: V* G  [+ n    /*启动UPP DMA传输*/+ Q" w0 s1 l  v
    UARTPuts("upp_prog_dma_i\n",-2);
' [& R" g* p/ h( u    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
  t/ H( Q$ o. G& A* i8 I4 [+ p" c8 a2 n    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ U2 i9 O5 Z3 K* L    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);" T" g3 d0 i0 V' v" {# m/ Z- Y1 Y

- @/ j* h8 M& h% b; \    UARTPuts("upp_prog_dma_i\n",-2);
( d1 _2 p" k# F+ B9 C, f    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;8 o( v% H- \* u3 C7 ]. I% _
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);2 H0 M2 O5 l  Z; _! V% [% y
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);( Q* B* P0 |6 z: X6 y% @
) L- B6 n/ r) f5 }# p* I
    /*等待UPP传输完毕*/' A4 G/ n4 Z+ e9 \3 [8 U: j/ S( y5 i
    //i=0;" V/ i: e8 k- W/ s' C3 @# s
    //j=0;! Y9 M( c/ D; W
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
$ s  r' Z* |% m9 r7 {    {
+ t, o& x, }# v& i# c7 t: R* h8 D        /*  测试UPP传输的同时操作普通DDR数据
  m4 X# r. `7 G( q" H2 C2 V1 N# u) I        temp=i;  l2 ~2 F. M+ m
        i++;. X/ R( Y; j9 m, c/ z
        if(i==1024)8 Z4 ?: l5 h* t! B5 M2 L/ U
        {
0 Z8 P5 Y, q0 \% Q- U4 w' L' [            i=0;
; P' U, n/ a' t2 e0 J- G/ K$ ^            j++;* h9 e" y( R" c( s1 s
        }& ^6 m# b) T) M% }- u6 U: G1 H' c
        */% H/ u# K, h2 ^9 e2 p1 V. _

- J* u3 f# ?- P$ T3 c  Q       asm(" nop");* y3 Q/ v5 C: _' V
& a' N' ]% @  e) d4 q% `( i
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
. l8 \3 w% n7 z6 k. V. p- V    }
; }" W6 j) h8 M2 d4 c
- q& K; X4 z7 W0 ~6 x* B    /*检查UPP传输的数据是否正确 (loopback modes only)*/
7 y/ H" @" x8 F; O7 W+ w* g) M( e$ @    //UARTprintf( "i=%d\n",i);  g( H' d' B5 d( r% R6 p; z2 Y
    //UARTprintf( "j=%d\n",j);0 R% ^% }7 @8 U8 }: p: Z
    UARTPuts("Data mismatch in buffers.\n",-2);/ v! w4 D$ a1 y
    if (upp_interrupt_count == 2 && upp_error_count == 0)
) W/ K4 U* r) `* f5 a1 z9 A: e+ [    {; V! Z# r3 W7 x6 m1 N$ S
        for (i = 0; i<upp_frame_size; i++)
1 l; T" M" [2 v# h8 r- ~        {0 E  K* B! c2 V! L6 ]
            if (upp_buffer_a != upp_buffer_b)+ Q- l; J: l6 y% \" ~
            {$ v! y! u3 Z1 G: c9 }- m, j* t
                upp_error_count++;
* Q' A- R5 y1 ~; l; O1 O6 t            }5 C0 J& g! l1 p. Y! }8 n4 d5 x
        }
! s5 n) V9 I5 G: A    }* w- B2 U0 o% o; r- @4 y: L
* [3 d) [: o% B: M# z
    /* 报告通信结果*/3 `% f  ]! E& ~. D4 C9 j
    if(upp_error_count != 0)" Q: v% H9 T' z" b  Q9 N! n
        UARTprintf( "upp_error_count=%d\n",upp_error_count);0 P: w, v* ?6 N  v2 G: P- B2 K
    else
# G, s/ R3 `0 _3 V* k        UARTPuts("uPP transfers complete!\n",-2);# e/ x! T; U+ o+ i3 Q
  `( E: O$ e8 `, h6 R/ K7 S
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);% D3 k6 d( T: f( c4 ~$ p; E1 d4 ~
    UARTGets(ch,2);" ]! ]: Z( Z4 \$ v; G* j
    UARTPuts("\n", -2);! o) |2 d" a% e) o' s* s0 [
7 Q) _8 B" H' ]2 E
    if(ch[0] == 'y')/ R3 L- C6 |' ?* O
    {
5 P5 o0 q! O0 d$ _$ D        /*打印全部读到的数据*/
3 }  T  k$ S( p; I        for(i=0; i<upp_frame_size; )6 g0 Q% ^3 z, ]# u8 \
        {
' [/ G% j8 i# g            for(j=0; j<5; j++)% O7 z" Z+ K8 t- m2 z
            {, C4 J) u! H: B: T- B
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
4 X2 _/ o1 ^6 A+ a; ~9 G                i++;
, M' f% f' {- |5 c                //if(i >= 4096), d2 L- J6 b* H' O) j: f3 `
                //    break;8 O1 B3 V/ f% l9 F9 `4 ~, v

6 c4 U, i  h6 z3 [            }
% ^$ h, Q8 r5 R            UARTPuts("\n",-2);
+ ]6 x3 ~- @3 g2 E7 r; B  o        }* M! N4 Q& Z+ Z9 F7 f" P
    }
; M: e4 q3 K8 H0 d% M% S9 a; e; i! _! a0 q& d
}

. T& b3 N( e! `9 q- Q" ~0 Z, h

3 Q" J/ _1 O' F3 b% \
' f& V  Q4 I" i# \9 u
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。5 P4 C5 m1 c5 s

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
7 \  s5 e+ i/ h* F* S




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