嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?' t2 Z& j  V, Q, D- b& d
Void UPP_TASK(Void)
4 e" n5 C# c" r3 X3 f{
: E* p) X4 G9 W- {: }
2 r) C8 H( A8 r) b    int i,j,k,target_int_count=2;# k, y( s$ M) z9 O
    char ch[2];6 Z5 i5 U" s0 k1 b
% J" M, A3 O% l  U& w9 t

! o. n' j1 b& I2 R5 s/ y0 r
. g& p2 [9 [( x# p2 e) E    upp_interrupt_count  = 0;: z7 j% E7 L7 r# G. P
    upp_error_count = 0;
. |6 _) t2 @" M! V. T: c
; @- U; f* ?7 b' O1 b& a$ B6 s    UARTPuts("\tResetting uPP buffers...\r\n",-2);
) ]2 F+ m3 x6 t8 P% K1 b! ?    // Initialize data buffers
- \* m) M7 d/ x, }    for (i = 0; i < upp_frame_size; i++)
5 I  w0 G  t9 B! w# N    {
/ H/ ]. ?5 i/ A; Q4 }       upp_buffer_b =i;
" Z6 p# T" M% v. H. @3 J% d       upp_buffer_a = 0xDEAD;
# m+ ?( K# L6 |' f/ W7 E    }" ~/ c% q8 k6 J- }' `7 H. }

3 s7 _+ D0 D+ w) u    //for(i=0;i<1024;i++)
( T. h2 E0 i$ G9 h; o    //    temp=0;1 Z, j( |1 _3 c6 l* Z
# n$ d7 A+ X% n9 Q
    //UPPReset();# a. C, ~  c: g$ i  Z3 F3 r# S# b9 a
    /*启动UPP DMA传输*/
  K. v% }; h' t+ [4 G. N4 c    UARTPuts("upp_prog_dma_i\n",-2);
9 D! O2 _7 p" n, b    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;# F9 e* m3 o0 T$ W0 y5 J: j: w! _
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);" \: W. R3 b2 K* M
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);( }! m! \7 r/ I4 Z# T) L* p7 j
* ~6 z% I# \2 v% B/ b; D
    UARTPuts("upp_prog_dma_i\n",-2);
  o) U& p+ V  D+ }% h) B    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 [5 p( m# @; i  T- @8 c4 R$ E    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 P& G& Y" R+ K    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);2 [; Q9 }5 Y& B( M: f
1 M* ~  ]* Y$ q, y4 @
    /*等待UPP传输完毕*/: z3 [+ F& x( J# S1 {- T6 w
    //i=0;
  K2 t) `! x( `8 N- Q& V- |; l    //j=0;5 w" B: s1 C, F" _$ T) ], g
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
; s, L8 W+ [7 u$ B# p2 ~7 T" c    {
; t  R6 `% S2 q" C  S- ]' `& C        /*  测试UPP传输的同时操作普通DDR数据# b% n; u- u$ S1 a$ F5 u. O  F
        temp=i;& q5 X5 n7 i4 k8 b# X, ?
        i++;5 W4 p1 F' H3 [) P
        if(i==1024)) s! M8 q$ M1 F& ^
        {  \8 R: u8 s6 m4 m
            i=0;4 l4 y$ {% j. m
            j++;
* @) _3 S' B. M2 u        }
3 o" s# t+ s2 B& N$ S& g% R        */
& _% {, a4 W7 s: v2 _; O  W+ u1 D9 D( h- g
       asm(" nop");
$ R: I! [" w! n' k* L9 r2 u
* e1 n4 @& L: J! K, Q( w' \       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);8 I7 d- y7 R5 V' d, ?/ D5 [
    }/ L. m4 q$ Z4 [/ w

1 @6 Y8 L& [# R8 z+ U; E    /*检查UPP传输的数据是否正确 (loopback modes only)*/# K7 L( C8 J$ e& n! a% A1 t; R
    //UARTprintf( "i=%d\n",i);1 R" x$ s0 `3 P- x% ]. B# _" N
    //UARTprintf( "j=%d\n",j);9 J9 g$ L5 G6 p+ L5 b
    UARTPuts("Data mismatch in buffers.\n",-2);; U5 B: G' X$ l7 L) Z$ m
    if (upp_interrupt_count == 2 && upp_error_count == 0)
; G6 L1 n, J! f$ c4 E    {
0 H9 k* ]6 }" ~: x2 Z7 T        for (i = 0; i<upp_frame_size; i++)
0 \; M3 C) V5 B$ ~* j$ e        {4 `; L4 z" P6 ?0 u' V
            if (upp_buffer_a != upp_buffer_b)0 T: H) I. D) n3 u. r4 D
            {, C& G; ^: {1 z( W& H( N
                upp_error_count++;
. \: i+ H6 T" }+ F, k) Q2 a+ e            }. |/ M& a+ n# K; l$ f
        }
% H- H) q8 p* B* \    }2 R3 ~+ Q* o$ ~0 i; k+ L

0 ^1 d$ R* t1 J3 y9 Q0 ~: S    /* 报告通信结果*/
2 S9 y: p6 L% D    if(upp_error_count != 0)$ n" l1 i" G0 v
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 E& \2 K* S) B# U( J    else
) ?6 m$ B3 |; m4 L- `7 c% {+ Z        UARTPuts("uPP transfers complete!\n",-2);, k' v/ W  b# w8 {
: L1 U2 ]8 _. W
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
: L/ d: N! J- J    UARTGets(ch,2);
2 t7 l0 ]9 d; _" Y7 U* {* N3 D    UARTPuts("\n", -2);, ?- }, z& e$ I. b
2 o( J" f, g2 K- g
    if(ch[0] == 'y')1 G7 a' D" [- g: m) {, B7 }& {
    {  z4 a* b" A  `( T( o
        /*打印全部读到的数据*/
" }3 K+ x- g. y0 I        for(i=0; i<upp_frame_size; )
- h* O9 v. ~7 @: c9 t        {
8 o0 ^$ x: R* s3 W3 h( ~* V  _            for(j=0; j<5; j++)# W( H; K2 r3 V6 W! d
            {* v( E9 _% j- Z/ p+ U( l7 A+ S
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
# E- t$ Q8 {" _( x$ c& f/ w                i++;1 V% l& w) Y5 z' I- ]7 p
                //if(i >= 4096), `$ m, {! D3 f) l+ l8 p' Y
                //    break;. ^9 F4 \, @- |8 F2 I' T( I

6 n% w6 }6 }) Q1 p1 x! ?            }; x: o* }. O7 V9 g* P& D" E- v
            UARTPuts("\n",-2);5 ?- J* ~* k9 |4 R0 I
        }
0 `+ R$ |' y" G3 W2 l8 q    }0 L( T- g, z0 \/ x  T9 p4 q

: {# G! u: W% ?2 O}

4 B8 j% b1 F1 [" `7 l

+ v9 s; c4 D% r7 @6 \
- {# E% |( X3 f7 k- r, Q
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% O- F: U( e, U
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。, R0 e. m0 D* O3 G" S





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