嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?# L6 H6 K/ H) |5 |1 @. g0 Z
Void UPP_TASK(Void)
6 k) k" ^9 Z# h{% t/ p- k3 C( ?3 Y. Q; N
! j; i7 C8 x+ f: v( i
    int i,j,k,target_int_count=2;
; v' l1 ]( e  i( t5 {8 j    char ch[2];3 @) u9 A. N$ ^6 H

7 Z, n' G8 _  s& o- s
! E0 c% D9 m. e( N" |# |' S3 ]- q# X# |! s0 P
    upp_interrupt_count  = 0;
, `( q, G) Q& W. ^    upp_error_count = 0;; q) e# R9 P% E2 m5 b
: |1 P; D4 y( e
    UARTPuts("\tResetting uPP buffers...\r\n",-2);9 p7 D5 `' G1 ^1 ^: P* b& T
    // Initialize data buffers, f' i) b- A/ x6 y7 _$ F: v2 r
    for (i = 0; i < upp_frame_size; i++)' Y% S; {% e( @* d$ @
    {2 l' \( E! q! b
       upp_buffer_b =i;
! i: g! U) ?: `' A6 G       upp_buffer_a = 0xDEAD;
# q2 B; d! ~2 z( J    }
1 R: Y$ ]- [$ v% c8 P* y4 y: @3 N+ j- ^
! ^7 H+ r$ x2 y" s  g    //for(i=0;i<1024;i++)
1 X% g- o! K. i0 {    //    temp=0;% j) F0 B" g  k- c# O5 i

& ^) e& y, N3 S9 C7 \    //UPPReset();
* [7 i2 ~3 ]" F8 @# G9 X    /*启动UPP DMA传输*/; U, j  {* H% \7 Y; [  G+ y/ k5 d
    UARTPuts("upp_prog_dma_i\n",-2);
& {& k6 G- j% G    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;6 L2 l" C& F7 k5 {$ ?  T" m
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' M! x8 }; c# q$ \# c    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 x" }( \+ u8 ~5 @! ~
+ S  A8 k, d6 E/ F4 i% H    UARTPuts("upp_prog_dma_i\n",-2);
" A& K3 m/ m- t! y    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;* u% _6 Z: W6 B0 W+ U: a, p1 u
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);9 ~2 K3 V, a& R+ d
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( U4 P: X0 q& |$ k
8 a$ h5 S- q1 j: b# O    /*等待UPP传输完毕*/
9 Q$ _" {7 _2 F  K7 N- o1 U  }    //i=0;+ I; F7 K" e9 t
    //j=0;
1 E7 D* j6 A- S    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' w9 a* u3 d4 ~  K' A, f. y0 Z    {
: u$ f& ?+ Y3 C& J/ S% G+ f5 e        /*  测试UPP传输的同时操作普通DDR数据. S7 z, p7 s+ D; ]
        temp=i;3 \& T$ \3 g: g! A! B
        i++;+ {8 H& a1 |* B$ a5 a4 g8 E
        if(i==1024)
9 c5 K/ N! p# V# Y, s2 b4 F        {
* r- _3 e6 p: F" X/ a            i=0;! y9 }0 Y. ^+ A
            j++;
7 T0 t7 L( Z8 A! i        }
8 D  H1 k$ |# N1 A1 L3 ]        */0 j! ~6 Z/ A7 i

2 v* r$ T5 j! M       asm(" nop");
; k8 Q2 Y+ I8 C' E% D+ i% C3 \
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
: ]8 b: o' o: Q- E# e9 B# F    }9 s3 @: l0 g- z5 |; |

' j4 p& v" p7 r+ t" t+ r0 r, X    /*检查UPP传输的数据是否正确 (loopback modes only)*/
5 X' `. `+ \' i! X/ n9 Z    //UARTprintf( "i=%d\n",i);
  n) K/ J  S" F4 Z% M    //UARTprintf( "j=%d\n",j);
5 R0 B; B2 ^' @4 h1 h3 b- S. p0 D    UARTPuts("Data mismatch in buffers.\n",-2);
0 d* K/ i7 `: m5 v    if (upp_interrupt_count == 2 && upp_error_count == 0)
* P$ s" R2 Y! B# k, N    {; m+ i7 i  e, I. [. V
        for (i = 0; i<upp_frame_size; i++)5 o3 c7 |# O" q8 |- U! P
        {
# N) r* ~' i& L" S: b. z; E1 E            if (upp_buffer_a != upp_buffer_b)3 V6 N6 X3 K+ r' U1 C
            {
2 A) V' ?! |* Y/ o4 \4 o                upp_error_count++;
* Q7 A. G/ e* M6 K            }
5 c1 F* k4 c/ \& Z        }
2 _( z8 Y8 O& r    }
0 M; x5 i4 w0 c% C0 {# s3 Z2 E  v$ L
) d5 x& [# x: a" K; z# g    /* 报告通信结果*/
+ ?, N" i3 v( ?. k/ D9 q- u    if(upp_error_count != 0); C. b' z$ I. A" Y. m3 a8 a
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
) h2 c, {3 |7 x& p    else
  k: W" r2 x8 ]2 \* @3 E: _6 j        UARTPuts("uPP transfers complete!\n",-2);% M' v1 H0 O% J4 }3 \
" [& }2 L! B5 K6 E% j, L  N9 v
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);0 W" c- ?" P" p8 V
    UARTGets(ch,2);5 v" E1 \! s" y6 P) ^( v
    UARTPuts("\n", -2);6 ~% n9 N0 J  H' V0 Q5 o% b* b) e# y

8 m; O; ]* y' d$ I+ K" H: W    if(ch[0] == 'y'), Z) M7 M& a8 I$ p. L4 I3 O" a
    {
1 [& D5 q& O; W9 g& }* C! _        /*打印全部读到的数据*/9 Y+ ?% s2 {& |' Z
        for(i=0; i<upp_frame_size; )) `1 ~3 t9 P( l6 m# C2 H4 T, M! u
        {) K) I. k6 }9 v0 N# K7 `
            for(j=0; j<5; j++)
) `1 K5 q/ @- @            {; d$ v) S8 A" M  b) f% f2 D
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);, b2 [0 K3 m4 S& g  E- c' Q
                i++;
4 C/ o1 v3 y$ q8 Y                //if(i >= 4096)
* |6 c9 N+ w$ w+ O8 P3 o5 S                //    break;
) G% K8 _4 z" P& c( e1 v7 H& N" y
            }
9 j9 ?+ o/ Q" b% S! _( Z            UARTPuts("\n",-2);  _/ v+ q, M& A" t0 K  p0 z
        }
- {0 m3 v9 H6 Q6 Q6 ]    }
( P3 R! B. ^* z* _8 r" T
1 t6 M& G% b8 l+ ]* d- @}
* m" ^- g* I  u5 F3 s
9 M/ Y9 ^1 y7 J; j# }/ L

+ e0 U5 f6 @# _
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 ~' i6 N) V6 H
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。, k; ^" {; N% Y$ V/ S0 S: a





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