嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?9 q3 }7 _3 g8 c/ d
Void UPP_TASK(Void)
% z# }, j/ h- B9 }2 i5 t) k! ^{
$ q% w9 x) |' }1 a/ b& S9 F. M
3 E& G: G4 e% @! q( W+ S) ?    int i,j,k,target_int_count=2;) z7 ]. L, E7 o4 S
    char ch[2];
7 {4 a4 m2 Z: Q. c0 a2 V  j
2 t' s, S4 A, p+ K: h7 g5 k% X
! R8 ^6 i0 s/ G0 G" k" \4 d
) ]& Q1 ^5 V. z1 ^    upp_interrupt_count  = 0;9 U4 G$ A+ `8 k  @2 _
    upp_error_count = 0;2 R/ d! p2 V0 L" ]6 R( w' `5 W

% i  M, |' U& q7 o    UARTPuts("\tResetting uPP buffers...\r\n",-2);! P0 M+ F$ E  E9 H
    // Initialize data buffers
* [* _; K0 V! r  O2 q, N$ \2 A2 w    for (i = 0; i < upp_frame_size; i++)6 s7 E" U: }' e6 b
    {) K0 r% x5 u8 u3 g/ g
       upp_buffer_b =i;
3 s% k$ C- V$ [# e       upp_buffer_a = 0xDEAD;: A. ~% W2 f" z" Y$ H
    }
$ u: ^) Y9 e8 T% s8 y. ?
0 k* t' j" S4 @, L  N    //for(i=0;i<1024;i++); C  o* i7 R9 X
    //    temp=0;
" D& a8 }1 F; k* }1 t# b7 e3 [0 }* {) N$ p3 l7 Q
    //UPPReset();
, o# x2 M% b. D% c    /*启动UPP DMA传输*/9 p: V! p' z$ o7 E# `: ^
    UARTPuts("upp_prog_dma_i\n",-2);
/ p* p! ^% x( E9 I% {    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;6 x4 l* Y3 u$ D# {3 }' n
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);3 ]4 b, M: j8 m  _
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);; i& p3 n+ {  I6 W5 z
- a3 x4 `, Z  n* c0 r( T
    UARTPuts("upp_prog_dma_i\n",-2);
5 r' e& ~+ V* @& ^1 B, p    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;6 D& U% B) a/ m! f2 F
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 D9 L' G! m! J: C    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 P3 I1 u* }* v. |( [$ b' `
# ~" h+ l3 c; ?% V3 W    /*等待UPP传输完毕*/3 m. Y) b( ~. w+ ^
    //i=0;
* z7 _$ y; s! @8 b3 m    //j=0;
' {3 M4 ?1 D0 K4 R5 k    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 n' \8 O4 Z6 N4 L4 d3 i4 ^3 C- J    {8 u8 d( n) k, v! B- b/ L% X
        /*  测试UPP传输的同时操作普通DDR数据
3 K* z" j. F, w# P. |2 t4 m        temp=i;. y! `- x2 p+ m: [+ F
        i++;! r. c# J3 l1 a6 \" Q& D. W' x
        if(i==1024)4 q. f+ L5 h/ H: D5 q9 L: l) ~
        {7 l/ ~/ I1 |- R8 w' \& O) m
            i=0;
8 e$ h+ h. u7 a& g* D# n            j++;
. \9 S8 a2 V. D9 ~, m" v/ I. g! D        }
+ j5 T) P7 {0 ]) V, K) n        */
- }# i- x1 h2 U; k# C3 }8 a9 i1 _5 z
9 D9 ?8 A4 Y4 G7 Z* L3 U+ d7 n       asm(" nop");
  j8 Y4 f9 u8 j2 K# h) Y
7 J' Q6 F% r4 X       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);4 M' [' S! t% s
    }1 }" O: |% f. {2 c7 l) ~# ~; V

% `- G2 y3 Z! o, n. ^! d    /*检查UPP传输的数据是否正确 (loopback modes only)*/! }/ o( @/ v: F7 q& l  Y
    //UARTprintf( "i=%d\n",i);, U0 l  Q% r/ u" q
    //UARTprintf( "j=%d\n",j);1 b) g' }$ S, |% E* v
    UARTPuts("Data mismatch in buffers.\n",-2);, ^! m0 I) y0 B4 ]/ p+ Z
    if (upp_interrupt_count == 2 && upp_error_count == 0)2 W* h1 _* k) r
    {
7 G7 E9 a0 m0 U, H2 k# L8 y' B        for (i = 0; i<upp_frame_size; i++)
  \" Q- n: E5 h7 u6 F        {
" L# e. Q/ r, _: ^            if (upp_buffer_a != upp_buffer_b), L& _& }* `1 h7 r( S
            {' X( U; S9 H* t# N/ C
                upp_error_count++;
/ |# j# F+ z7 R            }
) m$ F1 A: \7 W) X        }' N/ R1 b& o2 D; L
    }
. X9 w( Y, g& E0 ^8 M2 d% ?8 A& Q: M( d3 Y( N* ]4 x
    /* 报告通信结果*/
8 s; P/ \: {9 x) ]    if(upp_error_count != 0)
- g/ m, p1 s+ j. {        UARTprintf( "upp_error_count=%d\n",upp_error_count);
# M- h* j8 I0 l# n8 M    else
4 ]' f3 F! F* L; q        UARTPuts("uPP transfers complete!\n",-2);
  ?; x+ K8 g% U% F9 A. \$ }/ Y% G0 g! R2 D4 c" c  m
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
* A* D3 D! p) Q    UARTGets(ch,2);
! Y* c, O$ s4 g7 b    UARTPuts("\n", -2);5 p& x- _! T$ b7 a0 F
  R$ X3 p  Q! f' E9 j* S( E
    if(ch[0] == 'y')# ^2 a9 J( e; I) U1 `) R, O# C
    {; m* Y, l( e" M1 w$ P' y9 P4 |
        /*打印全部读到的数据*/
8 Z! G5 C. _, I& d% M" Q        for(i=0; i<upp_frame_size; )6 h" B( n/ U( Q2 l0 K. E
        {
/ J' I( k- z/ q3 g0 N            for(j=0; j<5; j++)
" t$ I/ A2 V3 \4 F2 d. a            {
  H1 L: u! T% r5 e& {                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);. I$ S! B+ K" `
                i++;$ t4 E& E) {, b+ S) r/ R9 |# Z) @
                //if(i >= 4096)5 l2 {) i4 I, W; ?
                //    break;( \# ?6 X. D4 A4 W. `+ ~
  i, |  x0 w' i! e" K* l, \
            }6 y# K: q) {" Q
            UARTPuts("\n",-2);
: K8 V; n" J$ f8 R. o# @        }6 a# }0 g: I0 i: T1 c
    }- U' P  q" f( z7 ~9 G4 C( I

' X7 L' b( y$ @6 I( Q$ Y}

9 ]; Y6 b, H; }; B; f# P

: w) J2 {( K1 L2 G* D$ a
/ D$ a( G9 k( m0 s
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( }- X* @9 U2 D( o# X! q$ \
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。- K4 P8 j) |5 F3 Q% W





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