嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: q8 T4 V& ~; J6 X, i, T0 Y
Void UPP_TASK(Void)# n4 O% |* ~; o9 }1 S+ l: \! O; I
{
1 F) L7 R$ R3 p4 X! S& }9 r! b: {: R  z: S! ^' v
    int i,j,k,target_int_count=2;
( ?" s# O: B( `2 c9 C" D) B( p2 J    char ch[2];6 a* [1 `/ L  G5 k+ D! d
" |3 k, t9 D' G7 m4 A- D5 l

/ J# r$ y5 m: O: w4 f
9 A5 {7 m3 F) a4 F2 K& D    upp_interrupt_count  = 0;: w* V# I1 r2 }) j
    upp_error_count = 0;. K' ~/ J) X0 a

6 R8 B( R1 f- z) o5 D    UARTPuts("\tResetting uPP buffers...\r\n",-2);
/ `. Q1 L7 H) N& S    // Initialize data buffers
# }0 ^# j! {6 T4 v1 h- ~    for (i = 0; i < upp_frame_size; i++)
# h5 n: d7 o% ]$ W3 E    {
: [. u& A1 I) ^       upp_buffer_b =i;5 m# Z; \, i7 x! `8 b7 N  V
       upp_buffer_a = 0xDEAD;
7 \/ y6 J. a* Z    }
* i9 ~- [+ a9 W2 l" ^3 Y3 a4 b) c) x3 T& n3 _( U
    //for(i=0;i<1024;i++)
! Y. z1 ]9 K! Z4 t* N' v    //    temp=0;
8 v" y- f% N( x0 i' C& A$ h. t( q  M+ g4 e  K) p2 Y* G
    //UPPReset();
) N5 y' s" K" p* k$ p* e6 S+ q' h( t    /*启动UPP DMA传输*/; [$ }3 d8 m/ H/ I+ K9 k7 q
    UARTPuts("upp_prog_dma_i\n",-2);
' y" I+ ?# O2 d: ~  ]* W    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
2 B$ b! p- w/ ^" K3 E0 u    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; f; @. q, `' }' T    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);, S  ^1 x2 m. f8 K! [7 H
; w: o  G* s* v& E
    UARTPuts("upp_prog_dma_i\n",-2);
' W! f5 f$ U9 y) b0 o1 n* M    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;- j- s  y" l3 |# x( Y7 a
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 X1 T/ ^6 k1 A# {9 k4 N' F7 l    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: ~/ k3 W, G$ q9 Q" ?" Y) v2 N" |" j; S
    /*等待UPP传输完毕*/% s+ @; @4 Y: k" p! _' P8 }
    //i=0;9 Q% t9 w) S& t8 @0 C
    //j=0;
; }( Q4 [% M0 P' T9 _: t5 K6 l% t8 Z    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
+ J1 O/ E2 a3 L% ~) V; r, \    {9 R; K# `2 n( M& d2 E0 g
        /*  测试UPP传输的同时操作普通DDR数据+ a( ?# q" o4 p2 N
        temp=i;
- E1 |1 q- u4 e) o( B5 W- i: ^        i++;
) o# o' ]! E/ W: c8 r" _1 V$ M( N* ?        if(i==1024)
( J3 N) p7 b2 P" _" Z6 u$ H% ~        {
) z) L9 A/ N2 ], y& v, J8 _            i=0;( x  U3 L- B" N- y
            j++;
3 @' _2 |; u$ J  ^  s        }) ~7 I4 ^6 o" l! o! {! R
        */
2 D7 U! I, p$ y) t6 J0 z+ ~
9 A3 x, n7 D: K: i/ p       asm(" nop");
7 B# g5 D" A- P- P  B4 q0 L- l( h$ O, d
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);$ _2 ]9 g  p( z
    }
3 M! |: W6 c9 ~6 O2 ]
% p3 [9 J' U% i3 n! k    /*检查UPP传输的数据是否正确 (loopback modes only)*/
7 M: y) F, N- L/ s7 h% Q  Z) h    //UARTprintf( "i=%d\n",i);
1 I3 \" n' M- s- k    //UARTprintf( "j=%d\n",j);0 l7 W2 p* c, Y# Y% T8 }- Q2 R
    UARTPuts("Data mismatch in buffers.\n",-2);
- g6 y6 c8 F  v1 o& {    if (upp_interrupt_count == 2 && upp_error_count == 0)# p- v" J# D6 n$ v& u
    {
0 W, S" o+ f5 e; O* o0 p2 q. E        for (i = 0; i<upp_frame_size; i++)7 V' f: M: A& ]) l) F8 G+ w3 S
        {
* @% @; B: N" N: A; v- t            if (upp_buffer_a != upp_buffer_b)
! x9 Q  ~8 k1 F1 J9 v2 I- n            {+ a6 t1 s" |  ^% a" C9 e& E
                upp_error_count++;
. F; K4 L# G2 a2 M/ I+ _            }
- T2 J  C. K& v        }! N5 V* |% [& z* z/ R! x" {. I( D( T
    }* M0 k# T" x6 V* A4 ^/ R' D

! }; k! U* V  d1 [    /* 报告通信结果*/
3 H5 ]( j8 ?# m) ~- f* `, m    if(upp_error_count != 0)
) s. Q5 p- p) E  p5 C        UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ z- U# i$ L/ X2 V+ m$ `2 i- P; }5 d    else) r& E7 h4 a" z8 a
        UARTPuts("uPP transfers complete!\n",-2);
2 D9 T4 V+ Q; s1 V. }- S, ?1 z4 z, R2 h  x5 w
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);  S, w6 M& \) L/ b
    UARTGets(ch,2);
1 e. t. W2 ~  e* w    UARTPuts("\n", -2);$ s) G  A6 g" o) \+ p
3 c. j& B# M/ a
    if(ch[0] == 'y')$ E( k& Q3 ]3 G& d6 \8 Y
    {
$ w5 P; z( F' p: w# E& [        /*打印全部读到的数据*/; z0 X. J3 d% X( Q4 l5 O
        for(i=0; i<upp_frame_size; )
2 |$ _# x/ [& q6 }        {
6 u/ Y# f4 H1 `/ K% r            for(j=0; j<5; j++)
$ y5 ~2 H& ?* S2 D& T            {0 a1 z; H7 A  P% L/ `; _
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);0 ]1 Q2 l; O8 S  {
                i++;9 f" g6 h0 g9 t' T0 w  H; f
                //if(i >= 4096); F% L- B. U: f1 Q
                //    break;
6 w4 ~, g! ~" D$ |+ r; K. c# o$ o/ U' S( E" {+ Z  k" ]: r9 c
            }" i8 x1 \1 h. m& r& i% t8 Y
            UARTPuts("\n",-2);
6 P; ?6 l5 u8 S        }
/ S- v2 Y3 [7 {. P7 E    }
, D+ F/ d* a" o
3 B; ~) `7 Q% y" ]; P* C1 i}

' i. [5 e  f1 p# R
6 _8 [' E7 }- B

: u( L% a" [) V& L( s# G/ j
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
0 v) L. x7 `$ f. c/ x# I
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。+ B" K  ?9 B6 m7 {2 Q





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