嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?+ a! n. a) Z# V% u4 |! n8 X
Void UPP_TASK(Void)) O8 ]4 c4 ~) L3 s
{
4 n* ^1 }7 p7 l- _6 J2 H% l5 W& `. }& I) d3 c
    int i,j,k,target_int_count=2;
6 v, {- g) s9 p( `: q* s    char ch[2];2 E7 E- @* B$ a2 I8 C
5 e2 X$ Z- h3 B0 u$ u$ u' h

7 S/ E: T/ K7 Q3 O, m8 d& x( w1 b+ o7 y) I: c
    upp_interrupt_count  = 0;
9 K( K: D5 [" U$ o0 _, p    upp_error_count = 0;+ S. e2 {5 r( x7 I- w- U1 b" ]
9 Q4 o5 a1 S, H- J9 w
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 r% c0 T2 U: N% L    // Initialize data buffers
. L4 g/ ^) a8 W: t: q5 r: z    for (i = 0; i < upp_frame_size; i++)& j7 }5 o- S0 a8 {$ l
    {% K' [  s1 u: n( e0 ^
       upp_buffer_b =i;9 i7 _* F, p- D4 v$ V
       upp_buffer_a = 0xDEAD;
; y5 O1 H- Y' j' P    }
4 {9 Z. h5 m" n
: ^" V$ p! N% M8 v3 r( u, g# P% o    //for(i=0;i<1024;i++)
; _1 @  \! O/ {) [9 M. R) R    //    temp=0;
3 `; Q) k; `- ?5 a, G+ s8 o& H8 Y5 ^3 Q' O9 q
    //UPPReset();
# ^) k1 n& M0 Z( [    /*启动UPP DMA传输*/
/ [: ~* Y% V, N3 p/ Q+ y# b    UARTPuts("upp_prog_dma_i\n",-2);
6 T  J' }& e, J0 w- Q  o5 H! n    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;. t# j1 h. H; V
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);4 A1 F! t- e% t! N
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( {' ?# J% P3 O* }
- ]8 ~4 z, f6 T    UARTPuts("upp_prog_dma_i\n",-2);
& N8 a+ p/ \0 A7 A1 P" _- T8 s    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ k% j7 a; U: O    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);/ f+ Z% E! K0 r& f2 ?0 U/ o
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);# Y$ [. q- L( R1 S% K! }
8 Z2 H$ i( v' m- \
    /*等待UPP传输完毕*/
; b& c9 E7 @% V( b5 K% A    //i=0;7 K1 V1 Y0 M$ Q! K4 t, \1 t7 x
    //j=0;
& C- ]- L$ r/ k' S  J    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
4 a8 `6 m! K9 ^  ^3 Q5 p7 V4 p    {! F5 C! r+ ~! a' C; A
        /*  测试UPP传输的同时操作普通DDR数据. d4 A( b+ L' R, W) a2 q% K+ j
        temp=i;( p5 e' ]" J. ~7 M2 r4 F) a/ U
        i++;( D8 x( C3 |7 x* g* _0 E4 y( N6 G
        if(i==1024)
: A5 N( o1 x3 Z' N7 ]        {
+ K6 C3 l+ H7 w' G- M            i=0;1 Y! M0 C( J' z9 m9 G3 n
            j++;1 [+ h4 K) x# Z- y
        }
, M: X! X$ \. P        */  s5 b: d0 G$ y2 H$ _* ?, n6 d; r- r

+ a% ]2 q; N# W5 f! d       asm(" nop");
# s3 A, i1 p3 J; P- |, R' k$ m6 }# m9 j
8 U# \; l% E  s9 ^2 n       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 s6 y/ s) N, b  S    }( T4 g' T1 A6 p# d7 K5 ?1 t8 z6 I

8 Z7 x0 C% S2 s" f) Q    /*检查UPP传输的数据是否正确 (loopback modes only)*/! I, }4 Z# s- [( [; ~
    //UARTprintf( "i=%d\n",i);
" j8 M7 I6 u, i! F. a) n$ z    //UARTprintf( "j=%d\n",j);3 c, U, |; r. H2 o
    UARTPuts("Data mismatch in buffers.\n",-2);/ c, y0 _( P$ @. z
    if (upp_interrupt_count == 2 && upp_error_count == 0)) e/ a- @3 _2 Z! N( v
    {! ^9 ^3 `" t# c( U! a6 Y  Q
        for (i = 0; i<upp_frame_size; i++)
: q) W8 o: f; u/ Q, D$ ~9 `; l        {
0 A* E, }& ]# C7 x            if (upp_buffer_a != upp_buffer_b)
5 I* a9 S0 P# D            {
& Z4 v% A. V6 b+ Q                upp_error_count++;/ s% j( b! p: i8 p! l; _: w" T
            }
) j2 x7 g( l/ O8 H8 W! w  i        }2 y& Z  E5 N# @- S" j
    }, z* R6 \- _" i4 r* ?

4 D! K* b2 v3 n+ _9 x; E    /* 报告通信结果*/
. x7 K) s1 J8 Y/ E0 ]. D- d- `; t    if(upp_error_count != 0)! \- E6 R: m8 m$ h
        UARTprintf( "upp_error_count=%d\n",upp_error_count);$ F  F; k. x6 b8 t. _" E
    else$ R: w8 x8 Q9 P+ g8 ]% i- X& @7 P
        UARTPuts("uPP transfers complete!\n",-2);
% K* U7 h6 f/ q: S; P( x( G
1 J1 F; X& f% K) l4 I9 }    UARTPuts("Do you want to print all the data?(y/n)   ",-2);* p! Y/ I. e3 V% }
    UARTGets(ch,2);
$ V$ N; X+ Z6 k. G" f' Q    UARTPuts("\n", -2);7 H" N# I- m3 k8 n* A

2 V1 m& V1 W; Z6 R    if(ch[0] == 'y')
/ T. L; i3 b6 o- T4 }% `    {
! v3 ^5 Y9 ?" J( H        /*打印全部读到的数据*/
6 q. {. T$ l( p; ?1 K5 e) d        for(i=0; i<upp_frame_size; )
  q+ q6 x, _# K6 R, a" J* S9 k        {5 b2 {# f/ r# O
            for(j=0; j<5; j++)
' d& f4 a9 l0 d7 t& g/ u6 L            {" o+ b9 e/ e5 n9 L& F
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
0 d5 Y3 k5 ?! [( E6 H                i++;
7 m- u7 D$ C7 Y+ h/ w- {                //if(i >= 4096)9 o* I4 F% Q1 J. W: {
                //    break;
5 ^. {% E$ r  ]' ^, `
& @0 E+ [7 D) X  p$ g            }( Q+ z  P5 O* N1 f* t
            UARTPuts("\n",-2);
2 P3 ]" l7 c  i" b7 D8 e' r. }  m        }! x) A, I5 [( N+ O; [/ Y
    }: g: s% p6 J& q7 |6 t: n) r, V" U
( e! z$ X9 S. Q! E- i+ o# T& E
}
2 Z$ W6 @. n- n! R

2 J7 u" n; p* C* b  O! k6 d, _+ G7 [

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。$ O0 V) p9 P6 ]& e: G

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。3 G  ?: w9 M8 G* e5 }. {3 }( n+ J





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