嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
6 l8 C% x4 ]; ^7 Z7 a: g2 @
Void UPP_TASK(Void)
9 |1 S6 ^7 y' z{4 r2 ~- x3 B6 t/ ~$ P. j; P6 h1 r$ v
0 q3 \, t/ o, l! j! _3 ^/ F( H
    int i,j,k,target_int_count=2;
2 p" B$ E) ^0 L. Q4 S1 C1 }    char ch[2];# V/ t$ c2 _$ \/ K! D: J  f% d$ d
; M8 B; d, Y0 U! Z0 x! G% w2 I
4 ~! [+ v& t0 |3 E& p

  K$ b6 {$ P& H) G5 ]+ C    upp_interrupt_count  = 0;$ w- {( q! ]  Q/ G
    upp_error_count = 0;
4 U5 u1 c6 p- f$ M
  F+ y/ X0 e, r4 G9 V    UARTPuts("\tResetting uPP buffers...\r\n",-2);' \0 e7 s$ }& G7 ^0 d, V
    // Initialize data buffers3 W0 P* f4 h0 h3 |# ]
    for (i = 0; i < upp_frame_size; i++)" W% Y! f$ A+ [- s4 W) v
    {# _2 ~6 P1 S# R! o2 `
       upp_buffer_b =i;6 F  Q1 z  K0 r' G( X3 s
       upp_buffer_a = 0xDEAD;
* X( y8 y4 }+ f, _; j0 N1 |    }# h, E1 T4 E) U* u
3 G1 y* B9 P% s# ], ^9 s  L' \
    //for(i=0;i<1024;i++)- @8 P8 I2 x: r* O
    //    temp=0;# p4 l1 ^' w6 ], G: Q1 v
0 }* O1 V5 p# E; q  H' G( M
    //UPPReset();; F' I. I( D1 t( Z8 N
    /*启动UPP DMA传输*/
5 V1 F/ f, C& M/ d    UARTPuts("upp_prog_dma_i\n",-2);/ L, o1 i! ^) f- R8 n9 r
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;- E- p$ y: u! x6 F- _" \8 m7 m% ^
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
  J1 N4 `' Q: T' v, h0 I    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);1 K8 b: Z& o8 P* D
1 f7 M- Q, l. _9 j1 ]! n2 {" t# U) i
    UARTPuts("upp_prog_dma_i\n",-2);/ d$ D2 Z- M3 h1 p. e7 Z0 w
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ B+ k' i, U: ^    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
  a! o, l9 y" ?" F- G% ~- r    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);: h1 f5 @$ H7 Y2 {

4 P  C. F1 D9 _; c    /*等待UPP传输完毕*/# V! c3 ]; H; r8 A  y1 f1 y
    //i=0;$ K* F$ q, B% U- T
    //j=0;) A0 m0 m- O  P/ Q% t% p. i2 T
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
3 t  {' W8 M; f$ w8 P9 @  f7 u    {
7 k8 ]' s7 V4 {/ _        /*  测试UPP传输的同时操作普通DDR数据
' k* u6 \7 v! Z  F6 H9 W* I% T        temp=i;+ v1 q8 W0 N. P% Q2 X; n0 C. ]
        i++;( P+ o3 T$ Y. X% U5 Q- a
        if(i==1024)
! K) L; {# a' `- n5 Z0 Y; T  S& ~        {
+ @: V( j: ^8 C# w- g            i=0;! }7 V. ~# g$ `/ r( S
            j++;( W7 f# w6 L2 l7 z6 }
        }
2 n. `: p4 B$ r        */
/ E" w$ H  @2 L' F4 E3 t) U3 \6 c$ f3 l
       asm(" nop");' g" P; Q5 B) d) C# s  H- A
& ]# D( X, p8 F: u
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);1 [- @0 f" [% M# R
    }
4 L1 [" p1 D$ G, p; Y# K$ O- a0 h
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
% L, W6 P" F  E& @# x) v    //UARTprintf( "i=%d\n",i);' J3 J1 O0 F' {- s) p
    //UARTprintf( "j=%d\n",j);9 @9 O! l6 g# i. o8 ^8 g" p
    UARTPuts("Data mismatch in buffers.\n",-2);
8 |/ m( ?3 F" A  Y    if (upp_interrupt_count == 2 && upp_error_count == 0)4 H+ h/ A& g9 L* ?% b9 R4 E
    {
' v- ^& f" l  q6 i        for (i = 0; i<upp_frame_size; i++)7 z& Z1 S. N8 a: B2 [) u
        {
% w* S0 {. u. [0 P. R3 g5 W5 o: M- V            if (upp_buffer_a != upp_buffer_b)$ t, I& q7 w2 N) O
            {' p7 I) @4 {% H& l, J" Q
                upp_error_count++;
0 I( a! ?! t( Z/ I8 ^7 k9 k            }
" S) j0 h  w7 E$ y5 Q$ b! X# @6 d% T4 a        }8 U2 s, `# t* `% U6 U9 |+ W
    }
: b) f: B( K: F4 b2 f4 O" i! ^% p! g( }- ~) X
    /* 报告通信结果*/
$ Y) A% l7 i" x: P6 Q. f# K3 L# U- Q9 d    if(upp_error_count != 0)
! g# w2 o. ~* P        UARTprintf( "upp_error_count=%d\n",upp_error_count);
+ @. n4 ]) z. @. x5 G    else3 k! z+ R0 A, s. X* P
        UARTPuts("uPP transfers complete!\n",-2);
. P, l2 v! N' ]2 m9 ]% g2 ?! f
% R$ M2 @7 T! s9 v& u2 l  @" @. a    UARTPuts("Do you want to print all the data?(y/n)   ",-2);5 L2 E2 `) J6 c( A+ X
    UARTGets(ch,2);) K  a& {4 V; x; F$ T. y
    UARTPuts("\n", -2);
! b9 O* h% {. b! }
. H. `2 L. ]/ R8 d    if(ch[0] == 'y')
( x" ?* E; A# K    {: Q' X1 s( w; I: }, ]
        /*打印全部读到的数据*/! C5 A  ~, X& b- T+ \$ \
        for(i=0; i<upp_frame_size; )+ m, m6 p4 f8 d' _& ~+ D
        {8 ?. g& L) q% m" z6 I! |
            for(j=0; j<5; j++)/ Y8 y% e2 a3 B* m& M9 N8 `
            {
: f2 \# `6 B& E3 y! B& V2 }                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);0 v: e) i! E! T
                i++;
  `" c$ h# B* U  f7 P% j                //if(i >= 4096)
" r1 Y+ |+ S) M# R5 L/ u                //    break;$ C7 v" w. S4 p3 w7 a. D3 K
( ?- v7 j% W1 m/ r8 l$ r
            }
1 o3 B7 U5 c' W4 k8 n% i            UARTPuts("\n",-2);9 u; s1 z) s" {6 l5 a
        }+ ~7 l* I3 z9 p2 X
    }" L# J" G  l7 K7 L1 z4 J

5 ]% c  k2 q7 B/ u+ P  L}

4 o/ T3 y, w# P) r
1 q, Y! H1 i( V7 l5 U) _  `9 T

# u( p% S5 M/ [. r% B
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。$ k" `. z' A& W. [% o

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 J# t" r" C& m6 y9 u+ T




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