嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?/ g# K' X; q: D1 D0 f% q1 D. V2 V  M
Void UPP_TASK(Void)+ M  w9 d3 V+ p2 Z$ V: O
{
% m/ {0 r/ a& _: F! W' {( t, j( D% |1 W3 f1 P: T3 U
    int i,j,k,target_int_count=2;
# C7 J: Q. }+ s2 U5 ~2 V9 t1 T2 p! m8 I    char ch[2];
7 p! d( F1 W' i* n
) b+ L  h9 O0 L$ g& P) K" d
% @$ T  W3 O- I. ?, n! x4 k  h3 l, i9 F- G8 s1 a  q# I( ?
    upp_interrupt_count  = 0;
- C  d5 `6 x7 R5 O2 f    upp_error_count = 0;
6 n6 L: @$ W# q2 V$ v) t6 M( w5 `5 a
    UARTPuts("\tResetting uPP buffers...\r\n",-2);: M" I: M  j6 P6 s6 q- Q/ x
    // Initialize data buffers. V- v7 z4 V2 c- H0 t& s7 ^+ V7 D
    for (i = 0; i < upp_frame_size; i++)3 ]* e3 D1 K2 R; D3 Z7 k/ F
    {
- z/ _) i' U' r( z, V7 c& Z       upp_buffer_b =i;
' }: I% i/ I) v* J! r3 V9 M       upp_buffer_a = 0xDEAD;
7 x- E4 M# V4 e  s6 b5 J( H    }  r/ F& A* i0 A9 y3 i  T+ @$ a$ {
4 M7 P+ M2 c% |& r' {$ j1 v
    //for(i=0;i<1024;i++). a! E9 r! b- F0 m+ a" I8 e6 {
    //    temp=0;
) ]0 h, E4 ^* ?# b, Q* s% o4 M9 r9 a- f) v4 \
    //UPPReset();
% b3 c6 a" X# M. ~5 g; h9 F2 M    /*启动UPP DMA传输*/
* S! P9 u4 v0 ?    UARTPuts("upp_prog_dma_i\n",-2);+ R8 N9 Q4 w2 o& N$ F1 a! D# u
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 O+ T. x' M) S$ M% p0 I7 V    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);) Q6 t$ g  L7 d# [% S+ q$ P
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);1 z8 Z3 Y/ e  k4 y5 i

' C$ A& a3 T- q/ d! K    UARTPuts("upp_prog_dma_i\n",-2);- C8 _% h! f7 o2 Q  q6 V1 \$ U
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;& B- d, b8 ^# D: J2 q: x) }
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 J4 @  x* R4 [6 G4 X( `6 X! ]    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, w) g0 N$ t  e' k1 A7 u- s: W. c/ e: b4 ^3 T  l( O& A" B
    /*等待UPP传输完毕*/5 U- r! a, Z7 z
    //i=0;
  a1 @- b/ Z& s) c, m% R& ~/ d8 N- t$ \    //j=0;' Z/ U* t1 y& f( b
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)8 U, V" P# W# t
    {
/ d  N% V4 v' `% p9 r        /*  测试UPP传输的同时操作普通DDR数据
! @2 u. V; m/ ?        temp=i;5 n" Q" K0 ^3 D+ r& u; l
        i++;
7 d; Q5 c4 g7 J( n8 |        if(i==1024)
) ?* d( f' J1 Q& r" ?1 }8 e5 a        {" O# i! C9 g3 L0 r1 R) H
            i=0;. K6 X. U& `# Z( |; J
            j++;
3 m5 \! P7 `4 }        }+ ?! g5 b9 v; l6 e. _
        */& B- L, e+ X* L- N4 s

; k9 _" a% S% x% k8 R2 J       asm(" nop");
& z3 u6 S, p/ f1 E! [5 z
; C1 v. \* C) j5 ]" P+ k       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! W% C. K7 o$ m7 J9 B7 k    }
" {$ \, F: C& z5 k! l4 v6 m! p* P& O- \$ e1 y$ p/ L
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
+ J, m. V3 J, Y3 M5 @2 r    //UARTprintf( "i=%d\n",i);
$ s4 g0 v& F9 |% f) u. G4 A    //UARTprintf( "j=%d\n",j);8 g$ ~. E3 ?4 Z# n
    UARTPuts("Data mismatch in buffers.\n",-2);
: b9 _7 H; [2 s9 {- K; M    if (upp_interrupt_count == 2 && upp_error_count == 0)* y2 o, t3 U% W1 ]$ w
    {
  K) m8 e  ]* H7 f! a        for (i = 0; i<upp_frame_size; i++)
. Z5 @1 H' K5 P( N; r        {
2 ^& g  z4 H  \' T* O            if (upp_buffer_a != upp_buffer_b)
' @" m, _, y, O; ?8 [. H: v3 h            {
, q2 o) Q0 ~! q2 P( D9 O                upp_error_count++;
/ P! k" c- V9 F5 _, {            }
9 P4 Y# M$ t4 I- d; t        }
, R5 b7 |  L3 i$ t) J4 K# ?0 F    }$ q5 W' P4 c9 @, g  R* Z
" H9 q1 B$ f+ q0 ~
    /* 报告通信结果*/
0 n2 j, n% K' T5 g    if(upp_error_count != 0)/ w- Q& {; y) d% Z7 C: V. N, ]
        UARTprintf( "upp_error_count=%d\n",upp_error_count);1 |2 c3 B8 w. w
    else
3 s/ q4 W/ V( C8 k        UARTPuts("uPP transfers complete!\n",-2);
8 ~4 g( `; l9 e2 F% b" @* L0 ]' `; b0 B3 `, V) K& [; P$ B( ]( S
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);4 {" `* W; o- q
    UARTGets(ch,2);6 N$ _/ ?" v+ V4 {' a5 s
    UARTPuts("\n", -2);9 k1 o0 X: S! U# H, ]! w& T  k1 ^9 ^
. t7 s! d2 s* D; T
    if(ch[0] == 'y')/ S; \  H: S2 ^% M* p) V
    {
7 g( D+ ~& d+ V9 e" n        /*打印全部读到的数据*/! z& K  I1 S( O; i  b& [* D' r
        for(i=0; i<upp_frame_size; )% c. H+ ~6 W7 D1 s& P
        {8 a. O1 ^! n; v3 Y4 T
            for(j=0; j<5; j++)
/ E1 o! P$ R+ i# @3 D            {
* M3 A. v* f; j! i# s( p7 f$ @' d                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
# M4 K! l* L+ T0 L6 J& U# S% ~+ }                i++;2 v& ~1 w; Q' s/ U
                //if(i >= 4096)
3 D" L9 f' y4 N% [: X                //    break;
4 o5 X( c% C0 U2 K) X, n% d" h8 J6 f
            }
4 |6 h  A' j! z" ?$ v# m            UARTPuts("\n",-2);, n( k; o) T- ]" y* y5 x7 }
        }
( m7 }4 f1 U$ l- {; P, I    }1 {& A$ y  X, A% e/ {
/ X* o1 t1 }6 Q: M
}
( d" o% R; d) t* O4 l: S
! U; p# l5 H, U

" b8 A3 Z7 ~7 d- p2 C' R
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
- H2 o* y6 B# y
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。" H' H* T$ B. ?' ]* K! o





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