嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?4 I( O& c3 a3 r/ y
Void UPP_TASK(Void)* {3 `" c5 A7 X+ Y7 ]+ `/ r
{
" M& u! w7 k0 y7 I6 w2 o' U9 @4 y9 ^$ [7 E0 _: d
    int i,j,k,target_int_count=2;7 Q+ k* E3 W- K/ b0 t  [
    char ch[2];7 [) l' g( i) P

- V  M, @1 J" z7 W( v( r
0 e5 e3 u! [3 g$ Z9 V( u& t, l) v. j; D9 d
    upp_interrupt_count  = 0;2 ], I+ t3 X- U  n! [
    upp_error_count = 0;
" E. ?3 }+ L' u$ g7 x) w  \: U3 ?# j4 F
    UARTPuts("\tResetting uPP buffers...\r\n",-2);7 Q6 \! O& ?; p# }# p  K0 o+ [
    // Initialize data buffers" z$ p: j3 l8 X: b$ ~4 U" f' P
    for (i = 0; i < upp_frame_size; i++)
1 j* U+ i4 {5 I$ E3 g/ e3 |/ ]0 M3 V    {9 x! B9 m. {- N+ F- n% N' J* d
       upp_buffer_b =i;( g$ Y3 I# `; X7 T3 |# B- w9 K
       upp_buffer_a = 0xDEAD;
, L  D! X- k5 w- V) m! N* m% F+ h    }  Z$ j% ?# t8 s4 E' J7 G; a3 A
) w7 `3 t$ L+ v1 f7 D: W# C
    //for(i=0;i<1024;i++)0 n7 O& \/ N( ?
    //    temp=0;/ N* z2 M7 d* ^$ l( j- |
7 _4 Y: ]+ V8 ?9 j
    //UPPReset();
! a* j( S( t" v    /*启动UPP DMA传输*/
% o5 n# t) S( q- r% C" F- S! H    UARTPuts("upp_prog_dma_i\n",-2);4 j, |1 R  k/ S3 F5 `  V
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;4 x3 v' X9 ]6 B6 B, ^: _1 `  N0 |
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: `2 |" P2 n7 w9 y/ ]" d, O/ V    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);4 E) c% a4 L& |+ J/ u- ^/ K
7 f5 z9 G8 d; K* R1 \/ V
    UARTPuts("upp_prog_dma_i\n",-2);$ h8 h4 |; J' w6 i
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;! T# h2 d4 I% F$ o+ G+ D8 a
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);0 W2 a$ {  S; M5 e8 N
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
4 P1 w5 g& s/ f' @: k4 s: q1 g: R9 e
    /*等待UPP传输完毕*/& Z) `. F7 c9 _8 N3 X
    //i=0;
& z+ n9 r3 T( C1 Q0 j    //j=0;/ @" s+ m2 {# |+ O$ b  V
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 N1 |: }9 R5 D& q7 H+ N* l    {
% i8 ^- |/ Y9 N0 @        /*  测试UPP传输的同时操作普通DDR数据9 a5 f; }/ u6 |$ [5 ~% |) C
        temp=i;$ j% z' }# ?; M
        i++;
" U: x0 t. U2 ^        if(i==1024)
+ K0 K- j+ r2 A; H        {# p7 o+ d. Z; {
            i=0;
- R: b9 m/ @, v, |            j++;0 L2 a& L! R( Q8 W" T7 k/ W, _* S0 A
        }
! W9 M: j/ ~( g$ }7 Z        */1 ^2 M. x( l2 n! ~3 s

! N& s' S* [% S8 M7 k       asm(" nop");
# k2 ~4 k) `  s! @7 b6 D
, w" I6 y, e/ C) e+ G* h       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);" f% l1 O. k2 }2 a4 l8 E& r
    }% B$ j% o& H- R
" J& d' t; a1 @- z3 Y4 \
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
' f" h3 s0 K8 M2 r  Q) v3 D+ t    //UARTprintf( "i=%d\n",i);
: t& C, T* t& U: |- P7 `6 X    //UARTprintf( "j=%d\n",j);( Q) Z6 q& G3 ?5 `7 z
    UARTPuts("Data mismatch in buffers.\n",-2);
  r# N$ g: N4 U4 ~$ W/ w$ f    if (upp_interrupt_count == 2 && upp_error_count == 0)
4 c8 I0 N) e2 n+ d1 T+ W    {  ]7 x1 Z, B  S$ W) K+ P; _/ m
        for (i = 0; i<upp_frame_size; i++)" H3 i% P, D3 C* m6 x7 R
        {+ Y- a* O. i  v- W3 b( u; ?7 k
            if (upp_buffer_a != upp_buffer_b): M! F8 V2 R( [
            {( U7 v9 y7 [# V+ O/ \7 D$ s, a
                upp_error_count++;5 m' H- h$ V% |7 i$ `
            }
3 K1 `. i) J( k' ^        }
0 ^# |9 C8 W* M. {    }
  J8 y4 w& o7 V& B, y# I  k2 X9 C9 `
. H3 Q1 X; Z7 m' @& o- L    /* 报告通信结果*/9 m8 |3 a% T* g! V6 x/ @, ?
    if(upp_error_count != 0)
5 X0 Z6 k; o4 x; Z& H8 g        UARTprintf( "upp_error_count=%d\n",upp_error_count);
) D- H( H( R8 Y" z2 n2 B- i" N    else
1 ?( c3 \, M/ U( s        UARTPuts("uPP transfers complete!\n",-2);
0 C5 A5 V- b. w5 D9 J8 C. h: e& g& I, A* m% O7 r' k; [
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);; L0 B9 w+ z1 h- N4 K' x' O
    UARTGets(ch,2);" C8 ^3 V( _  C7 n, N8 j; D
    UARTPuts("\n", -2);+ B4 ]. F7 h4 D2 V- e. [
8 X6 q. T2 a5 a; X
    if(ch[0] == 'y')
& N# B- r0 I* E* a( c5 Q    {
  |" t4 V4 v4 F2 }% Y5 t1 l        /*打印全部读到的数据*/
& D" X0 r1 T) j: R; U$ y        for(i=0; i<upp_frame_size; )
5 I8 k& L: w, t7 a        {
& V" {/ z; X& e1 H, t* K! U            for(j=0; j<5; j++)
) S4 m+ {- j( \+ Q, e2 M% D* l            {8 t+ X" G6 s  c! }6 |0 I! X- a& v
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);3 q/ \% Z3 y; y. k! H
                i++;
0 K' n4 |0 v% X0 P, e+ a$ W, ]" E                //if(i >= 4096)+ y7 b9 e4 m- O- F$ [4 Y
                //    break;+ D! D7 Z7 z' ?% s

) j# M' E! ~1 r  b: [            }5 \( c/ T+ z. {! x
            UARTPuts("\n",-2);
' x: r1 P! a. J, R2 f$ A! B9 M        }$ g8 T% q6 t* p* V
    }
& f$ H4 |3 ]/ ^- v! k3 `. B( `: C1 E# t  m: A& I4 K2 N
}

  ]& ], y) C5 E5 X5 W( k3 K

! w' v( k4 }9 A
7 @; i( u3 o) u  i& _% C) O, ^% h. n
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 J! `2 {, E3 r# M  \' b/ h
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。1 z) x# L# i: O0 V/ e





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