嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?1 M* r/ y# P( a% h' Z% e
Void UPP_TASK(Void); [9 j" a7 l. j9 p7 g9 t) H: p( }
{
! F; ?1 r5 N; L" G. [, \; g  t# o& @" D8 q1 H! S5 s4 p
    int i,j,k,target_int_count=2;
- Z1 y0 d+ @, N3 _+ m    char ch[2];/ [, D0 y/ X3 ]3 n* ]
6 |( y+ o7 u( K' \7 }: E
$ R5 Q/ O# e4 F: G; f

9 R4 E5 {  \- G0 T+ I    upp_interrupt_count  = 0;
9 Z; M) [* O6 N# C# D- |9 e    upp_error_count = 0;
2 `. n5 `, q* z  d) ^; O3 J$ {$ k" P& c6 {/ U
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 Y+ w% E- Z9 e, |0 ?    // Initialize data buffers
7 z7 o$ S) A. E4 m% O# Q    for (i = 0; i < upp_frame_size; i++)) R2 Y  p: w7 R- n
    {, o7 X% \  x$ \! M
       upp_buffer_b =i;
0 ~7 C( A8 D6 s' \" T       upp_buffer_a = 0xDEAD;- E( g# @5 t7 K) O  h0 Q- f, B
    }! C+ w: @% W% y2 D9 }! X0 ]

9 b( K% h6 q$ H9 z  `4 l  Y    //for(i=0;i<1024;i++)& |+ P1 G  y5 J3 q
    //    temp=0;
4 i7 L1 I( [0 ]! a4 Q( s. i; x6 C$ o. g* e+ f/ [
    //UPPReset();
  K. W' d2 W( b/ s3 i9 H% i    /*启动UPP DMA传输*/
; c/ Y. e, S3 u/ g    UARTPuts("upp_prog_dma_i\n",-2);
/ E( E1 h5 ^& W2 r' r. v    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;" f6 Z: o9 D; b% S$ a# s. u# a; _5 z
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' b$ v" N; l) l0 Z    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);3 N+ P6 r1 e0 P0 B, H( P) o

- Y3 Y! h! K" s9 ~8 }    UARTPuts("upp_prog_dma_i\n",-2);# n9 O0 ]6 [- S! i, B% m
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;4 h' Q' T/ z  p7 }+ D
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, e" X% D* L7 z/ o1 c    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);" \4 p! R9 O! I
( Z& [# Z. y- `# Y
    /*等待UPP传输完毕*/7 D  \# J9 U, b8 r2 v
    //i=0;; v/ I+ }$ V2 T, y# E$ l3 o8 x
    //j=0;& U2 W& k" X) a7 [. f& X
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)1 @/ A9 ^0 m  s: y- a
    {$ B1 @& F; j) q; n- }
        /*  测试UPP传输的同时操作普通DDR数据. a3 q2 x4 y7 M3 \6 V
        temp=i;
4 y& N, l0 `* g3 ]9 E: U# ~        i++;4 v( `& ^5 r) i  y2 E# y$ {
        if(i==1024)
$ p2 N. F- j* D, l9 _$ f* e        {
/ |, K" w8 n. q9 J8 Y3 c2 J+ n            i=0;, ]. r/ M  M. _: k1 V9 [8 g% m
            j++;6 Y4 q+ \( F: X. b  T
        }2 n& ?) ~# b$ R, D" I4 a- L  ^
        */! N! D8 ~# \4 q" L$ w% u4 H6 F
$ C$ x$ a7 }) z; K, I" I
       asm(" nop");
- l* I% w  ]4 y+ G% ]/ T4 G  Y& J* @, j! Y; v2 n, p" A
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
6 I6 `, E5 L4 k6 [% c8 N6 E6 l    }
' {& u6 B+ r  b9 F! z5 C
4 y5 K% {! |2 h1 t2 M% W    /*检查UPP传输的数据是否正确 (loopback modes only)*/
/ \& H# g( K/ J# l8 p7 b& N8 \    //UARTprintf( "i=%d\n",i);5 I+ ]0 q# n: \' \7 d
    //UARTprintf( "j=%d\n",j);
, G( H5 h) h* q    UARTPuts("Data mismatch in buffers.\n",-2);+ F2 g  k6 v9 n! Z7 o9 E3 Q. U
    if (upp_interrupt_count == 2 && upp_error_count == 0)
' o/ ?' t. p" d    {
% r0 I, A; A! S# ]% P; j& Z; x        for (i = 0; i<upp_frame_size; i++)7 l5 Z; m+ ]% [9 Q
        {
. Q# j/ A1 y% U! {0 I            if (upp_buffer_a != upp_buffer_b)
+ S7 ]6 {& q1 s. q2 E) F! D$ _8 u            {
: O: d  _* j; D" x: N( }$ y0 q                upp_error_count++;
' i  w, L$ H$ D% v* Q8 k6 x  v& x" d+ U            }
1 g; h; U9 L& y; h        }
( c* r$ @9 ~( w4 y/ L    }
4 f, Q# d* z$ M* _+ }2 h
3 W+ p! z5 M( r' P# U    /* 报告通信结果*/8 P' B8 i& u3 j+ x" Z! h3 K6 W
    if(upp_error_count != 0)
( L3 S1 e/ v' B! c& R        UARTprintf( "upp_error_count=%d\n",upp_error_count);4 _$ h& i( c. f! W8 T% s/ V% l8 D0 V
    else- X/ R7 j; G: }' P5 V5 `
        UARTPuts("uPP transfers complete!\n",-2);
( Y0 _! f; N8 j! v, e- Q5 i  C6 P
8 ^5 V! ]/ x' J    UARTPuts("Do you want to print all the data?(y/n)   ",-2);0 C4 x( K# d( ^/ m8 C7 x+ S: {( }
    UARTGets(ch,2);
& J- B3 P% f. Q9 I0 ~4 W: u    UARTPuts("\n", -2);
7 i. B' y& v$ w) O, J+ i9 O  V% [
  l7 u/ u, @% E2 K. W    if(ch[0] == 'y')
$ K% [! |  c; \; Z    {
1 M# \/ _. `4 a3 A' H) k/ t        /*打印全部读到的数据*/
: e0 l- a: F+ {3 h        for(i=0; i<upp_frame_size; )
! {' B$ T+ G; ~& T        {3 A' \7 o. |1 i6 f+ b$ Z. F
            for(j=0; j<5; j++)$ }5 r5 y' E! U
            {
! l: `  u" @6 g6 R9 u1 Z0 C                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);% |7 Z' }* o- t: }
                i++;; f1 a: W1 F; G2 t
                //if(i >= 4096)
2 E. @( S0 c0 Y6 t6 \                //    break;
0 w8 n2 g; p6 ]: x' f2 H: ?4 Y: m7 i; E- p' e3 e7 l) ]
            }5 T& R+ R2 o! v4 f* ^  D
            UARTPuts("\n",-2);+ \1 x$ }: R* Q$ ?
        }! p* L7 I4 Q, V; e
    }
* Y* n4 k4 W" |( x2 \. T" \' J$ \- x( ]7 ]9 A
}
) T' S+ l' I( n6 D4 ]' S; l& G: I

; c( Q7 o7 t4 P1 K& ~* P: x+ C( e: M" l1 T- n

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 S6 k5 H: x- @5 K/ ~* L8 |! l
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。$ E4 N' q9 D( h6 {





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