嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& Z$ l0 k3 X  z+ M# j1 N
Void UPP_TASK(Void)
5 C% U; d2 a  ?, z8 R" O, `{6 ^2 k  T% D  S) A
; \, T* w3 T8 o& _  \, r2 \) V# K
    int i,j,k,target_int_count=2;
! v7 G$ \3 W6 O" k# B+ A- M  \2 B! t1 z    char ch[2];
) U- z1 _, S) y& H
0 p1 w' y/ H9 f0 W
6 }: S1 w" E) H% J( q5 i. R6 {- N2 h3 g
    upp_interrupt_count  = 0;9 Z7 z" x6 A5 a
    upp_error_count = 0;  |% I% _7 }7 {- ]# D

0 B3 Q/ J! q7 W5 U2 W7 _    UARTPuts("\tResetting uPP buffers...\r\n",-2);0 m5 N& B4 y& d4 ?# V
    // Initialize data buffers( Q  v9 n! |. C) t$ Z& g1 f+ s
    for (i = 0; i < upp_frame_size; i++)0 Z: x9 i" _3 M+ p
    {
# Y6 T4 s, G$ z  h9 F5 \: r       upp_buffer_b =i;1 H% T  ~7 i4 X" {
       upp_buffer_a = 0xDEAD;
5 i  v8 V8 Y% ^/ e# o    }
0 L, B) m3 Z) B. f
' L) A! ~5 E# n' |- Q" |3 K    //for(i=0;i<1024;i++)0 o* }; m. _  K! o# Q2 J3 ?! |; ^
    //    temp=0;7 p5 ~! T5 C6 o; E# D3 H

% {: }% p: z1 ]; d! @! v    //UPPReset();! \% k( M( v( Z2 [3 G4 j3 T
    /*启动UPP DMA传输*/( I, ^$ G& s! ]% q1 K6 ]8 C: y0 y4 D
    UARTPuts("upp_prog_dma_i\n",-2);
  n, K; O% K1 K6 P0 T    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;, X: Z# [  n* b% }5 H+ c( O  ]
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 k8 r2 y) K. |0 v, y9 l6 \    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);/ b5 i2 [2 N5 Y

3 J; k  V* i. M- i, o9 u" G0 k  s    UARTPuts("upp_prog_dma_i\n",-2);0 N1 v$ H3 C! X3 S; Z6 b- C. {. O
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
0 k. A/ n; l$ W& n' G    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);) W& R6 J, L+ L3 z; w; T3 g/ G5 ]
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# W) ~' u, h4 G' n/ u4 r3 [7 L
0 x& x3 M* V# e3 c4 b3 {/ g    /*等待UPP传输完毕*/
& b- i- @& r4 C  b    //i=0;
! w+ \6 `& X; J5 m) w    //j=0;
- S$ ]! `& o* ~' t' D9 u    while (upp_interrupt_count < target_int_count && upp_error_count == 0)' d& P4 E5 O4 G
    {
& X8 K, e) w' ^        /*  测试UPP传输的同时操作普通DDR数据
. I2 a6 o: f5 ]4 e/ b  T1 {2 b        temp=i;
' @% D* L1 l2 M9 f8 l/ D        i++;
" |  |; V. d/ }/ X0 L+ E& L! p% @        if(i==1024)
' f) r, t3 q5 e6 T4 B8 w/ F        {/ j' x% l) T$ W& |( h" N
            i=0;: f" P) F# }2 b; r9 q( ?
            j++;6 r7 ], a# ^3 u" Q* g" G+ T
        }& y1 C/ N' S) n9 ^* b: O+ w
        */
2 a1 d6 F0 c" \/ J& ^# e$ Z( r* P8 ]+ R  X5 `' {
       asm(" nop");8 [/ G+ a8 f/ e  }/ S+ p
" ?+ ?: v9 R0 n
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
* U, c- O* w8 B! I4 ~2 I* e    }. M  J; c: l7 X0 ]1 i& x% ]
0 J: j- n# g" y3 a* ^
    /*检查UPP传输的数据是否正确 (loopback modes only)*/' a/ l1 x* c) r& [7 C. }
    //UARTprintf( "i=%d\n",i);) ?5 Q) a( p' A7 F* o
    //UARTprintf( "j=%d\n",j);
1 _$ U' {% J- ^% `5 d" z' @    UARTPuts("Data mismatch in buffers.\n",-2);6 e+ ^& u' J5 E7 I
    if (upp_interrupt_count == 2 && upp_error_count == 0)
0 d3 w) \. C$ H% t' \( X& r) e    {0 ]0 b* Y* r. d1 h
        for (i = 0; i<upp_frame_size; i++)
$ [; ~& `: H" T1 f$ t        {
4 i/ ?' k7 v$ m' b2 x! G+ o            if (upp_buffer_a != upp_buffer_b)
. ~/ v/ V" d+ U            {
) U: R. I  [) `6 [9 ~                upp_error_count++;
0 s: D, a0 F/ e8 H2 f            }
& }+ `2 l9 D1 ~; E3 H) ?        }+ q) U- e3 N; u+ Y' q- }9 z
    }4 f3 x" d, j% }
! k. i0 E, g8 A9 I" T
    /* 报告通信结果*// q; S/ o, z1 ~: ~% Z
    if(upp_error_count != 0)4 e! V) O: J: D. @: I$ D8 n
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
& N* e. O! V7 `3 B    else! F- b8 t+ f9 i$ }
        UARTPuts("uPP transfers complete!\n",-2);
4 L7 J% \6 V4 @- G+ S$ [
( J% y, D  b/ u2 i6 C    UARTPuts("Do you want to print all the data?(y/n)   ",-2);0 R! X9 y9 R; p6 }7 I3 ?
    UARTGets(ch,2);
/ t' L) C: d: z3 X- q    UARTPuts("\n", -2);  y' Y2 S& z3 \3 o

6 A8 y4 s$ E& i    if(ch[0] == 'y'): w# ~! O: p) k* L* U3 |2 }1 H" i
    {2 |6 T, \* h7 N# S# f8 Z1 P! y
        /*打印全部读到的数据*/) O. m" R6 L' a* C7 A% P
        for(i=0; i<upp_frame_size; )
* _( G- ~+ s( g) K0 y8 l3 h        {0 Y- P1 _# i; e  H9 u" g
            for(j=0; j<5; j++)
+ _* f# C+ U$ }$ K* {1 q            {" I: U2 s* g: Q: B6 O$ K2 B
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
) l4 N) h+ t! ~  t0 L$ y8 t                i++;  d: l( k- A" V2 g
                //if(i >= 4096)% A. e- E7 C. v! Y& L
                //    break;7 u& {" B7 ~3 m3 x/ G. t

4 [* w$ z7 r  |            }
* U/ j; Y# ?9 k            UARTPuts("\n",-2);. S! O2 Y4 v4 |5 u) J" ?' N5 G* f" g( B
        }0 L  }; V! L) n1 w' Z( ?# ^) j
    }  Y6 p+ i" q8 m# d; v& ^
- `) V: g2 a$ @
}

8 I7 G, `+ d% q
- @- N. _$ f) Y" W
# T  ^- k8 C% E8 G' d

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。. A. b# `/ ?* I* T: i

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。# t0 J& R: T+ M5 m6 R' g. u





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