嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?; }  {: d0 W7 @- B2 T% M, r
Void UPP_TASK(Void)
' q7 {& l; Q4 H6 C) J$ x7 ]6 q4 {{
% H7 G9 j; E1 U8 g% {4 H0 X1 n4 P
    int i,j,k,target_int_count=2;# i) l$ Z* V0 k# B. e4 G0 F
    char ch[2];2 m2 @8 S; ^4 @, M7 k8 W1 X& g

0 h% x% [  D: h" H$ h6 {: i% p4 a% q! e0 @$ M) W3 W% l

  k: ^" O' Y: U% Q- m    upp_interrupt_count  = 0;
) j  @6 l4 g& @% D4 l    upp_error_count = 0;
3 {0 V" _% K! c" M4 {5 h; i- R- P; l# @, d5 r2 e' K
    UARTPuts("\tResetting uPP buffers...\r\n",-2);" w7 P, _9 {2 M. ?! G/ A
    // Initialize data buffers
- U. E+ {( m1 i# v3 U5 o3 A2 d    for (i = 0; i < upp_frame_size; i++)
, b3 y: I$ L0 j3 Y    {
) E  U7 \0 @1 |5 K       upp_buffer_b =i;
) j$ P; w# P  H2 z3 ^       upp_buffer_a = 0xDEAD;" {; ^0 z- e' H- u- }( Q
    }9 Q( {; b* W; h& k. r$ @$ z
2 @! t2 t+ o* e" @  j! w
    //for(i=0;i<1024;i++)9 W6 |7 _+ Q8 e7 b& Z  y! w$ T
    //    temp=0;
9 z4 S7 p* [5 c5 S$ T" U7 P8 `* H/ \: `2 n5 ?$ T# `) W
    //UPPReset();5 I# P0 c+ B) E" j  T- R1 R
    /*启动UPP DMA传输*/0 d; a* I/ e% g  U* T  a4 J' T
    UARTPuts("upp_prog_dma_i\n",-2);
" r/ N0 s" {7 ~    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
2 x2 C/ R, k3 a6 ]  _    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& r" q; I, i$ m  e. q4 E    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);% x( D% }8 y% ]# V' W

4 L2 P3 h- i( Q( U    UARTPuts("upp_prog_dma_i\n",-2);, L; U' X- @# i
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
5 Z3 }0 }+ m5 g  g) D    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
  `; ^" ^: ]: _, y3 ^    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) z) |7 w4 D2 p
; r) v8 F, g( D  ~    /*等待UPP传输完毕*/
+ d0 I5 Z5 h0 ^0 j6 V$ Q+ O1 r! y    //i=0;
5 V- ?4 u6 q* k) L9 l! `    //j=0;- G' \( L0 ^* z; i& R
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)3 R( J! A& p0 C
    {/ s) p; y# F9 E
        /*  测试UPP传输的同时操作普通DDR数据
- N5 f4 i+ v  z8 G        temp=i;
  E: a4 J# E) [4 i        i++;
, x9 a+ S/ e  y& F& e! |3 t" m3 o        if(i==1024)
/ M+ f; {7 l0 [2 N1 o2 @        {
! p9 V  j! L) e0 u8 C' g            i=0;
7 |7 C2 P6 T) A/ U' R, M, r) _- {1 E            j++;
0 J1 Q& U4 r$ H        }! k  W" ^; S8 r4 G. C7 \
        */
  ^, j6 M! w8 O# K- s0 J
& H+ V" N- L# Y, Z) p/ i       asm(" nop");& O& n% S: i7 F& \1 n. r& Z$ N* k

. U0 d+ Q( N2 x+ A6 x       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);# u' K6 o( y# P" H8 P! u
    }
/ j6 [# F4 b6 x* j) [4 S/ ], w4 p! a: S: |) e5 A* w+ U9 I
    /*检查UPP传输的数据是否正确 (loopback modes only)*/, a4 L+ ^+ S2 u& g% n6 p  t
    //UARTprintf( "i=%d\n",i);% \+ Z% E/ u+ d, }" w
    //UARTprintf( "j=%d\n",j);
! Y$ t7 W+ J9 F    UARTPuts("Data mismatch in buffers.\n",-2);
, x1 o& b) I$ b" O0 m" V    if (upp_interrupt_count == 2 && upp_error_count == 0)
% O1 k3 t6 R/ I& R; F- Q    {
- k$ W5 U1 f8 E  F) L) {3 l        for (i = 0; i<upp_frame_size; i++)
" x* S* s) M: C& e# R3 V7 _        {
4 e5 }. t) S& k; q7 Q: l3 Z  n            if (upp_buffer_a != upp_buffer_b)
$ ~) k2 ~% t8 a, v; D. ^1 u            {  l0 u7 K. F/ n5 I! a& U* Z& Z
                upp_error_count++;( z6 V+ n$ R  ~! n9 ^* ~- K
            }1 e+ F# k! V2 p) V) z+ r0 z
        }! g1 d  b: s* ~6 x
    }
' v: Z! N; o/ }; l4 J3 v' v7 |5 c5 x2 `2 c5 N, U6 |
    /* 报告通信结果*/
. E* c0 m  o/ a$ r    if(upp_error_count != 0)
) E5 n5 I) x% M, E0 x        UARTprintf( "upp_error_count=%d\n",upp_error_count);
$ S7 x2 K$ x  ~. ]$ s7 Q: [3 k# H    else
) q, |8 r: H, p/ N  H' A        UARTPuts("uPP transfers complete!\n",-2);" U) a! n+ h) w  s* t/ |* ^8 Y
" Y0 W& O: V/ E( n8 P  p4 i
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
: o4 n( F# k; y! b, J- Y, x: E) K    UARTGets(ch,2);& I- x/ Z/ \% Z9 G- p+ K
    UARTPuts("\n", -2);' H; V; R6 D6 c) @5 d' u

# K  e* z. k) N4 U    if(ch[0] == 'y')
. @; C# B8 E- o0 t2 g' r) r    {
$ {  u" M  c" |2 J$ Y9 q$ o        /*打印全部读到的数据*/
3 f# L9 B$ h: o0 Q4 D        for(i=0; i<upp_frame_size; )7 {2 W" M1 g6 C$ ?. D4 ?
        {
/ M9 _  i4 \5 m; c) g8 p! K0 X6 Y# Q            for(j=0; j<5; j++)
7 y( W) V) H; r& b            {
& E- ^: I: I4 a! ]- d) x' p- J8 q7 o                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);& h3 R  r5 [& U: @  {7 W. @! E4 n
                i++;
3 F6 u4 ?5 y: |7 j% E% [* i2 A$ J                //if(i >= 4096)
$ p7 r2 w, D* {5 T& D, d7 ]8 m( y                //    break;
& Z; L2 E% B$ ^6 V/ i+ `
" ~/ X8 \' e* Y7 p; }" e& X            }
" i* h5 ~. g0 C) T+ D            UARTPuts("\n",-2);6 N4 H/ I/ V2 G3 ^* R
        }
) Y6 b" R6 y; q" P/ h0 A$ `    }
7 K& a$ V! c% V' ]
. L% O( f. M" k4 @! ^}
# Y) w/ d# ]- e

/ }; s) M9 g+ R) s3 u$ u7 k  K( |, j7 Q/ ~: j9 j

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。* o8 w9 x/ s/ ~

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。4 q* X9 D! G9 g, ]& R0 J





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