嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?5 |# L6 s3 `  m
Void UPP_TASK(Void)  _- g: D/ ?, l* ]$ s& |
{
4 Y; Z: A, L3 t' k( S# }9 ~! O
  o+ H8 S* [( w" e, d0 y% \+ l1 K& ~    int i,j,k,target_int_count=2;
* S" F9 I! |. r8 I    char ch[2];
% \* V6 x5 I. h/ |* P+ b  j
% I. O' \, o' U
# _7 N* T* r2 _/ h5 e, O: I8 T3 y, g4 Q% N
    upp_interrupt_count  = 0;
% n8 T8 G4 g, a; D    upp_error_count = 0;
- x. [5 {. C' r8 l. C2 k4 b: J7 Z5 V( L+ y" E2 r. s$ h+ y1 K6 I7 a
    UARTPuts("\tResetting uPP buffers...\r\n",-2);% e5 W# }5 l( M
    // Initialize data buffers) H0 v! U" Q6 l
    for (i = 0; i < upp_frame_size; i++)0 ^4 J' o4 I0 e) R% M: a9 y5 r
    {
! F6 @3 J! L/ r# [' E       upp_buffer_b =i;
0 L3 x* r: e) k2 R3 y( @       upp_buffer_a = 0xDEAD;6 N- H1 l1 `3 G- q
    }( T6 i' N9 B- o

4 i9 x8 q8 a9 h    //for(i=0;i<1024;i++)
- e" _0 p5 U* E9 ]" M2 `    //    temp=0;1 j. A' J5 e+ X4 e0 g+ k: z8 U

" ~, _. [1 y% j    //UPPReset();
$ `5 |) E1 |" r5 p- W4 K    /*启动UPP DMA传输*/1 }: {5 ^/ K0 \9 d5 U
    UARTPuts("upp_prog_dma_i\n",-2);
- q0 q4 B3 D% O( q6 Z" F6 p. v# t    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;# D: ?! O4 L; ~, _2 l* x; s
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! M6 Z  ?3 A+ e+ J4 G/ k    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% `% h1 \7 @  l1 f. R" z. n( D( p# f0 J
    UARTPuts("upp_prog_dma_i\n",-2);( q1 T, ]' O# j& ~5 F$ N3 R
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! R, `" j" R) N' \6 `    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 K! a5 J0 S. p! b0 r( J8 F: A    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, P  t. Q6 N) }* ^3 H
6 S5 [" Y; G, r; J    /*等待UPP传输完毕*/9 _9 W, N' g( K
    //i=0;
# S: p3 z' e$ C) q2 T9 _) j    //j=0;
8 x- [2 @1 L) a( Z8 c    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ u/ I0 `! F& a) m' c* v    {7 X% n7 D7 n+ S* F8 |/ B( l
        /*  测试UPP传输的同时操作普通DDR数据
" M# v7 l2 e- |2 ~        temp=i;% E' n* h: B  k4 J* t/ O
        i++;; _6 X  L9 k  P  B
        if(i==1024)
+ b* ~9 F" Y3 o5 w; W& S2 K        {
. p. {* G  p/ w/ V, L) q            i=0;
- C- A9 v" K+ J: y8 i            j++;
  r2 U- P: \7 d$ [$ g. w        }
0 h  t* r! T7 A+ q" k) @" M' G        */
, a2 e  _: U9 l$ @9 c/ b4 p; H  l) E/ k- L/ z
       asm(" nop");& a) S/ H2 r# N7 U- i

* z# p! L  q6 N- j+ V) t0 s1 V       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);  G* x5 D3 f' k! a
    }
+ y! T  T( Y$ @
& u" u. f6 S4 Q# E    /*检查UPP传输的数据是否正确 (loopback modes only)*/# c/ _* Q8 j, ]
    //UARTprintf( "i=%d\n",i);$ T7 F# G& e3 K3 K& s5 W% c
    //UARTprintf( "j=%d\n",j);
3 K% K* p2 ^8 @    UARTPuts("Data mismatch in buffers.\n",-2);6 I; d& k3 ?  o9 ?
    if (upp_interrupt_count == 2 && upp_error_count == 0)* h" v; U! k/ L# w9 w
    {
7 B  h6 ]% u( R% C        for (i = 0; i<upp_frame_size; i++)
' {: T: `: u( L. J        {
" i; b* k+ D( S/ m9 D' [            if (upp_buffer_a != upp_buffer_b)
9 z' h( s+ \# ~            {
' U8 P* l% k) e  l, N! G; T7 ^* ?& Z                upp_error_count++;( W& R; U, ~+ z9 |' @; e
            }* ?7 m( X" Y8 s- I
        }
1 o  o' y' r) L  G4 J, e    }6 O: u' Y% P: U. O$ }; N3 L' X2 a

9 Q. D5 H5 u3 _& v( E    /* 报告通信结果*/
5 y7 e& t( L( N: ]( a+ s    if(upp_error_count != 0); g6 X( @% ^2 U) M' h
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
, v+ ^# B0 Z( r    else) F- n) E9 S  U' x1 |
        UARTPuts("uPP transfers complete!\n",-2);+ c- q% F$ d7 c6 E
7 `2 Q' r5 f/ y; v1 _& Y
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);) v& @# U5 @7 _& u
    UARTGets(ch,2);
1 [# h( |' w5 h& j: v4 P    UARTPuts("\n", -2);
/ W* H; Y6 e5 K: x; F8 N
& g- i3 G/ N% g5 J8 P" K  u& O    if(ch[0] == 'y')
' J  d! U" S$ N; [) L* f    {
" k* v1 T; w3 b& H1 E        /*打印全部读到的数据*/
$ ?& c1 y6 N* F0 D9 ?) ^        for(i=0; i<upp_frame_size; )
+ j% _" |- g9 E4 C        {# a9 T% A8 p( y) p7 \% p( i; H
            for(j=0; j<5; j++)) E6 e0 p5 {* @4 x6 ~
            {
( ]+ u4 l" H9 J( m# p/ D$ l$ m                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);2 Y& q3 [. r6 i
                i++;
/ ~& m8 ~9 [& v# _! i7 t1 `                //if(i >= 4096)0 S% i* X- d# }
                //    break;; O$ d) O  k5 w' S# R
/ Q: k9 J7 r; O; v3 g5 L
            }
' T3 `/ I# V9 Y            UARTPuts("\n",-2);
9 L( R1 n% Q/ {8 }7 S        }3 k( B  {1 c; `
    }
2 e& W# V( I% E* c- x2 D% v- ^2 ~3 l. t
}

3 ]+ |; n% s: [( b$ g" F
" e) p- H1 f, [# m
$ F* ^( n3 S0 ]: |; A. N5 Z4 U

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。5 S# ~7 C+ o! L, h& v% \% t

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。" p1 o4 y: u) i% s





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