嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?) J; Z- Y4 t% C3 F$ F
Void UPP_TASK(Void)
! x9 Y4 |' E/ y1 }3 ?5 s3 P{
7 ?. \! w- w$ Y  y. \3 I* D
& }7 }: c; v2 T' c$ U9 x! q$ W    int i,j,k,target_int_count=2;  D9 ~& E5 O& u$ i2 k
    char ch[2];* E0 h) o& @8 q# Q" N3 r8 z9 |8 T
3 y. H; K! c6 X8 [' w" F4 \0 s
; K' S$ E4 w5 P9 K: g6 _
; q' z& E4 W! {  E$ ^+ _3 d& M. G
    upp_interrupt_count  = 0;7 t( f/ w) u: `4 ]- C0 y' a" a
    upp_error_count = 0;
, W* }- J5 r; ?7 Q5 k4 p' w6 u8 c5 E- f9 W
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
/ U) y( S( h! W8 ]    // Initialize data buffers# a- [1 t( u8 h; h7 L. G
    for (i = 0; i < upp_frame_size; i++)+ @1 x, M& i% V6 B4 f8 j
    {
4 ?) `6 {! C4 D; Z+ {  ?       upp_buffer_b =i;. G7 V1 x+ H" k- h4 O3 d0 x
       upp_buffer_a = 0xDEAD;
. @4 k. I) G) z5 d* c: b: B0 @    }, Y4 w* O. `9 r

: p9 h5 o1 v1 ^  z% W  y6 y+ ~    //for(i=0;i<1024;i++)
& F) Q; h1 _6 {3 c7 X/ M    //    temp=0;9 c* d$ N& Z4 Z9 o- ~
7 J( ?/ z' a4 b. Y' R9 y4 s
    //UPPReset();3 ?& h) ?& I+ U- ]  V. l
    /*启动UPP DMA传输*/5 x7 K' U% T9 O( _$ r3 J
    UARTPuts("upp_prog_dma_i\n",-2);" T7 ~$ L* ~- W9 ^
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;9 N/ M1 A# g" ^% L! ~
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 C/ N- t% f4 j% q    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
/ k" u8 G( g$ ]8 R
* ]7 Y6 n" R, o5 m+ E    UARTPuts("upp_prog_dma_i\n",-2);
# Y/ V6 {8 H% @4 Y& I    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* I- X0 I* G' B1 }( k    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 _4 v5 k9 p1 u* S- t2 J    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);% V0 f  h5 S# p2 `( \

) v6 z( d: O) n- g    /*等待UPP传输完毕*/
* x& [1 w( x1 }% X! D    //i=0;
2 J% i* H* J! j2 o    //j=0;, x5 S  j9 ]% w+ J
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)2 [( B, m! d9 A3 M
    {
# G5 r5 F1 K& S% W% T        /*  测试UPP传输的同时操作普通DDR数据2 z3 E* Z- z0 e$ r
        temp=i;
" Q- F0 e$ }6 S        i++;
: N; }( S, d8 Q: k: ~7 V9 _7 A+ x        if(i==1024)
  r& D6 @: k: M: f  h8 l  m        {
4 P% r1 `- |0 L3 v) e% \            i=0;
5 C7 G: T* J# B* u9 s- g9 ^7 z            j++;
. e6 A6 u: Y5 Y" y3 l        }
6 e7 u8 W8 Q( L5 [9 x& l        */
# b# N$ g+ |; |0 f- E; d3 H2 s1 P; v0 w
       asm(" nop");- E  `# [$ K1 t$ I: j
' K1 S0 j4 E  C, {% V3 E8 M. v
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ v: y3 ~4 D2 M9 s( h7 I    }
! m3 D1 M9 T+ F7 C2 u. v0 B1 D& c  r5 j# f! b0 u
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
+ t* a/ p6 f% ?- r) @    //UARTprintf( "i=%d\n",i);
# n  @7 W6 W' ]5 J    //UARTprintf( "j=%d\n",j);' j  {% L5 m5 a7 g
    UARTPuts("Data mismatch in buffers.\n",-2);* M2 j1 K: z* t. H# f0 X
    if (upp_interrupt_count == 2 && upp_error_count == 0)  q  t7 m$ J- {$ m# d  u' n/ J
    {3 l; d$ ^7 c6 z( y) Z2 |
        for (i = 0; i<upp_frame_size; i++)8 k  @' E: |. X/ J+ u
        {
6 d% n2 y" ~& t5 ?: y$ k            if (upp_buffer_a != upp_buffer_b)0 q8 T! D; k* t. Q; E6 }
            {
3 i) R( m, L# R( z. ?5 @: M" s                upp_error_count++;1 _( N  _% t; ~& V% R$ Q5 _6 V
            }4 H4 n. W& G7 ?7 i5 O
        }* Q# F$ j! [/ Q  E* |- z
    }, M% K$ T7 X& k. S, _4 t

9 ?2 U% c$ Q; Z# u9 z% Q0 t- R    /* 报告通信结果*/
- E0 J! j1 u" H    if(upp_error_count != 0)
9 Y0 t: ^2 y4 d  ?8 i% D9 E0 n        UARTprintf( "upp_error_count=%d\n",upp_error_count);$ z' k2 O' i, B% R: y$ e
    else
; R2 \: e/ o6 k0 ^3 J        UARTPuts("uPP transfers complete!\n",-2);
! N& Y$ a3 \+ a8 z9 l5 f1 W% W! e) [: Y5 O: X
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);" ~& E* w% Q  F4 j* A1 }
    UARTGets(ch,2);
: i9 t* l5 j8 f0 j, D# O( {    UARTPuts("\n", -2);5 P4 y, t2 a( K( t8 N4 i2 u

0 h5 t+ Z7 N+ |( C1 |# }    if(ch[0] == 'y')8 t! {1 y7 d% b( ^7 g$ n) x
    {- p7 [. X6 `9 _- f
        /*打印全部读到的数据*/; @7 B# ^/ f' V, x% I  U$ Z
        for(i=0; i<upp_frame_size; )
) C' V; `5 C3 D9 q& i7 J        {7 @4 V. x, A7 f, d
            for(j=0; j<5; j++)* `8 T. ~$ e/ \; Y* p: p' d
            {- Y: J  X% G0 j  L7 ]$ {' I+ u
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
- Y4 @* e/ e( C% p1 g& \                i++;
" {3 L, B2 F# ^                //if(i >= 4096)- G, K& S; L# i) O4 n
                //    break;- f# N, q; W3 K; K" m, H

5 j1 R1 |6 b* ]4 a* ~1 I4 H+ H& P# }            }
8 z8 F  {( }% }1 N& \6 s+ C) s            UARTPuts("\n",-2);
0 t/ z( o7 _: H0 W        }! Y/ O$ U4 m% N3 c, P$ [
    }
* Y4 r  a  h& ?, u
( p# g# _  o4 H}

; a4 f. L) w0 }; z* `2 x  Y
0 t( x- ]) N) d" d  ~
7 R  ~/ [, Z4 i

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* J$ g3 q9 g/ H# ]* T& a
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。7 k' ?" P. q7 h1 y





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