嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?% }2 p# c$ j( p) W9 f
Void UPP_TASK(Void)
" b' ]- g8 M, \8 B{
: v, g1 D2 x6 Y3 q( V% d" T1 x/ H2 S+ U& H- G, ^( [1 P1 q, w( L6 h# s: D! ?
    int i,j,k,target_int_count=2;
: [# w9 w2 q3 h5 L; I    char ch[2];
9 r- o) B  V2 U9 ~$ J- h1 r+ F. x" C; T" e0 R2 T  v

" g: v' J8 N1 q2 \- E
) b2 G) h. v! y' m6 g5 L$ B4 _    upp_interrupt_count  = 0;
2 m& U4 a  H/ T    upp_error_count = 0;7 }9 S! a& p: v( C1 k

% w8 O& o, G4 c1 B& N& v    UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 q3 I* w, I4 {! u. q3 [    // Initialize data buffers, F" `6 R# T2 o; ^) x/ p* O
    for (i = 0; i < upp_frame_size; i++)
  }; {6 [: G$ \2 t* O; P$ g' Q    {$ I* o# d$ x% ]
       upp_buffer_b =i;+ |, l2 {8 m0 u
       upp_buffer_a = 0xDEAD;
( ^7 y3 U! b; f; ~    }- S5 ?4 h9 X: x$ `2 K3 H

/ o9 z" l  ~% p  r* p    //for(i=0;i<1024;i++)
  S' a( l3 ]1 o, i$ n0 _, h6 O    //    temp=0;1 P: ^' u  j. j
9 z! b2 U1 r5 `+ _
    //UPPReset();$ n* Z. d; _) w3 q9 F5 F+ q
    /*启动UPP DMA传输*/
* g7 O+ v  U4 _0 s: a) B    UARTPuts("upp_prog_dma_i\n",-2);
& l9 D1 H$ C1 O( e' |+ v& U    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- T" g( Y9 U" j, @    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 @2 J# ^5 l# z5 x    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);6 U; X5 b* A( R

7 }" ^$ p" y' D  P    UARTPuts("upp_prog_dma_i\n",-2);, ^+ q+ z( c+ }: w
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
- `! l1 H4 D5 z- A! a( _) Z5 ?2 G    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* |, s- A# h2 ?    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 Z% @& e! o6 v8 p
7 P7 g8 @$ b. |$ f    /*等待UPP传输完毕*/
. T$ ?' f. F2 V( H% v4 \2 v% b    //i=0;$ D! A, I# t( }# N% Y6 p* j3 q
    //j=0;
, Z: p2 d9 ^/ t) }    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# _# n" W& _9 k+ h2 z, J    {
* E: Z) c: ]* D, }* x        /*  测试UPP传输的同时操作普通DDR数据
* q* D$ k' b: _/ J9 ?# \: J        temp=i;" E! B. }; s: s: Y
        i++;+ v* v! P5 ?6 ]) H3 j! E
        if(i==1024). N( {5 V' R0 K
        {
' K" K4 c, m( p' @& L! J* \            i=0;
. d/ T* g; G" R9 ]. z            j++;' ^. e% P! ~- U/ B( Y# X4 c
        }! q5 x$ f% P6 f0 w8 n! [+ L! V
        */" n$ @' N7 P+ S3 y1 \& I( \: o' p
2 K* S% F; I& g# |0 n* l
       asm(" nop");6 c) w( K" a  A9 I5 |# ]
7 E& v$ U: ?+ `, m. f/ ?$ [
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 l" c; i# P* R5 _    }
- a4 U  C2 u* W% l+ C
9 v$ \, D5 s" e7 j    /*检查UPP传输的数据是否正确 (loopback modes only)*/
( w6 e& a1 d& A" ]    //UARTprintf( "i=%d\n",i);
: n: W, h. \, W, l    //UARTprintf( "j=%d\n",j);
* N2 _$ ~8 ], N+ B6 |( O    UARTPuts("Data mismatch in buffers.\n",-2);
% J2 q: K2 H4 `! j    if (upp_interrupt_count == 2 && upp_error_count == 0)0 b/ D( R3 _& V8 X9 y( g
    {
$ P: }0 w$ `; H1 E4 z  L1 d        for (i = 0; i<upp_frame_size; i++)- [; V& {; w) Y; N4 E/ m/ \6 T; @4 N
        {
2 D5 W" R+ I3 D0 w            if (upp_buffer_a != upp_buffer_b)
/ @8 r3 Q2 _2 O- P0 M" i- Z* t: l7 b            {
, K, j  |6 b, f& ^5 P                upp_error_count++;
+ G8 K  {' g6 l* B; a2 Z. s            }
/ }& h1 K2 i) t; V5 H; O+ c        }
3 ~, ^, ^( G7 u; Q    }
. F7 m$ g6 v' O1 t1 V3 |( d
( k9 y- V/ i0 i5 n# j+ H4 _    /* 报告通信结果*/9 v+ ^: H# V7 a
    if(upp_error_count != 0)  J. r# i/ k% K) m* h- H9 H% Y
        UARTprintf( "upp_error_count=%d\n",upp_error_count);4 q! t; n0 K: `1 v" x
    else
) D3 v5 [! x/ b, Q        UARTPuts("uPP transfers complete!\n",-2);
! w7 [; g- Q6 |3 f% W  T3 A+ F6 O4 k2 U% z4 I: c
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);- D( A# k/ s  H% C' ^
    UARTGets(ch,2);" y7 v* x6 x% O
    UARTPuts("\n", -2);
4 n5 Y- Q5 f& W
7 y$ g! v' |! i- f. R# G    if(ch[0] == 'y')
, L% D" |: V* {0 W; V    {. o# f$ `. p; b2 H7 H5 W
        /*打印全部读到的数据*/5 p" `/ z! l9 {) \8 s$ e  F
        for(i=0; i<upp_frame_size; )
( B$ D* m8 J6 D        {
' G- _6 w2 \. m            for(j=0; j<5; j++)9 `+ r; {2 A- {  N! n: K
            {8 \% \7 j3 a) E7 U6 [
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);. m! }+ |; r# _$ g. A0 \2 |6 }
                i++;* _: D5 r7 K0 W" z3 g# |
                //if(i >= 4096)
; v: {5 {6 g, S. k. H( c2 k                //    break;
% O' @! k6 @7 {# x  V8 M, r7 [. I" I! |, V  a
            }
: Y5 {3 z1 ?/ E7 j            UARTPuts("\n",-2);% V" j' \( p) t' d5 _' l7 {. ?
        }
' N4 S0 \* `- |' I) H: e8 n+ K: \, h    }8 z8 s# D+ e4 }" f7 k" a  l9 N
: k4 D* ]: ?3 o
}
- \) g3 K1 u: q) d' y
: F3 H* I% m& ^2 y2 y
2 f  _# _6 ^9 g' Y6 @

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
3 G: C( ?/ ^' m2 Q
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。5 \5 ]8 H. O# @( v! u





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