嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
) h1 P& ^. i# a& Z3 \
Void UPP_TASK(Void)1 X+ V2 a0 [! h( j* S
{! ?3 p& F8 \' r& y, q
% {: c; J  c6 e/ R) l( U
    int i,j,k,target_int_count=2;
# m, [% P! k  [    char ch[2];! Z; l6 @. h% o% y  u, ]

0 w5 D, K4 j* {
6 f% q: _" ~- z, Z$ r% R( t; F% O9 n
8 e4 C+ v2 }# O$ O4 K* z5 K    upp_interrupt_count  = 0;: Y. O4 x; w# s2 Q
    upp_error_count = 0;
7 C1 Y' e7 A; |: f: I( H
* @$ s: q3 |4 m5 P0 y# M3 w# e' _    UARTPuts("\tResetting uPP buffers...\r\n",-2);' b+ w' M( Z2 B  p, r
    // Initialize data buffers
1 g2 q/ R% t) o. e, `    for (i = 0; i < upp_frame_size; i++)
3 y) U+ r7 r; f2 d$ l  r: {    {
7 C9 F6 L: z# |$ a       upp_buffer_b =i;+ n3 _; e; {9 n6 E. I2 ?# p
       upp_buffer_a = 0xDEAD;! o# U( d. w  U2 r- @
    }( b5 S" P7 c4 T) I
: o7 ], t- d7 u7 G5 j  |
    //for(i=0;i<1024;i++)
5 D1 g- V) n6 ]; _    //    temp=0;8 w6 [1 x6 U" v

. I( Y* a$ n  B; Y, Q: K3 R    //UPPReset();8 T* y. _5 D7 k' ~, Q3 L  m
    /*启动UPP DMA传输*/
, n! w0 b, [: }" g3 J3 `    UARTPuts("upp_prog_dma_i\n",-2);5 L" y! o* S- S1 g' ~
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;! s; `( P& l  J$ o0 t1 J5 c0 R" B
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 U% @& A) e3 B% o    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);1 C) D8 x1 R. Q/ @9 M9 z

2 ]: ^$ ]$ [; }6 j/ V* G    UARTPuts("upp_prog_dma_i\n",-2);: I7 J9 c( I+ T. }! l# j
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
: H% c1 L1 ?5 c    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& [5 I' F7 W, u! O2 o    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);4 v8 N+ U) W  I

5 r) x& B5 Z( A! A/ z5 z' n7 k1 l6 z    /*等待UPP传输完毕*/* }3 ^3 |9 l; f1 x& c3 P1 a9 v% n
    //i=0;( i2 P" u+ H$ k8 W7 Q
    //j=0;
% u5 C* V) w: ]& c    while (upp_interrupt_count < target_int_count && upp_error_count == 0)* G, N* }/ Y1 z2 a' E$ W; H
    {
; s5 r  L% ~! X+ h7 F        /*  测试UPP传输的同时操作普通DDR数据6 o7 \* f  b3 }  r' k% ~7 _' B
        temp=i;
) `( b, U4 V3 u        i++;& H, Y: l! E" Z) o* M  X
        if(i==1024)
- {7 y1 p8 x5 Q6 D! @  H        {* e; |. P1 l" t% W5 K
            i=0;
  P0 }% S/ D9 g& w% f" W. c            j++;% c+ q  [, P8 D$ r+ N1 B
        }
6 T9 d: K- o: ]) S* X; F% y        */  ~9 v1 p3 }! L. C+ c2 L/ a

3 c( L, |9 ]. u       asm(" nop");: i; {1 K/ k' |) P

: T8 x) G  W  b/ H       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);; e( u& p+ B4 {6 Q
    }1 u% q/ w7 S4 q0 u* k& C
- j4 n' W6 W. Q# _
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
1 v& g& f0 q5 k    //UARTprintf( "i=%d\n",i);& H" h" ?- b( w; k9 @8 q
    //UARTprintf( "j=%d\n",j);2 M/ f' f! t4 B3 l( B' O
    UARTPuts("Data mismatch in buffers.\n",-2);
$ A: d1 ?6 C. T8 p) w0 F% u/ b6 f    if (upp_interrupt_count == 2 && upp_error_count == 0)5 S3 i( F& C5 i* y' Y
    {
& l. @& E7 Y9 S        for (i = 0; i<upp_frame_size; i++)% [8 m% p  @( q' w4 e
        {7 Y: ^' S: Q+ R- E- D
            if (upp_buffer_a != upp_buffer_b)
1 `/ }7 _0 a& b0 c* h, x            {
) ]) L) H, i0 y( z  q! b                upp_error_count++;
. V- k* @* W* k  _$ p            }5 w$ \0 z# i  U, G
        }
5 }1 y& y$ v+ Q$ W, O( T    }
( _8 ?) l- }, R+ ]
- ]. p3 r( T/ }5 ~2 @6 `/ b9 J8 r    /* 报告通信结果*/: I) {: g9 L, v3 k& E5 F8 S, N. ~
    if(upp_error_count != 0)
- ^  s) v) |. T5 I        UARTprintf( "upp_error_count=%d\n",upp_error_count);
% c2 K1 e+ Z/ F: O9 e    else
& |$ \" E5 |. {" G5 Q        UARTPuts("uPP transfers complete!\n",-2);' B+ a7 `. d. ?' {
, r( \. k. J( Y) r8 r' q
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);' f+ b- a4 t1 S/ X5 ^+ P
    UARTGets(ch,2);
! K4 ^; j3 Y: Y. i; u    UARTPuts("\n", -2);2 u6 j3 v5 b2 I4 I$ N
  g* j2 U4 K" H( M. M
    if(ch[0] == 'y')6 F& r% d0 E4 B& o+ d
    {& N, K8 f. N; B3 Z2 f, V
        /*打印全部读到的数据*/
% h" Z" ]1 ~9 @0 s7 y5 w        for(i=0; i<upp_frame_size; )
7 h) k9 S  z( \0 H' @        {+ b& }1 }  x+ @% w; f5 U
            for(j=0; j<5; j++)
- K) _& Z) |" F) L6 Y" C            {4 n# E, r4 Z5 ^6 Y4 m8 d
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
9 n3 ?# D$ e5 }0 |8 Y( Q                i++;
, i7 l- r5 _( h# r                //if(i >= 4096)
& Y1 ?% i  B' _- J+ a                //    break;$ d: u; u( H( x5 I! p# ~
2 |  \2 [8 t* Z5 o( S+ M% N
            }- B- C, h2 p7 `* M3 N4 c
            UARTPuts("\n",-2);" p% X# f( D% n
        }# {7 c4 N8 i$ ]2 M
    }
0 G/ ~: k. P: p
( Y: B- [9 l; x' n5 V! U}

: _: v" U9 F& [7 B# v
/ ?/ U. ~& S) u; G

& o, A0 |( S/ M! t
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。* r! A, `  h# ]( H8 s6 k, n

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
3 W' g7 Y% [# \3 I




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