嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% S$ T3 z; _/ l$ U. Q4 Q# F; M$ R
Void UPP_TASK(Void)
2 P1 Z$ K4 p4 Q5 u{
- |0 ~4 D- v# s! U6 f* [* P: ?
3 L# p9 e; `7 i! g    int i,j,k,target_int_count=2;1 w! H3 y5 Z- K! g- q- q
    char ch[2];
1 E0 v4 l3 m$ x, i! Y6 [# Y* }/ M
( M) H6 }1 B8 n) l2 C/ I5 Y
: z4 x- w# A5 B. L: k& j$ [+ {* i% P0 Q4 {' n
    upp_interrupt_count  = 0;
# }4 u2 Z/ b+ T( |1 ]! M    upp_error_count = 0;
. d/ w4 R7 W! }+ l0 l$ \4 e
0 T/ @% B1 c9 G1 U, u; Q" \    UARTPuts("\tResetting uPP buffers...\r\n",-2);
: c6 P2 Q1 C$ o" x    // Initialize data buffers( |) a  r! n8 @# X
    for (i = 0; i < upp_frame_size; i++)* k/ b2 Z; q9 q$ W1 d; z
    {, R1 F7 R# i: Z! Q. f- s
       upp_buffer_b =i;
! E" j8 v+ m5 V/ B9 ^0 l3 k" U       upp_buffer_a = 0xDEAD;$ A1 A5 N9 M/ L: K% J
    }
4 o) P+ q* u6 n) \) }5 |$ A) {9 \7 w9 E  ]
    //for(i=0;i<1024;i++)$ g8 I- p8 B+ j) y! J
    //    temp=0;
: H2 X( o5 D% N7 A$ `
1 W7 y5 q2 h* U, Z. E, v0 N2 V7 H    //UPPReset();: F( M. u3 E1 i; ?3 U* m3 L1 ~! u
    /*启动UPP DMA传输*/# I: j' ~$ C# F2 G! s. B* @
    UARTPuts("upp_prog_dma_i\n",-2);/ f% D) f8 u5 a0 B1 Z: x( X# f# I
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;4 b. z( r6 f% P' ?/ A. _/ @3 l
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- w+ V) c/ F) ]0 Z% ?6 t    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);4 e0 \$ \4 n# `3 S$ g, y

( F5 t  \* O- i6 C9 i+ S0 Z    UARTPuts("upp_prog_dma_i\n",-2);
$ z7 F7 ~; p2 T; B7 U    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;" E. q, }2 e3 P2 ?, V9 q+ y$ e; R. Q
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* q0 Z5 J+ q3 B
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);% @. Q9 B  N/ p9 n$ d" }1 S. t7 p

  R* t' E! B) u+ F. }7 t1 ]0 L    /*等待UPP传输完毕*/
. g0 [, p$ x0 L$ W    //i=0;
! H0 A  _, a$ b+ j1 g/ m    //j=0;
2 t1 h% D( X% c0 ^% e3 W( _    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
1 c/ Y8 ~+ [1 R6 D    {
  v) B. e: ^1 l! ~' w; I  \        /*  测试UPP传输的同时操作普通DDR数据3 C3 \, z; h5 N1 W3 I: ?
        temp=i;
( r" [: s3 \6 ~0 r6 X  M9 Z        i++;
/ `1 b9 C2 {# A: d' [( s0 V        if(i==1024)' u4 Y% W( V! Q* [" _
        {' S6 T, Z& s9 y
            i=0;
' t2 B" X6 y2 g" {2 h            j++;, |7 Z" [- L& g( f) G2 K% ~
        }
: Y0 [  |' L. p8 J/ k4 ^. U4 e        */
& x0 u: y1 y# r# W; }! \6 q, D4 \; ~' s7 V2 i7 B1 n; d# G
       asm(" nop");+ l  A) q. [+ G3 f
0 h# c( c" w! U7 X
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);! P+ V. u& P' z& f& }* g6 ^
    }
3 b) B8 C, A. I1 u4 K
0 r) m% s8 k. R5 n% {    /*检查UPP传输的数据是否正确 (loopback modes only)*/
( \5 U3 s' ~# |2 `    //UARTprintf( "i=%d\n",i);
5 r) @% n! a  v% V    //UARTprintf( "j=%d\n",j);
& g* l5 w3 t) }+ o: a' D# U5 v/ b    UARTPuts("Data mismatch in buffers.\n",-2);/ p& P/ |/ Y7 B1 s' ?2 R3 ~; ~
    if (upp_interrupt_count == 2 && upp_error_count == 0)- ~. n8 Q. i. E/ Z2 O
    {
; y# ]5 Y: }% Y% B) m( o        for (i = 0; i<upp_frame_size; i++)
  a( U' N+ w5 i/ e5 D0 J7 N# k        {, I  D% @0 c" g+ l& x
            if (upp_buffer_a != upp_buffer_b)8 q$ ?9 O, D+ G, U! \" }
            {
/ P  k$ q7 o* t& J" O                upp_error_count++;
5 F# m- u( g- n            }& g3 l$ P! D$ A# {& p0 p  m
        }" {, K' ~$ [! j, l$ R, w
    }) _1 }# |9 n& \1 c, \4 U! q
5 c+ I% g& [  t) p, Z
    /* 报告通信结果*/
8 Q" ]( a( h5 Z2 K9 W6 f, P    if(upp_error_count != 0)
. i0 P0 S0 o3 v$ k4 o! g! {        UARTprintf( "upp_error_count=%d\n",upp_error_count);
( F2 m$ _: |) N    else
6 _  m) I8 j6 o6 k1 ?: Q        UARTPuts("uPP transfers complete!\n",-2);
: O5 B$ R3 ]! S( t3 {* u+ h2 m' ?! X3 m- M0 W! Q
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);! Q% F7 }  s/ R7 V
    UARTGets(ch,2);% n: m8 [( T- D
    UARTPuts("\n", -2);
- [. O. H$ k4 Q& _  T1 j+ E3 g, Z  P: V' @" R1 P. D
    if(ch[0] == 'y')
" B, b. \/ c# H7 }+ K' [    {
' U7 m9 p* H5 @6 O$ a) d        /*打印全部读到的数据*/
/ c4 l, r& R+ W( d) F) t5 f, J& |  R        for(i=0; i<upp_frame_size; )' ?- ~4 M  D- I( q
        {
2 F/ k; O1 E+ p& ?& E% M8 V; x            for(j=0; j<5; j++)
7 h+ N9 Z. ?; K/ \            {
' a, G4 l2 B& Z( e                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);8 R4 T1 ?5 X0 r/ w! `! O" h$ U5 m' W
                i++;% G3 m; a1 P# u2 r
                //if(i >= 4096)
& c# q6 s" G  n9 o8 _" g* X) q8 v8 j                //    break;
' p0 s4 j, e' y/ F/ Q) P5 X; Z6 {' i0 }2 C+ S; A" P
            }: ?" I& }: U- B3 ?
            UARTPuts("\n",-2);6 I, f0 l( r+ S5 J
        }
/ p! j+ ?( R+ @7 t0 B3 Q    }
8 I6 f; N9 X( N" F* o1 T$ \/ r4 `( H( I3 J2 r( m% `
}
/ D5 Y4 |  e6 U" d- I
# g" d# @/ F8 P, B  ?

9 p& c* I* r5 S0 N3 G1 l# n5 d
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。  q$ u6 Z) H$ a. Q2 ]+ o, ^

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。' Q+ ^% }) e1 d  Q





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