嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?) q1 C$ d. n+ W, ~# J: k
Void UPP_TASK(Void)7 w4 g0 U2 C' o
{
5 G  T7 L1 L1 O& H
0 ?, c; a  c$ c5 o    int i,j,k,target_int_count=2;& t, l  v" J8 i' D1 ~
    char ch[2];
8 ]6 Q4 W5 \6 P1 I; v0 L7 u) K
0 [( P1 P: C" i- i& j' y. \3 }/ @
; y1 \4 d1 \, z' U! h' q
    upp_interrupt_count  = 0;* C6 y9 x2 u5 U* N" c$ U0 W
    upp_error_count = 0;5 R: Q4 _5 N: _  @" s8 O
  d& X) g8 n& X: N1 g, m
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
2 r$ l# C! D' r    // Initialize data buffers% L5 f2 O3 X* @, T
    for (i = 0; i < upp_frame_size; i++)
' j- ]5 @' k7 L& C: N& R  U    {
, ^5 W/ n8 \7 k) O) h1 C0 Q       upp_buffer_b =i;; G! Z! w  w" ~" U# K
       upp_buffer_a = 0xDEAD;( d, e/ _! R" Y9 }) {' h% E$ `9 [
    }
- `2 t2 a7 N; W& Y: i, _. e6 x3 i( h  d+ p0 B+ o: h& }1 N, x$ R
    //for(i=0;i<1024;i++)
6 x' C  R, F/ D/ T+ p, Z    //    temp=0;
5 p/ s  t+ L# L  c+ Z- E) H# Y9 k) N. u. ?
    //UPPReset();$ C' P3 c* i2 {2 A
    /*启动UPP DMA传输*/
; [# H# {7 p! r1 T    UARTPuts("upp_prog_dma_i\n",-2);' {% k0 A2 Q2 m$ g' a
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 ?" K4 j( F8 F) ~* G# r4 b' ~1 ^    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);+ O2 ~7 r4 R$ L
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) M. r* y* N+ ]2 |7 u3 r0 k% Y3 {+ [7 p# \6 Y2 D
    UARTPuts("upp_prog_dma_i\n",-2);
5 g" [9 a8 S, m8 t( Y' H    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
5 x" B4 ?4 x7 q% d# r7 G) [    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);' t  W5 q7 y) q! _* [$ Y6 A
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 X/ R& s$ V; O' o0 F
$ f, b' F! `: Z6 u  P) s9 G    /*等待UPP传输完毕*/
) l1 e" e& v: ?, L( Q4 \    //i=0;+ w% B7 q/ j' e, {2 K" S; [
    //j=0;
2 u' Y$ b# B5 `2 g" Q    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
+ \( ]0 E2 J2 m) M# B    {
: X! L% x- u7 L8 \0 \/ Q4 ~        /*  测试UPP传输的同时操作普通DDR数据
* |; P# ~" |: P% Y! t, T; @        temp=i;6 B$ g% j" H6 i0 Y
        i++;
3 i9 _, ?. {* g& e% _7 }2 {; v/ D        if(i==1024)
2 j( r! v9 s9 R# _8 |+ h: M6 l( y6 l        {2 @0 K4 y1 p0 Z7 J# w+ s: p4 E
            i=0;# g( s% F2 ]2 y4 G+ c
            j++;9 Z$ c) m$ i4 g: t  G
        }8 M) Y% Y% e, N
        */
! \' B" ?( w. i+ D& i; h. z" o6 F4 k+ O& @$ J  }% n, y8 M/ |
       asm(" nop");
& f. e& ^' ^$ u- M3 w6 j4 a) s
4 a/ O; C1 E$ h+ p% o       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 S, ^% [% r; V    }
: O( W( [5 f6 l1 m- Q( Y
: Z9 [& @, m9 n: p  \$ M    /*检查UPP传输的数据是否正确 (loopback modes only)*/
# b+ z$ C. z2 k& t    //UARTprintf( "i=%d\n",i);
5 W8 e! V7 @* ]5 n. a, o0 V    //UARTprintf( "j=%d\n",j);2 t" L, K# G& i( G, x# H: Q! B! u
    UARTPuts("Data mismatch in buffers.\n",-2);
- x! M' ~* r( H1 H# B6 ]    if (upp_interrupt_count == 2 && upp_error_count == 0)
) K' o4 M* t* G0 Z5 w    {
. }4 {) A  Z# w. V        for (i = 0; i<upp_frame_size; i++)
1 ~3 h3 Z+ p$ W+ e        {5 _0 t9 P+ H- k7 s  f) \1 z
            if (upp_buffer_a != upp_buffer_b), E" s! ]6 U# F4 i
            {0 n- h/ G$ n; S, A
                upp_error_count++;" r% a4 A. v# E) z* @
            }7 @2 W0 K# ?4 D6 Z, A6 t7 e) G' w" N
        }# k2 \. n7 L- Y; B0 s1 L
    }
# i8 I& e: q  J9 c  I$ J/ w
8 F3 o+ y0 |1 f2 U  ?" G    /* 报告通信结果*/, }7 R, f9 c) J* i5 N
    if(upp_error_count != 0)
2 l  n1 o7 {, V+ c8 ]. ^$ n        UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 G8 q& z1 b( ~2 |/ [, [0 w/ v    else
& f7 N1 |4 [2 b9 F; l* x- C        UARTPuts("uPP transfers complete!\n",-2);. L! Z- k8 z+ V
3 p: _# @$ L+ w, W
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
: X* A8 m! s& A; \# |& i0 h9 B) I6 N    UARTGets(ch,2);
( R( L8 ?- D, G+ {, M% I. U/ c3 A    UARTPuts("\n", -2);
8 k$ }9 _- P) Y( `# c( n" `/ m% g' ?9 h6 G7 K
    if(ch[0] == 'y')
7 O& `. A8 h2 _  Q1 F: K    {, X2 y4 w9 m, m3 j+ K! d( E- p
        /*打印全部读到的数据*/
! o: z5 n. s: ?1 [- j* N8 j        for(i=0; i<upp_frame_size; ). l; t; d8 X9 V; M0 O' |# s
        {
6 F7 Z8 ]+ x; {# s- v5 U0 g5 ?            for(j=0; j<5; j++)* ?7 c, U, s2 Y! V; m
            {
# A6 v5 ?/ ]$ t/ [8 S8 u4 G                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);6 A9 k' e: n) s# j0 Z( T
                i++;
# w. p+ ]- A# |- L# f1 y% ?                //if(i >= 4096)
- n: U: n/ h" |, q/ G. L7 C  ?; x                //    break;+ j  ~# }5 `: h
. y& j; ]3 }) a' M! g: s
            }
7 @' k' C3 X( d- U            UARTPuts("\n",-2);
, b0 |4 g9 K* ^        }  I* Q1 Z- ~' f: t- k
    }
) {5 a1 `" k  g% L+ Z9 ~& _9 c( X3 Y: @. f2 R$ Y2 W3 {5 _4 M% q
}

9 u2 E5 u* Q  @& Z

' f7 @4 C8 @  }+ W6 s
$ Z; r5 {2 J/ G! R
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 Y5 @4 }9 S$ A
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 E2 k9 ~& I3 ]# C  t3 E( N. f




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