嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?5 p' M# S, g+ o6 G. n9 V2 V
Void UPP_TASK(Void). Z9 l# P" b1 j( Z: f
{% Y, k# T1 M1 M: J: J& c: S6 h0 x8 d
% ]" u  Z1 ^9 J
    int i,j,k,target_int_count=2;
9 |4 E0 V7 @  G6 Z- N2 Y: W    char ch[2];' [& Y( m' K" A# W3 L0 h8 ?+ q

# ^, R5 O6 g- i/ X& q* d1 Q4 t/ F" M+ M' O3 B! d

5 @% K3 q7 B3 `3 ]5 b    upp_interrupt_count  = 0;
6 ^$ U& k$ `7 K' J# k    upp_error_count = 0;
4 u" y; J0 @7 G5 G* _8 }
/ o! w" f3 A4 g3 P) W! K- K& {% w    UARTPuts("\tResetting uPP buffers...\r\n",-2);9 Z6 v2 a7 N# ^3 j
    // Initialize data buffers8 u/ d; x8 x! y3 ?8 w
    for (i = 0; i < upp_frame_size; i++)( ?9 [# P, o8 O% n
    {1 \' Y5 K  t, W2 a3 |; B( Q$ _
       upp_buffer_b =i;
4 D3 X" t, T' {/ }7 r* [       upp_buffer_a = 0xDEAD;
2 a5 G% N4 _7 A4 ?    }
  C1 G4 a& ?  L& Q. J4 U& g" n5 V2 W( N  s8 v; n9 e8 R2 N
    //for(i=0;i<1024;i++)7 c3 }7 Z5 ~& \! l
    //    temp=0;
, x( W) z5 f5 t
6 D6 d) K. u7 s2 \- V    //UPPReset();
9 ~# B& g0 Q1 e, Q% m! E. s6 X    /*启动UPP DMA传输*/
1 b6 {7 n  s/ G5 n5 S4 g    UARTPuts("upp_prog_dma_i\n",-2);
" ]$ _8 l2 }5 E' a( v    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 x5 r4 v- ~9 Q( o5 [2 _$ ]    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);3 R0 d! o) D1 ^( W
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);4 d+ Z4 p4 L( W  {8 T' I
& E$ o+ r" I; @' h; U
    UARTPuts("upp_prog_dma_i\n",-2);9 k3 i, K& J# U' W( E; B# w
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;3 b9 o7 N( H2 b
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& _$ @0 U2 h  }' @$ ^/ N    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);  D' `7 {* h0 m! _) J9 F  F% |
0 X9 {- b* I2 y! R! B. O9 ?* \6 f
    /*等待UPP传输完毕*/
& {' V" |, D1 p; |    //i=0;
/ E+ f/ f$ a) L    //j=0;
, |! O9 E* P6 j' N    while (upp_interrupt_count < target_int_count && upp_error_count == 0)- k( q7 q" l* a9 N& a0 ^& v
    {
; i# C' O) W, Y+ I( {- @        /*  测试UPP传输的同时操作普通DDR数据
, p0 i* }8 K1 G& m. E7 ~& T8 z4 @9 L        temp=i;* V  g2 }" i  F3 q6 I7 ^3 H
        i++;: i$ f. ^- v" K5 Y
        if(i==1024)2 p. p: k, W9 H. e5 e' R* A
        {
3 z7 ^" j) t- K. c" H) p            i=0;
) }3 S- P- g8 p8 s- e7 T            j++;3 e' A/ J+ ~& U8 e- `7 {/ J
        }
* H8 q, W4 ~* q; E  L. R4 ^7 }        */8 @/ b# o! _/ B3 b4 o: j
) a" S/ r8 K  N
       asm(" nop");
) N% D5 @# n$ z& L3 P
4 |- [) j: n) n7 \4 f$ T       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
% @6 x! e7 h3 B& w8 C- O    }
7 P  e- F7 X+ e0 ]/ n  m+ j3 A2 L$ K, S
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
3 x! N; ~! D* ~5 B    //UARTprintf( "i=%d\n",i);
( K! K+ ?+ Q2 C' e# d% W- D! f    //UARTprintf( "j=%d\n",j);$ r+ H3 @/ N1 J! {; R0 d
    UARTPuts("Data mismatch in buffers.\n",-2);. t* y) N( k5 w4 E  ~8 c! ?
    if (upp_interrupt_count == 2 && upp_error_count == 0)6 W& l! _* ~; n* W$ L4 k
    {
$ d& b8 [' p4 `        for (i = 0; i<upp_frame_size; i++)
" V8 K8 D- `$ E6 [        {
: I! g: i4 V9 y            if (upp_buffer_a != upp_buffer_b)
$ H9 b4 k0 |* B( `8 ]            {
# U/ E3 l/ s+ f' Q; r* }" {% G- C                upp_error_count++;
; o5 O$ l0 W8 N, J& L0 k            }; m& R* \6 {2 @0 X8 P& j1 ^$ g: }
        }$ H. D- r  |) N7 c; \$ p
    }
! a$ t9 D. x. o
0 H0 S5 ~6 U" F7 V) T    /* 报告通信结果*/
! K* D2 O; d, Y6 A8 t; U9 n& n7 ?" D    if(upp_error_count != 0)
2 f: S: X% {2 g% J( _1 S        UARTprintf( "upp_error_count=%d\n",upp_error_count);& _: [2 {2 K. O6 U
    else$ [" X. |% ^* G; Z
        UARTPuts("uPP transfers complete!\n",-2);( B  [2 _( Q; b# ~# R
0 {! b8 j- R# w+ H
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);! U6 A2 ^2 d4 p7 a$ {  k& Q
    UARTGets(ch,2);
' T  j* z+ g$ I  r5 h6 U, |    UARTPuts("\n", -2);
0 C+ c8 c' x  O4 s5 M/ r
, H0 `6 T# x6 j  Y' k    if(ch[0] == 'y')9 Z" F+ Q0 @* q1 j& g
    {& P6 R( C$ u' T) m" u
        /*打印全部读到的数据*/
; C' u  X5 |9 |. u) d        for(i=0; i<upp_frame_size; )
  V- Y0 F+ x& J        {
( B7 i+ W: q# u  B: Y, r. q            for(j=0; j<5; j++)
1 _. M$ ^/ U" X) l" i7 S            {
/ E7 N" a' o1 ^+ S2 ]; W1 V                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);6 ?, B3 ~' e4 s4 I- N% @3 B
                i++;+ ]. K5 Q2 }) i
                //if(i >= 4096)
" z  @. G' w* T7 r2 Z- K% _                //    break;
% ^' q* @9 q9 f: G8 N9 B$ g9 [
4 f# G# z: k' L2 v9 q, Y; o            }: e3 H* x& Z0 l: J2 T8 v  t1 C
            UARTPuts("\n",-2);
: j+ H% x- t+ _4 v        }7 l9 s/ R, a  ?. }0 ~. |
    }. f/ h9 c1 Q( B# j( j

/ j% ^; H1 L& f# i9 N* s- H; q$ s! ]}
, z3 v: w$ E0 G

9 c4 n2 n' _- z7 X9 x9 H. q
* \; s) L( Q! }# z% Z( J
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ g5 A/ \3 |; z% `: y* E
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。& Z* h' b( Y2 U; g





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