嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?+ [# j) k  j/ t8 V& O* C
Void UPP_TASK(Void)6 A* s" w8 `6 {- C0 q
{
$ p3 G7 v% U$ G( W
/ x+ @- I: F) l    int i,j,k,target_int_count=2;
9 e+ F) L5 A2 ~  i0 D5 V( _    char ch[2];
, S! e/ Q& V: C# {, K, g! ?4 |7 g$ q6 c1 O4 E
. g3 c: C9 ^, X7 [

* \( W9 {) x6 c6 W    upp_interrupt_count  = 0;0 ]* L. W* w" W% c
    upp_error_count = 0;
+ E, H; {' j+ \  M, y" p/ z
7 y; Y4 r1 Y; K  ~9 n  |2 J    UARTPuts("\tResetting uPP buffers...\r\n",-2);
  K: |- q8 T& L& ~) J    // Initialize data buffers
) a7 U& [/ L- e! `2 n    for (i = 0; i < upp_frame_size; i++)
4 X% \* @1 ]# t( q5 H+ R    {8 k0 d3 c+ \$ A1 Y3 Y/ Z/ H
       upp_buffer_b =i;
# V+ {1 |; R* M" Z+ v1 b) j       upp_buffer_a = 0xDEAD;
! {! I& b+ j2 J' X" P3 m  Q1 l    }# F8 A6 [4 w% W
$ p# E( }5 l( b. i( m2 w
    //for(i=0;i<1024;i++)/ h6 g/ K; W, @4 E- v* \% o+ i
    //    temp=0;
& x( ?0 d/ k$ f: U+ C! {- q2 c% {2 {8 j- K, x. R
    //UPPReset();. t8 g: i2 v+ J2 G" L  Y5 `
    /*启动UPP DMA传输*/0 K7 B/ e% v/ j5 Z+ p- w1 A
    UARTPuts("upp_prog_dma_i\n",-2);
2 H7 x* U7 F& Z- V" S2 |    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 j0 P$ j: t" p: F3 @! _! C2 s0 ^) m1 q    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 Y# i3 ?2 c1 B! b! j    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
0 b% l: K' y; T0 {) D1 V2 n
# R9 x+ _: R9 U9 r% \- x. w0 Z    UARTPuts("upp_prog_dma_i\n",-2);( O5 t2 j! T( j; U* ^# S
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;: w& E) T% }7 }; @2 I" m
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);/ z! t0 Q% g4 |+ I0 ]' q; q
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);5 b  v" a7 t+ ~0 U
$ {0 G  c$ K* @5 ^1 S4 T) Q, d
    /*等待UPP传输完毕*/  L: _. D  k8 ], _
    //i=0;, `0 j7 f1 @* n# \1 v: ?# R9 j+ ?9 c/ h  T; A
    //j=0;
( L: a3 F, {4 d( ?1 X    while (upp_interrupt_count < target_int_count && upp_error_count == 0)2 p3 o5 M3 L$ k1 \6 c. K# {
    {
/ q  W3 H% t8 D" o/ b        /*  测试UPP传输的同时操作普通DDR数据
4 w, |9 z2 p$ \% u        temp=i;
* H! r' E7 a$ t        i++;
1 b; ^5 F$ m! D. h0 t        if(i==1024)
' @( j# _' D  U, J: w9 E        {3 T* E" H: q) U
            i=0;- a) d* T- H- r, t
            j++;" \7 H/ ?; u  S
        }
8 k' c! f  c9 q3 M) ]1 p/ P        */
- q$ X1 K" t. J2 M$ A( I' d5 E8 M: ~/ y& p0 d  b# B. V8 B
       asm(" nop");/ e9 E* d& W: r/ ?

' k9 G% j, ^0 D/ _) ]% X       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);, ]4 j* p) v( G/ }- t
    }* ~! L% T$ g8 ?* _4 P5 W1 U$ p
( z1 A* l2 H" _$ Z1 T' [
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
% A8 R8 u5 L, ^% X' c: J& X- E    //UARTprintf( "i=%d\n",i);
- ~! Z6 V1 Q8 W. C+ U$ ?# c  h    //UARTprintf( "j=%d\n",j);( K, p: @  |5 `1 a3 c7 T" @
    UARTPuts("Data mismatch in buffers.\n",-2);" z6 g2 U8 x7 t8 P4 R! a5 r5 Z
    if (upp_interrupt_count == 2 && upp_error_count == 0)2 _& J4 l' w' Z8 `
    {/ ]+ Q. j6 R3 A0 C% P& t7 G: h
        for (i = 0; i<upp_frame_size; i++)
$ U9 d  \" ^9 U3 W        {
: }( |7 T, j# _) @1 J            if (upp_buffer_a != upp_buffer_b)
8 `, I; x/ G+ Q3 E. e            {
0 y' S; u- C& I                upp_error_count++;
5 q5 o& V7 n: |0 v2 b% B            }% B% O- Y4 @# [5 S" q# g
        }
8 o4 H; f) v( n( H9 ?    }
# f4 P5 H- g; U2 I, [+ o. y5 d* e7 Q
    /* 报告通信结果*/
* J; s1 U0 Y& }- G1 G    if(upp_error_count != 0)- R1 b* |. Q$ L- D$ {
        UARTprintf( "upp_error_count=%d\n",upp_error_count);% J0 y* s, j8 ]# V* p
    else
2 w2 \7 j/ o6 ~$ ^        UARTPuts("uPP transfers complete!\n",-2);# C0 H% F0 f% L2 |9 I

7 {. E: x% G9 ^; l/ D    UARTPuts("Do you want to print all the data?(y/n)   ",-2);7 `3 e: r0 T: w& X. j
    UARTGets(ch,2);
- k2 T4 ]0 z! x; r# ~4 `) ?) b- n    UARTPuts("\n", -2);
( r/ p# }+ g; @% m% P" m/ [2 O4 f0 ~0 B2 U" T; C1 y
    if(ch[0] == 'y')
) a& K- D: k0 V    {
" ]4 P# d. `7 ^0 \& y$ f$ R        /*打印全部读到的数据*/
2 \" |# y7 o  E! ?1 L) W' b        for(i=0; i<upp_frame_size; )" [& U+ Z/ R% Q
        {
" s: q, j) `2 J' Z- m) f2 `0 ?            for(j=0; j<5; j++)* O" c/ @! g# Z8 w9 F
            {; g1 D1 P9 U( h# G; p: }% F
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);% \9 p! K- r0 ?( N3 F2 F' |& P
                i++;; F* D- I* ~/ f! M
                //if(i >= 4096)
- @# E7 [. e( [# z                //    break;
/ S$ R8 l( I. W# M5 K% u  |3 }* j8 c9 H7 h7 u
            }2 d6 A9 [9 f0 h4 @/ C
            UARTPuts("\n",-2);, J5 O3 O" f; ^- K- \  O  g
        }
. _2 R& U! R( @) k* E. X    }% ?9 }; N$ s- y& z
' C$ Y. q+ o( p  N
}
1 J6 Q8 R) t* u

  t6 B8 c+ {9 d; ]+ `) }! Z" a9 Y! H1 ?/ _! h

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 p  _) C3 Y* P% n1 r" G! B( _
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 U& }( ~& P$ G2 A




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