嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?5 z4 T2 G& n6 H: J  a# e
Void UPP_TASK(Void)/ g* F/ A" A0 o( b$ c
{% p4 H" D/ K6 T# i2 V

/ S/ c; R" d8 s/ B# O, G# ^    int i,j,k,target_int_count=2;
/ @1 P+ e0 j) K% B    char ch[2];2 E9 @% n# z# H2 _7 u: ^

5 {& S# P% _# _' q  ]8 g: c; q5 O. ]; z/ n: n1 g, c. g5 b" j5 o! j1 B

, s6 d/ V5 d7 ]0 x    upp_interrupt_count  = 0;
6 ?1 @; Y# s# o7 D2 C    upp_error_count = 0;
1 u' b: E5 _' w$ u$ {1 B+ _  c! I, N# n. H7 ~" _. G
    UARTPuts("\tResetting uPP buffers...\r\n",-2);6 G) k+ _4 z9 v( d# l
    // Initialize data buffers
4 ~; f. r) h, k, T: _' D7 Q    for (i = 0; i < upp_frame_size; i++)
6 g6 {' T$ ~4 ?4 i% n9 t  O5 e    {
( G% q, p5 @# E8 U: f6 C5 V# I       upp_buffer_b =i;
, C( ~" K! P0 i       upp_buffer_a = 0xDEAD;: G0 H/ T5 X3 J/ t
    }3 l7 B3 y$ R/ y
) F+ j* E5 ]6 H+ Q1 G9 ~5 E
    //for(i=0;i<1024;i++)1 X. y  A* T/ P( q( P# f  O/ n
    //    temp=0;
5 a! w& d9 a$ q' M8 A- Y* \% n/ G) i) m
    //UPPReset();
. Y* I) z  X0 Q! Z& Z    /*启动UPP DMA传输*/
$ x$ H' U& p5 _4 R7 f    UARTPuts("upp_prog_dma_i\n",-2);- p+ Q( _; E. X6 {  p" p' l  q
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;$ e1 z! P4 u, c
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);, [7 i' ]2 N. y8 R. m" K. \7 v% v
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
/ v8 x, O) s  J, s( n
- ~" g* }* H+ j: p    UARTPuts("upp_prog_dma_i\n",-2);: X- P6 [7 `9 K7 }4 F; v2 T
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;3 y/ h3 D8 R% M
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( l+ }$ w4 T% J/ @* X; q
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);. [3 ~" V& N0 v7 K
9 e3 n9 B+ H, q# ^( E
    /*等待UPP传输完毕*/
" T" }: [1 S; P3 d. A    //i=0;/ q( G% f. H* ?" J) B! a) Q
    //j=0;
, ^6 ~% L' H6 j0 F6 @    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
6 w, D/ H& w. z% _    {# g! P, v6 V8 D. S
        /*  测试UPP传输的同时操作普通DDR数据2 I  g( T1 j7 B, p4 C6 q3 ]
        temp=i;
0 N9 A& l( o* v! k7 W& B' M        i++;9 _# v! s1 i% L/ m0 u# `
        if(i==1024)4 E- P* ~' s; ?9 }
        {
( M% k2 C: G  Q+ o, H: r            i=0;6 U$ v' s* g& ~8 O9 y8 G! ?9 E& t4 O' F
            j++;7 H2 K5 D. E  Y% w2 z8 A, D
        }
" v/ _/ j6 S2 _& G4 F        */
3 q' a) {+ s, i% H$ ^/ S. @$ a5 {
' ^  |2 I8 V! H8 M, h! C3 o       asm(" nop");
. x0 b& F1 L% M- C0 i# \6 v4 N4 @. c+ u
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
  l5 E2 f; _0 D$ X    }5 C% J# }+ p* p% K5 G* e9 S: u1 k

' a. e6 L# N' T2 }+ S* I    /*检查UPP传输的数据是否正确 (loopback modes only)*/9 t1 r1 X* D! j  m; T# i
    //UARTprintf( "i=%d\n",i);
0 J: ~5 r6 n% d; S  W    //UARTprintf( "j=%d\n",j);0 V9 q6 l8 Z+ ^( n# K$ S  ~
    UARTPuts("Data mismatch in buffers.\n",-2);
$ n) J* i9 l* I( ^. I! q- R    if (upp_interrupt_count == 2 && upp_error_count == 0)
  o2 s8 q) F5 N+ @& b4 s6 |/ x    {
1 m3 c$ ?' N( ^; y2 k        for (i = 0; i<upp_frame_size; i++)% a3 R9 [% L( z+ z5 A
        {$ T' u2 k2 [- z3 L, s4 |
            if (upp_buffer_a != upp_buffer_b)8 _! G7 d$ H# }, ?
            {
: s3 x$ Z" {+ o. H8 L# n                upp_error_count++;* H& r3 c& W) B
            }# O9 Q+ b. i) u  g& t7 u: ^( ?( W
        }# N+ }8 y% x( K
    }
' T( ?% _$ V+ q8 g) B8 n
% m9 Z' |. b) y    /* 报告通信结果*/+ \. q9 S% D- j$ Q& R
    if(upp_error_count != 0)0 y+ [3 U) P1 v) P2 O
        UARTprintf( "upp_error_count=%d\n",upp_error_count);3 ]- H5 l$ A! r/ [
    else
7 R' c. C: C4 ]4 C        UARTPuts("uPP transfers complete!\n",-2);, n: l8 g, u( a4 |5 |
+ u# c* S2 e- ?: N# Z
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
( E5 U" O8 A$ S2 O/ [/ n0 |    UARTGets(ch,2);
; M: T% q( ?2 a$ F- ^+ y% V    UARTPuts("\n", -2);
3 c) g! Q' A0 p2 G  q7 P' f) j" S! ]) t3 h- K; g/ M
    if(ch[0] == 'y')
, J% U8 J4 E0 _- A1 Y. r  E    {; `( J9 C3 q# M( |. [/ D9 r
        /*打印全部读到的数据*/
. p+ i! }8 w3 T: a- B* F* x4 ^2 l        for(i=0; i<upp_frame_size; )
& O1 y6 ~* H' _6 B8 Q3 a1 `        {
1 M0 g! |, j# X; d' I            for(j=0; j<5; j++)
( O: X& P: ?# Z% @+ F1 J' U            {
8 @  ~1 c5 M$ P& S                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
5 m* F; z2 R+ |$ {$ q! t                i++;" G% q1 B. ]" ^: I$ ?
                //if(i >= 4096)
; S+ z8 Y& v- W" j                //    break;5 z. _1 A3 j1 ~- n1 e

- F, U  H* [, }# V            }
4 w$ X8 f5 W% O5 [0 ]- _- q/ g5 k            UARTPuts("\n",-2);) D3 }2 g$ S3 _. j( }/ T1 }
        }
5 E" }  T, I% w4 ]: L( N  G  ~" w    }( D. R6 e5 c& P/ d# d

1 _+ U: z' L- E( M}

0 c* C3 }% z* H5 e' ~  d6 U, L

8 D' P2 w. J, W7 f1 A
3 E# R  O% L# o. y/ Q: X; P
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 r0 b  z7 j2 G3 J% ^" b/ @' x
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 J1 x+ U/ x# O3 V




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