嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 U. E7 b/ d# C$ o, ^
Void UPP_TASK(Void)
4 y$ r! W1 \7 t7 U) }{& z" V5 o7 P. ~# k. y2 H( G
, @) A- V+ u& x& y
    int i,j,k,target_int_count=2;  j- R( E. n% z3 v& o" u
    char ch[2];
; N3 m& G+ g3 Q' |1 O+ K# R' z" L( i9 U/ h; w3 u$ m

( m. q) d- N7 v" Z0 `% L$ b7 c! j0 `3 }
    upp_interrupt_count  = 0;
' o' `, _' h5 X7 Y% e    upp_error_count = 0;
8 t! d: g! B: R1 F1 \4 S( h* r/ V$ A, V" K6 N. i) q/ }
    UARTPuts("\tResetting uPP buffers...\r\n",-2);' j* n! m+ e3 a/ v- j" e, z6 E
    // Initialize data buffers
' A5 Q$ \, d4 M4 N# k    for (i = 0; i < upp_frame_size; i++)
1 L& _; X8 U/ `" J! n4 l( o    {! Q  \* X! g0 Y
       upp_buffer_b =i;7 X) h/ l8 V; Z' p
       upp_buffer_a = 0xDEAD;3 q. C  ]8 O! K8 z
    }
3 i! V, `: [) ~, p: d) L  k- t* k8 p' z6 G( \* G7 r
    //for(i=0;i<1024;i++)
  _3 E; [: I) k  h1 Z( \  b. g4 s9 n, o    //    temp=0;
) ^5 _6 {+ y& u' i, a
9 y1 K7 |) L! X- L+ K7 B7 \    //UPPReset();4 ^& f0 H( B" X
    /*启动UPP DMA传输*/9 x5 G' o: K& h
    UARTPuts("upp_prog_dma_i\n",-2);) Q4 o, `; c$ L
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- Y5 c' B3 v. s* v4 p6 O. `    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);0 q# f5 _6 H& u( Y, }, a, B4 W+ M0 d
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. }8 W# Q3 u$ r2 a
# g1 G  A/ K  b+ u: C4 o    UARTPuts("upp_prog_dma_i\n",-2);
- Z8 Q, A; r: u; I    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;; @- f' Z4 e. N+ e7 t5 P, p8 P
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 S$ S! z% L- s) A) r    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 F  u- C6 f5 [* `% {, R& M$ t" J4 Y  u
    /*等待UPP传输完毕*/9 Q& I! U! {4 s: \/ x! f( A2 @' n
    //i=0;
0 a4 f- d% X" V/ F9 X& I    //j=0;  r# A1 I9 a4 ]4 ]$ M2 w
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( H, f9 z; a7 J0 B- a    {/ N7 n8 N5 D8 ^: k  l- v1 u
        /*  测试UPP传输的同时操作普通DDR数据
7 F' d# s, I. E1 `        temp=i;+ r: w5 A& N2 N( O/ x7 R  t
        i++;  K- f3 i; S- y* `
        if(i==1024)# P: L. V8 a5 |1 s  w$ f
        {
# Q" D- T# {/ V/ x8 N) V0 _) Q            i=0;) J, X5 v1 u( h: h$ \
            j++;
# D# K  s. w' X& }        }
0 v! {1 A2 z; G* c9 b' P* \        */
- O- Q  t+ W" D
' u8 C* F1 Q# C' d( C- M  }, M       asm(" nop");3 u  d" x0 n3 d+ s$ w

) Q' ]+ x4 E! g! X: e       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);8 [$ g2 I/ y5 e3 q' Q" K
    }- m# [; `: U+ A3 I% [. M
+ P: i  ^; X- T* {8 ?
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
& g, m( q+ R2 z& o& O1 P4 j! G2 X    //UARTprintf( "i=%d\n",i);
) N/ K* x1 W8 ]8 ^    //UARTprintf( "j=%d\n",j);  @) f' L, r2 y
    UARTPuts("Data mismatch in buffers.\n",-2);+ e" \; v) L% I
    if (upp_interrupt_count == 2 && upp_error_count == 0)
4 p: y7 i( V' o2 b' P    {
/ j. Z4 t3 x& |        for (i = 0; i<upp_frame_size; i++)
2 ^7 ]2 s- A' s2 T+ J        {
( U' _2 n9 F0 l- \6 Y7 t            if (upp_buffer_a != upp_buffer_b)
4 b- D2 O8 x1 \, W# K            {
0 B* X/ _/ g0 v" A7 l7 k: N                upp_error_count++;9 A9 i' T. j2 U7 s
            }" l, @7 K- G: }
        }
  v0 @& k0 b, M% k2 ?0 w; g    }3 F! `' S: L. b6 M

; E* R- E+ F. \" V! C    /* 报告通信结果*/: g+ ~* y, J6 r$ t
    if(upp_error_count != 0)
0 D& t' b* N7 L$ Z" q, Q' q        UARTprintf( "upp_error_count=%d\n",upp_error_count);" W: o+ S6 [6 u! E* c4 Y
    else+ \: h" \- W; W' \. f4 j
        UARTPuts("uPP transfers complete!\n",-2);
& w6 L" n, ?' ^! O  g) A4 I/ W1 O2 S9 O- g, i- U. U: E
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);2 I0 {1 m/ l! V' r
    UARTGets(ch,2);) ^' o0 U! T+ P0 I# c
    UARTPuts("\n", -2);* P7 F8 w4 X1 a3 D- N- }) M/ u

: |) s( M: i- G- X. q    if(ch[0] == 'y')
! n, r( e7 ?$ J' B. S6 N- W7 a    {
6 I9 H! a& u, Z2 t        /*打印全部读到的数据*/" E/ |, p/ R3 m2 a" Y" ^; V
        for(i=0; i<upp_frame_size; )0 A9 y: \( I: b3 Y4 O
        {7 o" ~& L5 Q: O
            for(j=0; j<5; j++)2 d  L. m3 k8 b
            {% s6 X8 h) e, ~8 ^
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);: l! o. }/ O% _$ P6 y7 A4 S4 N
                i++;1 B8 t- ^0 G9 @: h
                //if(i >= 4096)
' F( h5 S3 C* y3 u                //    break;' F1 Q. \; D  C

- @# n" I% D+ E" \  O( Z            }$ o6 X/ H& |" }( b
            UARTPuts("\n",-2);; e- E0 |# L& u/ }, E
        }5 q* e" P3 Y. k( u  g5 u( a3 ^& x
    }& x$ T$ Z  w2 o# M. P& [$ `6 ^

' V, q, T' Q* G" K. Q4 m4 Q+ O% J}
% o% s; w* X$ w1 ~
0 U  ?' S! b# @6 l0 K. D

* O! V+ x0 u1 `: w+ n" q0 q
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
  g3 @" A7 {5 ^. n- q. s  ]7 h
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ z* K( c% K' s9 t) p/ b




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