嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: j9 f5 V; O1 q6 c& o- m
Void UPP_TASK(Void)
& h) n+ v, e9 n8 W" Y# \0 V. ]. s{
7 ~- [5 X, z3 ]* p& u! _
) X2 X; H/ _2 Y- |# \- ]! U( V( h    int i,j,k,target_int_count=2;
3 k4 j* }6 R$ L: ^; M; k* b    char ch[2];# B( l9 l8 }: c* Y. _( `  @: H
$ |" e* o% S0 A3 l7 Z0 P
8 @0 l+ F0 C2 Z1 V( [
; }5 r3 J, W# _3 r4 T) a5 D% H
    upp_interrupt_count  = 0;
7 u' d, T% s8 z2 O8 D" [9 X" o4 b    upp_error_count = 0;
) g( H1 W# S+ V" _% m0 V3 n. d, V' k% i
    UARTPuts("\tResetting uPP buffers...\r\n",-2);, b* \8 J/ \& m
    // Initialize data buffers3 M, {4 T' `7 ]4 {* D- d" {" x
    for (i = 0; i < upp_frame_size; i++)
& U" w" b1 z& L    {
1 @' i% x( A0 R1 f' Z: y       upp_buffer_b =i;
; v3 C2 M* C' N7 [       upp_buffer_a = 0xDEAD;9 A1 ]5 u+ R3 L* K; Z
    }
! q2 V3 P9 m2 [
# e% t: f" b; n0 L5 ~) C  N9 I    //for(i=0;i<1024;i++)0 n8 v. X  @& E( t" O6 r
    //    temp=0;# |% F3 h$ O& E" M; D; f

( W% ^, x1 K# B) C* D+ z+ d/ J/ ?    //UPPReset();) _  _$ A, g' E. B1 r* g
    /*启动UPP DMA传输*/
4 f1 j3 Q) m# }" T$ D, C    UARTPuts("upp_prog_dma_i\n",-2);
% D+ c; A& @2 ?4 i    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
/ w9 Q* [3 c6 x. j8 S8 M6 {    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);5 E1 D+ D" ~9 O# e
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);9 q  z2 r# P0 b: X: b9 f7 b

: @$ a5 g0 }( a, X5 k) y1 \, x    UARTPuts("upp_prog_dma_i\n",-2);
" k" @0 t) Z+ w) D    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; z- q! ?- |- s" A  F  a/ u( H8 ]    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);5 C# k& H( |; j1 }/ k2 X
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) _/ M9 r1 t3 Z) d+ U
" _* X* G8 J' I; ?& b: z# ^3 A' O    /*等待UPP传输完毕*/
$ Y4 [: w& B4 G0 Z# T/ r6 U" O    //i=0;0 ~& m" c9 H1 ?. k2 m
    //j=0;
  ]" _* Y% D, _, R' S" O    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! S9 {( {4 g7 O+ G2 B    {# {! f# t( V9 E
        /*  测试UPP传输的同时操作普通DDR数据8 ~5 `4 t, D5 q; G' @
        temp=i;
1 \0 ^6 Q2 B# z* p) P        i++;
2 n( r+ Y6 Y2 q. l        if(i==1024)3 d/ h/ w' J7 J$ ~2 [! O
        {9 l$ F4 @$ B7 g
            i=0;
9 k: S& B. j# a& D0 V  R            j++;" e1 _4 O: X$ U3 h0 l, s; s1 n
        }; E8 w% H' C& J7 B* U
        */
- l  l5 V+ s& f) [, x$ d6 v0 J8 \% ?" `/ ?+ N% |! Y0 V
       asm(" nop");
& u' L% D1 P1 [9 g3 H
& O. u" T) T, c$ `       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);' `( I, u$ r0 p% x4 `8 p
    }2 n; Q) i0 ^4 u* D# E
  E& m9 v$ H4 k( f2 P7 u
    /*检查UPP传输的数据是否正确 (loopback modes only)*/; k& P# g' j* t- Y' J3 z
    //UARTprintf( "i=%d\n",i);
2 v+ Q' [9 e, v. O3 e8 D4 l' r    //UARTprintf( "j=%d\n",j);
/ Q+ a# m( l4 ?" F) v    UARTPuts("Data mismatch in buffers.\n",-2);
" K0 t! `# k7 N    if (upp_interrupt_count == 2 && upp_error_count == 0)
3 a6 g# v  N- b7 t0 J    {
+ d4 Q" n: t* S7 z        for (i = 0; i<upp_frame_size; i++): L  k7 d% p# R# c; D: `
        {" i. b: z( h( ~8 {
            if (upp_buffer_a != upp_buffer_b): W) c( z/ Z6 T+ T. k( i
            {% D5 v* i/ d5 ~5 p5 N- L( l0 v$ y
                upp_error_count++;
/ X3 L% }* ?7 B6 H" ?5 r+ v* X            }
9 R0 e$ ?, \4 C9 z3 _        }2 n( q7 m' v. I2 q3 D
    }, J$ l& G4 a, }

: C* K$ n6 f$ v, k2 G6 J2 h    /* 报告通信结果*/
: r" e. n! ?% O3 \. G0 V6 n9 ^0 E    if(upp_error_count != 0)
: s# L0 Z, x6 ~" R# `        UARTprintf( "upp_error_count=%d\n",upp_error_count);
& f8 f1 i9 M8 R2 D! N    else8 v2 q/ x; C1 h* v
        UARTPuts("uPP transfers complete!\n",-2);
4 u! t8 G2 j: I2 b( X( N5 n
; c7 d) O7 T+ T1 i  f7 U" q' t% G    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
8 v; x( B" g* n2 T  e# ]    UARTGets(ch,2);& L' @- B# _3 ]
    UARTPuts("\n", -2);" s4 Y- U/ k, H

1 p/ D# y' }, x- d: t( F# a    if(ch[0] == 'y'); {( ^6 \0 D* D! f( p# U3 N  d
    {+ x, n7 L" v) Y" E4 M
        /*打印全部读到的数据*/
& q, e( H# {; {! F: m  O: D        for(i=0; i<upp_frame_size; ). y* a$ I; X' X9 s) l- g) ]# m
        {7 c1 U( V( h1 J% w7 C1 K, w" Y
            for(j=0; j<5; j++)9 {, U8 ~! c* K
            {
0 k" b& t! ]5 m                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
3 z, e: d+ `1 ]                i++;
4 B- Y- d( I3 Z                //if(i >= 4096)/ y' c& _# @; u9 H# w/ g5 ?
                //    break;! v, y8 p" }/ ]/ {2 T2 t

( D8 [1 Z% B! K9 [) `& L# b            }5 U+ L, e3 a7 ?7 ~
            UARTPuts("\n",-2);
$ l! b* ?( h1 t7 d  T" L5 I        }
; _! {9 o9 c! s% Q4 S    }3 k; ?. d" r( X7 E5 t) \# @
6 A# q; ], h1 H& `5 z% ?
}
' a" `. L; z* g

0 R5 M' g9 Z! q& ]5 n  O9 [$ R  n9 J( r- t) K- q& w4 n/ M

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。: u  [5 q5 Z& |5 Z* V) E

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。' O, i% A% k& Q9 Y. Z  j





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