嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?  \" Z2 s" n* u9 u; Y
Void UPP_TASK(Void)& s6 L8 [7 ]; \; a
{+ m0 V. n2 s, k1 m/ D( k2 v
9 u% D5 L  F. T; c( g# b* f
    int i,j,k,target_int_count=2;
5 A: x3 o& |7 ^7 d6 I- y! d. U    char ch[2];
+ g1 }! N% ^: K
4 X* v( A# A& c& N- t1 z0 k9 P( Q4 @( ~( N$ ~" o( h8 d3 l  B

8 P" T( f% B& Q* D) H    upp_interrupt_count  = 0;) [# z: L. [8 n3 B
    upp_error_count = 0;
4 F* U: K$ T, L) F3 ]( t  l: d) V( G$ V1 T! ]$ T
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
: C3 B$ J$ s* v  z$ h    // Initialize data buffers
# z" L% S) ^/ e0 L' Z9 Y6 y* P+ d    for (i = 0; i < upp_frame_size; i++)6 F( Q4 s8 n! i2 o; `( A* I) l
    {
' U0 v$ b: J" e7 P& j0 b  D- e       upp_buffer_b =i;
& t! K; q" R" @* V- `4 S6 ]: j4 F6 H       upp_buffer_a = 0xDEAD;
( M3 ?) o2 I# l# ], \    }
5 n8 |# K+ {; s0 B( }' i; J9 G9 n% N8 F& y
    //for(i=0;i<1024;i++)
" a0 E1 k2 U! e- z% O    //    temp=0;
( `/ u2 \; h( t$ s# o8 j/ h2 n5 R' C+ o& o2 C" ]$ f- r
    //UPPReset();
* I* r3 B4 Q0 k1 T8 {    /*启动UPP DMA传输*/
1 p9 M4 n! N, [! S    UARTPuts("upp_prog_dma_i\n",-2);
! z; ~9 V' m7 q; \+ F6 u7 R    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;% n' t' r* l$ V0 U
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 e1 Y  ~& }  ~. `    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);8 R8 w( I, y- t* g3 X: J
: e3 N( n3 H: b" x3 E
    UARTPuts("upp_prog_dma_i\n",-2);+ q+ N4 s; z& p5 Z1 K! O
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;3 t, n0 s) d& q) T7 q0 I
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);3 R3 b! O! q. g% F8 M% H
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 a, T  f( X8 @' z- K9 _
/ N! n! j( {- A' N6 T* J    /*等待UPP传输完毕*/5 L. Y8 [, m# l! f% Y7 d5 [! M# X; A: \
    //i=0;  R4 x. k# t- t9 v  h$ V2 Z/ P
    //j=0;
. v) O8 j' H) ]8 |  }    while (upp_interrupt_count < target_int_count && upp_error_count == 0)6 _! z; b! v" ]" y) w
    {
- ~( |% {4 k( ^1 z% s( J# T3 G4 L& b        /*  测试UPP传输的同时操作普通DDR数据
$ n3 O. u( w. x4 o& z9 h' {        temp=i;% D9 X! [5 H  V$ @+ k
        i++;* p! O* m; g' ^3 Q' J. \& e+ f2 R# o9 t
        if(i==1024)7 ?# D4 r# f# t
        {, s2 E7 a2 U9 r8 @, n; V
            i=0;# r! i+ \( J8 m# J" O
            j++;) Q1 R4 X4 {) u( E/ r
        }6 A: w! G& }! x; M; _, n: N$ t7 H
        */& u: }- e0 R+ _1 Q: o6 y1 g1 U

# G; s) p6 i, M2 K  a  e       asm(" nop");
3 q& R/ B% {0 f+ a8 ]; n5 w5 W- o- Q9 T; `/ `, i6 A
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
; S1 K( R* g4 l" [! h" G( c" u! Z    }
  r' b/ {# k9 q7 D9 O! f! L, A, W# c. `0 B$ c  T' `2 O) ~* B
    /*检查UPP传输的数据是否正确 (loopback modes only)*/6 R! S  b/ G" a/ z2 u
    //UARTprintf( "i=%d\n",i);- W9 C- Q! d, I% e' u
    //UARTprintf( "j=%d\n",j);
; m4 `2 U* ?+ ]& S4 {    UARTPuts("Data mismatch in buffers.\n",-2);& A5 |, \+ d4 r0 O7 r
    if (upp_interrupt_count == 2 && upp_error_count == 0)
& H& N% q' ?1 E6 b0 h    {" E: o3 |7 g1 a$ ^0 x9 ?
        for (i = 0; i<upp_frame_size; i++)
2 n% Y4 Z* M' c) e, J% Q        {: p# d* t8 X, \7 P* j8 W
            if (upp_buffer_a != upp_buffer_b)
( J/ v# P% x' R% ~2 y3 [# u. W            {
6 g0 o4 j5 N3 t; d5 e4 K. L5 U$ u' Z                upp_error_count++;# B( c9 P5 }! z
            }
7 t- s8 @7 A- s( z3 u$ H$ n2 j        }
" M5 K: d! d% H2 [; O5 ~    }
& a6 U; y) w6 r( g" m0 u' J. |5 g
    /* 报告通信结果*/: {2 Q% ]; j; x
    if(upp_error_count != 0)
& a& @( E9 }7 S6 `' I  F        UARTprintf( "upp_error_count=%d\n",upp_error_count);* I; }% `$ D* Q
    else; {; Y3 l- w! @& L5 A! z3 o' D
        UARTPuts("uPP transfers complete!\n",-2);; ]' i/ @7 E6 N( c
2 z! Z0 M7 c5 b+ r- `2 d# b8 k6 A  n
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);4 J( N3 S2 p2 ]: r
    UARTGets(ch,2);2 R& U- t: e& Y& t& m' K9 c
    UARTPuts("\n", -2);* l2 @2 ^6 W7 D  ~9 l# n! n
& n( h* P" c2 I. f* P: G7 t& z
    if(ch[0] == 'y')
; J( B* e6 U, u2 {    {. z* {+ s: g% j+ p; ^
        /*打印全部读到的数据*/# r4 q& j+ m% n9 X* C
        for(i=0; i<upp_frame_size; )9 a  j) u* D7 ~4 e% f- [9 B
        {
' W9 S( ?; L+ o            for(j=0; j<5; j++)
3 Z. T0 B, Q7 l+ e0 a            {+ a* ^6 T6 I1 Y! a
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
; E$ R+ s8 S/ o+ Q! }& |) R' v7 }                i++;
- M' v) ?/ s- F! h5 \                //if(i >= 4096)
7 ^% r2 q4 ]- J6 S# v4 S! o  r6 w                //    break;
* k& V! v" F4 K! {/ l* c% x9 V. J& B- {& k  w, i. R! y: v
            }
" R3 }) U' x* Y$ K            UARTPuts("\n",-2);: D' v: a: R& |$ \9 _# i
        }
9 j% T7 n4 R. w% P( m1 n4 r    }) Y! E4 C' s4 z) T$ @
) j, e0 \, R8 Y- N
}
! `% o2 t+ Z( ~5 k/ R/ J3 u5 A

$ X* X: U: Q+ h9 I6 R) }9 I) c5 w6 f9 \

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( ?  j: U9 M9 r5 s7 W* c
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
# e/ |3 [# a/ k& q




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