嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
. V. B3 }+ {8 Q( V
Void UPP_TASK(Void)1 w( T3 H6 S& |7 D; @  Q. e
{3 K, Z; V: k, v" Q! ]: ~! g; Q
- @* z9 r/ i' i, p* D' H
    int i,j,k,target_int_count=2;  p/ Y( Y7 g. [
    char ch[2];$ @/ K3 X7 r$ V2 A3 X! n7 y
  y# w5 |5 x; d$ v

) T+ F% ^9 M$ x3 e( j
* k: x* s0 Y( I+ D9 }& x. f8 X    upp_interrupt_count  = 0;3 p4 T" i4 S) ^4 g6 u/ m7 w
    upp_error_count = 0;$ ]' C+ J6 \$ T7 v. x; x2 o& h

1 h- t1 K5 p  O3 Z- ]    UARTPuts("\tResetting uPP buffers...\r\n",-2);2 B& p8 i1 y$ j1 X+ G$ j1 \: U
    // Initialize data buffers
0 q: p, Y2 v8 v& n& a    for (i = 0; i < upp_frame_size; i++)
3 E) I- ?. K& R' ~1 s- H  P    {
4 G! {  b- I5 k" c5 g) ]7 i' t( E       upp_buffer_b =i;% o$ F3 t' g& Z$ w: _2 q
       upp_buffer_a = 0xDEAD;
& a( L. V/ N3 c# H& ^    }
2 C, |; a# z! e) d0 M& S1 K$ z9 m
) {( n* S# ~: ^9 I    //for(i=0;i<1024;i++)2 c' F8 g7 q0 N" F+ G6 w9 C# x4 G
    //    temp=0;
9 K. r6 s- }3 B
8 w0 Z/ H1 X/ v    //UPPReset();! v! f. w! i& D
    /*启动UPP DMA传输*/
1 s) U3 J( m3 @5 v' K    UARTPuts("upp_prog_dma_i\n",-2);
, K4 }6 V9 \, {: }    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
) A+ a0 H# K9 p" `# u4 i2 a    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);# j; {5 }9 _" u3 X. u* ~$ x
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% Z7 i% b2 l- A
. ?7 g4 M$ w6 V7 n; t, w* T& w    UARTPuts("upp_prog_dma_i\n",-2);
+ A) M- o) ?* a$ p2 S" t3 F    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;' i3 P; G" ?% p/ \% i# E/ R7 _
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ q# y9 s* d, \. |/ i    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
/ _9 J! u. L8 s; L7 U3 t, h0 J  s' O# f% K) A, [. \
    /*等待UPP传输完毕*/
0 F9 B2 w4 q& W0 D! ]    //i=0;( }; ^4 d* Q( H6 n
    //j=0;2 |2 \- [# |6 c
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
) K# D5 R+ E; P& {8 u) |& {    {+ ^# G; E' V0 P. J
        /*  测试UPP传输的同时操作普通DDR数据( F) A+ A. M+ P7 H- h& c8 k
        temp=i;
, }5 P; ]: o- I( \; Q        i++;
% C2 J, m9 H- k9 v4 D+ R        if(i==1024)
8 @  @/ o; q# v* K; g        {+ r* x: [; z+ V* Q
            i=0;6 v7 U3 }8 V8 t3 K! j; T) ?
            j++;
' X% k9 g, N, t4 L9 X, g. j        }: Y! r5 R, G7 _4 \* q8 }
        */
/ S% x! P5 s0 j7 k$ |7 t/ u: A( s: f& a  V6 l2 m5 V
       asm(" nop");
5 a/ c+ Z3 W- C# a8 ^5 J2 c6 f. ^4 [6 x, A
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);! P) l! n4 V" R( O- y% d! Z
    }
% L; _: |0 F* v, {. W' c
7 p: d2 m) T* o# F% U3 L: l3 v$ S    /*检查UPP传输的数据是否正确 (loopback modes only)*/
) w! z7 }8 l! ?$ u5 A4 ^+ n    //UARTprintf( "i=%d\n",i);+ k4 D) k/ u8 A+ l$ O+ Q1 T
    //UARTprintf( "j=%d\n",j);: g6 T: ~: }0 A! y$ B1 x$ m4 [  ]
    UARTPuts("Data mismatch in buffers.\n",-2);
0 T$ ^" V0 t" @# s/ ^5 e    if (upp_interrupt_count == 2 && upp_error_count == 0)- g0 H  L9 G1 Z* r2 |5 N/ e- x/ k
    {
% N& p8 h" q& L0 q  F! a6 n) U' e        for (i = 0; i<upp_frame_size; i++): E0 Z- [/ o( B* n: i  S* T6 Y6 h
        {  C2 H" E: T" I% \
            if (upp_buffer_a != upp_buffer_b)# G6 v( E3 A$ D8 R* o
            {4 c' }- ?( ?8 o) c: E% R- r1 w
                upp_error_count++;
8 n7 l" l& Z9 Q. q# {3 p- r            }
' ?) S/ c- X- X" Q# i$ M1 j        }
9 |# Y# I. l% V    }
. F% T% v. X2 e# t, e2 `% t& i* j* c5 o& d% y0 @' V/ H
    /* 报告通信结果*/+ R6 e* i' n) @' C: S6 v
    if(upp_error_count != 0)! M3 f& Z3 y# u, a* F* a; Y1 |  X
        UARTprintf( "upp_error_count=%d\n",upp_error_count);$ ]! d. G% f" i3 u" ?  J
    else
# v. b  N# X  S        UARTPuts("uPP transfers complete!\n",-2);6 P7 G/ d+ R4 R8 `

5 X# }" X* P. M8 T8 x2 i$ C" F6 m    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
9 }  @, n' z0 s& F2 ~; `    UARTGets(ch,2);2 M* A2 k4 i# g' B' L8 m+ d% \$ _
    UARTPuts("\n", -2);, L6 y( i( C' f. q2 x6 ~
% a: G. m5 \) P7 P
    if(ch[0] == 'y')
$ J! f) o" |  z) L6 @& O    {
7 k' l- \: \4 |# A1 g3 a$ g  I" v        /*打印全部读到的数据*/0 f! S4 k4 A( ]% Q) p, j( P6 t1 r
        for(i=0; i<upp_frame_size; )
0 X: _+ w5 T* K9 E" Z2 w        {
3 h. m; a* A: {  s6 F5 [1 {% m7 g            for(j=0; j<5; j++)
# H. b& }7 j% @5 r4 n  L            {$ O, N& i; G* @+ f  q( Z
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);) X6 ~0 A, w# Y: N8 e- ?
                i++;, }9 @/ t& z0 k
                //if(i >= 4096)1 Y! J) c; l. \. K. l, X+ ~
                //    break;
# a1 y" {0 y) q" J9 i( j6 v0 {
' p+ `0 q! d: Y            }/ c, k! b' j7 o5 n, L( `. b3 K" i
            UARTPuts("\n",-2);6 T1 p2 T' T0 s  Y& g0 B
        }
* H& f# C+ g% _: L+ r) A, O    }' H/ l7 \2 w/ W6 n, L3 d
$ h- z- ^- ~# W* s/ X% b" u
}
; W1 u1 @2 `8 Z! V3 g! Z1 v

5 h& D+ \0 j; O4 f+ L1 A
* S7 a( s5 s" L) i, H3 s
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。. U% Y2 k7 e: y

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* ]0 [, l* u4 I0 s




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