嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& a* e; N7 L4 q4 v: S- U6 C9 e
Void UPP_TASK(Void)
4 l; G9 C5 \5 o/ e, a, A{# e, y. X$ l1 f$ ]: v6 B

9 T" |  M: ^2 d6 |+ z! A    int i,j,k,target_int_count=2;3 z' r6 |6 x" q# @# m% f
    char ch[2];2 |& Z* O+ B# w! W4 n& w. o
& @5 A! Y) g8 @$ H. B
7 b7 V% D: r* j& N" w. @3 n
' D3 l; k, F) |  ?( u7 M
    upp_interrupt_count  = 0;; E& N% _+ ^& V9 u& J) q5 l" U
    upp_error_count = 0;* Q, O: l6 f" M9 S$ G
; \* `9 V' [$ l) @) |
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
: E/ G! i+ Y( V' A/ s& k: _    // Initialize data buffers: K! e0 }, R, m) A7 G8 v. i8 D
    for (i = 0; i < upp_frame_size; i++)" w9 W/ Q6 H) l" y
    {7 l1 k, ^5 H+ }7 W' N2 G
       upp_buffer_b =i;: @, b$ E* M8 s' n
       upp_buffer_a = 0xDEAD;6 `2 {5 x9 A7 n8 A( W& c
    }
/ ~9 F3 A0 u: ?( _8 T1 C& J, [/ L! e9 v# h: R- E
    //for(i=0;i<1024;i++)
) M- A: p1 o1 o/ R1 }% V. z    //    temp=0;
+ |* {3 b- S: K/ Q) N0 p4 n$ @- F- p
    //UPPReset();" R; S: o* [& q2 V4 h6 {+ T
    /*启动UPP DMA传输*/: b4 y7 q3 A  D% s% u0 p( A# l2 C
    UARTPuts("upp_prog_dma_i\n",-2);, S6 B" U% L8 H/ K5 |
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;( u' x9 k- y! o& t! k* ~) A
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);7 S# }0 m! {" S8 \# ~
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);. @& r+ t" ?! w7 d& P8 ~% s
0 j* T/ {0 w! j* l/ |1 y; X& X, E! }
    UARTPuts("upp_prog_dma_i\n",-2);
/ ~# a& o9 J; f$ n0 g7 d, I    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;. B3 B7 U' h4 Y: T+ _: @+ y
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);) Z5 y2 t2 i, s/ N  S% \
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);8 _$ ]% \, M) U! l0 _+ @6 c7 ]$ {: l
& k3 c" n! ^) ^" F' K0 |
    /*等待UPP传输完毕*/# }( ?/ I2 I) K6 y5 a! O2 n
    //i=0;1 u7 W  b" ]0 G) Z( r
    //j=0;
$ K! R+ f. V* s% L    while (upp_interrupt_count < target_int_count && upp_error_count == 0)  z3 v) B1 A# z4 X
    {
3 E) [' O- i6 F% C# o% D/ q5 c7 g        /*  测试UPP传输的同时操作普通DDR数据
- n- h4 i, \! {# G        temp=i;, l/ n; n/ b- ]% d0 y
        i++;
" M) E9 a, n$ B+ Y5 {$ h        if(i==1024)" y) }) C' S6 X* [# H0 ^
        {
2 N/ Q5 p0 @! z9 J# I4 q; c6 r8 Y            i=0;
2 |8 p, f% D1 V" N+ j& ^4 b            j++;
: T: k" T. K+ T8 |" F        }
- N2 U" i  H: V* h4 _        *// X; r! A8 ?4 Y

% x) a. T5 K% w- ]       asm(" nop");
+ ^+ I3 F" M, u+ O" F' A1 n: @+ Q, H3 r# J
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
% z. l/ J" a  F0 z9 L3 g  F3 i6 e    }
2 S. A# e9 z/ `& ^4 p" v5 R+ c0 B  t# E" \- N' |
    /*检查UPP传输的数据是否正确 (loopback modes only)*/* H: w$ X9 @. |( [  B5 j. X: L
    //UARTprintf( "i=%d\n",i);
7 v% u! F# W# V4 k    //UARTprintf( "j=%d\n",j);
/ c' X, C$ M  `9 O    UARTPuts("Data mismatch in buffers.\n",-2);! H" ^: l9 |2 i. E# ^
    if (upp_interrupt_count == 2 && upp_error_count == 0)& w1 p5 D: C* u5 ~
    {
' h: Q7 o! B5 w: _* @+ A5 j' Q& M9 R: o+ S        for (i = 0; i<upp_frame_size; i++)* i+ y1 c2 N) W: f
        {
1 }& B: N' z- i, h6 b; P& O            if (upp_buffer_a != upp_buffer_b)
: g9 `9 B0 e- N8 y            {
, d7 S; N6 |/ C5 Z' B/ h0 J' L                upp_error_count++;, S  g1 L0 n& a3 @
            }+ }% g' D0 g2 g+ v! n0 H: G! R
        }2 t4 J! I% T1 k
    }5 X" a3 ~- H$ j7 L1 X
3 a& u* t$ K, P9 s+ e
    /* 报告通信结果*/
; ^" u& `4 B/ V4 `# ~# D% D' A    if(upp_error_count != 0)
6 U; D4 y% O% _4 O        UARTprintf( "upp_error_count=%d\n",upp_error_count);. C, I) s9 N+ Z: A4 ?; [# T% x: h
    else* e" `% s7 e: |# L  F* t
        UARTPuts("uPP transfers complete!\n",-2);3 u$ e) R: X! y1 e5 \5 G9 ^
) V$ c3 v1 Q1 m
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);5 y5 {% q) q$ ?' w. o' h
    UARTGets(ch,2);
, \: V, W6 f# c; w    UARTPuts("\n", -2);
# _3 ?4 u; a& i! l$ _+ G: J6 B4 E/ ?8 W/ {( }: u& M
    if(ch[0] == 'y')
$ Y& t, l! r$ Q2 x8 S! ~# K4 b    {: Q" L7 [6 E& T, u# w) a
        /*打印全部读到的数据*/
: X7 R0 d: z1 q  j' f3 E        for(i=0; i<upp_frame_size; )1 }9 A4 d  {" |1 S" R
        {$ [0 o- r) r' z/ t3 d
            for(j=0; j<5; j++)! _2 m9 F; x% T
            {0 e% }1 j' Z& v4 ^; s* w
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);# f4 }: Y5 u& O. |. ]: s3 s- H
                i++;  e2 q9 p$ U4 {+ r3 E9 V; P
                //if(i >= 4096)+ V, o; S- C. h# Q
                //    break;
( y0 W! N# d6 L" H1 K- K  `1 r8 m( K/ [; o
            }  d1 i- p2 M& b4 l. E% ~3 X
            UARTPuts("\n",-2);
* R" a. M/ n5 X2 [8 b  [        }
% B" g5 u- F, D3 v5 F5 {! v& a    }
' C* e2 s6 H1 U: D" V
% a- ]  Q0 g1 y0 i/ a8 E9 n5 {' z* {. m}
/ d3 P* @5 F4 g2 h
9 A; v# o1 j. n, i. I6 @) r
) s/ i  _; O" T. [+ ?2 P

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
0 ?1 ?5 j1 s' H: c
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
- `8 P4 T$ H, q; r9 B' x




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