嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?2 O7 e4 J, y( M& d, p. P5 ]
Void UPP_TASK(Void)8 v/ S( ~9 V0 b  I
{
+ m, U2 y1 w3 ?/ _0 ~4 ~! t! ~, {7 [. @% m# ?. L* Y3 |
    int i,j,k,target_int_count=2;
  C5 a5 I, a, A! o: Y' \: O    char ch[2];7 x& z( h( G5 C" N" }, H
" M# b. h8 S" O! y# ]+ {7 \
) y5 G' o4 d) t7 F  V5 f

4 A3 m8 M  u0 E$ O, g( e9 J    upp_interrupt_count  = 0;
0 _8 S2 X( E: v; A    upp_error_count = 0;
  l0 {. j# f9 W& f8 h& g  Z
9 x, V$ q8 ^! [; u0 S* S( `    UARTPuts("\tResetting uPP buffers...\r\n",-2);
, `) F; ]; x) {    // Initialize data buffers
$ h. S$ b$ U5 J+ M0 H    for (i = 0; i < upp_frame_size; i++)5 }/ n& I' ?  G( j  y. f
    {
  f& m! ^9 i7 S- z, R8 i9 G- F       upp_buffer_b =i;
8 e) h/ E% d5 }$ v       upp_buffer_a = 0xDEAD;
- h( N3 T: b6 m2 M! U5 F    }. a1 K8 W) Y3 F) @

$ q7 F& P( L* S% e6 q    //for(i=0;i<1024;i++)
' r+ ]4 N; ~( u    //    temp=0;
- t& r+ ~; k" V2 I
7 u( K! t8 c3 M7 `    //UPPReset();5 U6 K4 b( o/ p( C
    /*启动UPP DMA传输*/4 H4 N% h  E0 H/ L- e) v
    UARTPuts("upp_prog_dma_i\n",-2);$ W. }+ w) p3 w+ f4 T) T
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;" k! O2 m& B0 m6 O, R6 h; `6 c: M
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" B- K: \8 s. S# ]% ~* ]    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) D+ f0 W1 ?9 ^  E- @1 e. }
6 ]9 [7 j; ^7 p) z* t$ q1 l    UARTPuts("upp_prog_dma_i\n",-2);1 z+ M3 t. F2 m9 V$ {+ ?. @
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
, w' u+ p5 M* u/ f) P3 @    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);4 v- u/ L+ `) L4 Y/ @: p- _
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
2 H& z# B# q- B! A8 D$ q" e) {) _9 f! s6 K
    /*等待UPP传输完毕*/( X; ]. S. }0 ]" t3 ?7 O+ p3 t
    //i=0;' |' Q0 j6 Z- y) K
    //j=0;+ F( Y- V6 q* t8 P
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)8 O, r" y& x! c) |% m6 D6 |
    {
4 k- k" I$ T9 l3 ~: C8 `7 R        /*  测试UPP传输的同时操作普通DDR数据
* `9 y6 W* s: M% `: f; J        temp=i;( P5 o$ f7 }( M% r% U4 {* g. \# o! S
        i++;4 k8 I+ o$ t* Q) Q* ~
        if(i==1024)
  [6 D! O% K# a) @: J: @  W        {
4 n) q! {* l' ~% X            i=0;$ A1 @6 f$ o4 Y2 n7 \
            j++;1 d1 s  e8 F% q, `1 s. k+ d/ L
        }
+ a- g8 t6 O( J7 j        */
: J9 @8 f8 ?: Q0 {: x# X- d' p% I5 F4 p
       asm(" nop");
, `) G3 U, Z% K3 @
) _2 n# U# F% T# y       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
  p) \" A2 I5 h7 l( ^    }
, W. W, q; B* C  S8 V" v+ q2 l2 S. [3 G: p
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
4 y1 ^7 I$ f. B$ t& ^    //UARTprintf( "i=%d\n",i);! r; d/ u4 ?7 R0 G7 A
    //UARTprintf( "j=%d\n",j);1 F- k# o" A% V& e! \. A8 Y
    UARTPuts("Data mismatch in buffers.\n",-2);
( ?3 x& |& h4 x9 R5 L    if (upp_interrupt_count == 2 && upp_error_count == 0)
6 c- P3 H: m, y  A! k+ s    {
! T5 l' A) z/ n! @/ r3 n! x        for (i = 0; i<upp_frame_size; i++)/ U: l8 @8 S9 y% p9 Z
        {' R' N( V9 h) S# e8 d# J1 h1 I2 T
            if (upp_buffer_a != upp_buffer_b)
2 D2 P. ]6 @& F            {
+ @! @1 c) L: z& b, O7 o( o. G) c                upp_error_count++;
% y/ H2 |' d0 {+ k2 o1 o- X            }
" @. R% z) c' f% }2 e5 N; _, ~        }
7 C8 U+ j1 Q" B( G9 ?    }
& E+ I$ z8 S# G1 L% h  P3 }+ h- W
- Z' j6 H* J* ], J& a    /* 报告通信结果*/
' [1 E3 H# S6 g1 t; m+ r* w    if(upp_error_count != 0)
; ]( X& Q2 u% e: N        UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 J  e9 X8 h8 A' a& I, b; y  Q: _    else' p" H# z# d. R+ v: N
        UARTPuts("uPP transfers complete!\n",-2);3 n/ |5 {( O& x6 i

% w( y- j9 A& L: B  {    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
0 I, m$ Y  M$ r9 K3 B    UARTGets(ch,2);
$ Z: ?0 R) [* }1 b6 [    UARTPuts("\n", -2);* v7 R; W9 B# ]. l

9 n$ T" X& T6 E. `    if(ch[0] == 'y')3 m; u5 U7 U5 M8 b
    {8 @* s& ]5 e' S
        /*打印全部读到的数据*/
- i& A' h' ]" l4 e( V" N& B        for(i=0; i<upp_frame_size; )
; X' u- F0 x0 b        {
: P- [5 h' P, p4 T! }" m3 u            for(j=0; j<5; j++): w9 C2 T" p. z$ b  t! D
            {
  N0 ?2 A* V( |. ~7 y3 Q3 M                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);* V; f- g! n8 Y1 j# ^- b
                i++;
' j6 D- A3 l: p4 |6 _                //if(i >= 4096)
% Q1 q/ H/ Q) g8 ^                //    break;
, M$ A- q3 O. ]
$ U3 Y: @. e9 w" H6 \" V7 C5 d: m            }5 R5 ~0 h# q6 L/ s- [- e
            UARTPuts("\n",-2);
6 A5 M4 Q, ^% U, t$ N# y8 Q        }9 w2 a: [, R* K: [$ c' b
    }/ K5 _5 _, Z: M# f. l

5 G4 g0 C+ K& e+ t  m+ V. b}
9 O1 S5 X) `. i; Q6 h
& H7 s( Q3 z8 w3 h

' u- a- f- A" V% c- h
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。! `& G5 ~! K: ^

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
2 T1 t  N' k9 R3 H




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