嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?% ~  J" {7 L+ q+ e+ l
Void UPP_TASK(Void)
- r4 F+ Q: z/ H* B9 h# o  A{
6 [2 B) ^8 f* C2 Z! B/ g4 I# K+ `; G6 }
    int i,j,k,target_int_count=2;
, r8 h3 n# l  `- z    char ch[2];
, m( R" H) G6 Z" ?1 s* C
- e/ Q+ j2 I3 A8 R' k3 Y. K# `, o9 S* ?7 L1 b. y' M
+ {. g/ D  I1 u% B
    upp_interrupt_count  = 0;
9 i7 i, |1 b* _: a- g    upp_error_count = 0;
/ X. y/ z5 P. ?% e8 W0 h# i, p
+ K! N. @+ }- ?( A8 [    UARTPuts("\tResetting uPP buffers...\r\n",-2);
- I! o" h2 O, r. K% F    // Initialize data buffers/ k9 m: Q. w: U% v
    for (i = 0; i < upp_frame_size; i++)' @6 {0 D5 |' X; z
    {
% P- H! M3 ?1 W' F  M       upp_buffer_b =i;' ]) u- m, H, q7 N
       upp_buffer_a = 0xDEAD;2 `3 Z  P. `& ]+ x0 @* r2 \
    }& w/ u/ `0 v7 t6 ^3 f5 |

: ~; M: k, x: I( |: P% v1 c& r+ A0 o7 y    //for(i=0;i<1024;i++)
  f$ q4 u/ c0 h$ G; F2 S    //    temp=0;7 X/ x- y: q  q. x

8 L& V8 Y1 a4 ?0 N    //UPPReset();
# n1 H. }! T# R0 e    /*启动UPP DMA传输*/
; d) D$ h! ~7 J  a; ^    UARTPuts("upp_prog_dma_i\n",-2);/ [  z5 }, B4 d6 d! t' i" ~/ F: B
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* `- x# N% L+ V0 @    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 u4 q3 ]5 N! u    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);% I! I& l6 @. g" `+ ?+ D
% A. ^) p5 p- s( u
    UARTPuts("upp_prog_dma_i\n",-2);
0 _$ F8 l5 W; E" V" g1 c8 g    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;" a- b7 f( l- ]% |) R
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);$ o/ _; h/ U' M8 ^- `2 T: J
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);  x, _4 l; b5 j. s' V
2 p2 y. M+ G4 Y- [* ?/ a
    /*等待UPP传输完毕*/# C: }9 G; w' e, N4 |9 e- D  G
    //i=0;, G4 A# J- d0 w/ ?
    //j=0;
5 X+ a' Y$ K" i    while (upp_interrupt_count < target_int_count && upp_error_count == 0)3 E! d' t6 _8 d& W8 d0 x, ^
    {( b: ^" T/ O4 u
        /*  测试UPP传输的同时操作普通DDR数据  T" K1 f" \6 U( k3 _
        temp=i;$ _  U8 c5 ]5 r; h
        i++;/ w, q2 W6 i; k) W# }# T( U
        if(i==1024)- ]  C6 S% |. _* G% S2 ^/ ~
        {9 j' `% ~6 K+ z# \# `  n' B3 ^9 O
            i=0;' b* c( B+ X) g  K9 A) F3 Y9 g
            j++;9 H7 W! A: T6 f& x0 F
        }
  e! }) }$ p" `$ o6 u* _        */7 v9 g) A& ^: @: ]$ }4 D
  S5 R, K& v, X" G4 U. d
       asm(" nop");% A. g. \8 N7 [5 r
9 _1 l& U1 l  Q) r3 e& {
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 A, a7 i  O1 n9 w: |    }4 u& K8 R1 L' D7 `

) ~3 ^: p& z7 f    /*检查UPP传输的数据是否正确 (loopback modes only)*/( ]1 F, b( ?: b# B2 B8 E
    //UARTprintf( "i=%d\n",i);
! K, x" M1 Y! R/ p    //UARTprintf( "j=%d\n",j);
4 k1 D2 @. D$ \. I8 d    UARTPuts("Data mismatch in buffers.\n",-2);9 z* e7 ~+ J0 q( K9 k! g  z3 N
    if (upp_interrupt_count == 2 && upp_error_count == 0). j# p9 k9 G5 {
    {" U& |% {  Q# g0 f" @. P% N
        for (i = 0; i<upp_frame_size; i++)
/ U5 u, @1 Z$ U+ ?1 ^        {; D& L' O7 r8 o  g4 p5 Y
            if (upp_buffer_a != upp_buffer_b)
9 A6 p/ t0 ?2 N& X  @; E# h4 ^            {
- t* H$ @+ ^3 r. Q8 P5 J/ K                upp_error_count++;
/ c3 ~% [9 O# i7 Y( j8 w            }; y) G/ z7 ?4 D* h
        }/ s4 v/ d# L+ F: A3 e: C' T
    }
! U3 c) P8 i0 f6 }8 e& N* k" u# `" v# O& R2 m
    /* 报告通信结果*/" M( j9 d, |. G
    if(upp_error_count != 0)+ O0 a1 M1 }* m
        UARTprintf( "upp_error_count=%d\n",upp_error_count);/ d. X7 C* F$ p9 g% K! E
    else
9 \, k5 r# c- ^' U: w& y/ D- l  ]: C        UARTPuts("uPP transfers complete!\n",-2);
; t5 M* Y) U& G5 |; y8 Y, t* V0 I4 u. R8 Y& |) M$ e$ G# a
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
; P/ }% J8 ]: ~: y2 e" I8 Z" B    UARTGets(ch,2);
2 v5 |0 Z* _9 l! ~8 K% W9 q    UARTPuts("\n", -2);
5 E+ L8 \5 Z' ]' O5 `: B) W5 S7 v( z: {8 f
    if(ch[0] == 'y'), \5 E& W+ ^! A: M& D5 H
    {7 H  {, \, j4 j" V! D6 y( ?" }
        /*打印全部读到的数据*/+ x/ M5 k* L4 v, @# {1 S
        for(i=0; i<upp_frame_size; )8 z* X- }) I7 }! U0 g+ T9 ]
        {4 y8 v* A" O1 |; b% |3 n/ d% l
            for(j=0; j<5; j++)
8 {: C0 f3 [( O2 [  O* B3 F            {
  Z  M$ L5 f( M' G5 x# _* z                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
6 F& @5 j7 {9 p% Q3 n                i++;8 d3 O4 @" R! Z# z5 p
                //if(i >= 4096)
- d6 m7 U0 |2 H) U  @3 E3 M                //    break;
. j. W8 e6 H9 x
" T/ {  s4 I3 m7 u* t! r  _- i            }
/ E0 Q2 u! }/ k( O            UARTPuts("\n",-2);
9 ?- V4 O3 \% D        }' [# Y9 x" [) T3 ^
    }
- _1 z1 A7 z% h  F5 g# T* ]3 Z! A0 \7 l- i1 m) H
}
; C. I) p2 x0 Q9 \

3 f" G8 c0 ~0 v5 @4 h
+ S( i3 J( H9 `3 I3 P
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。! m4 t1 K  J% |' e0 l" a; f" k

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。0 L& H! f' u4 m. j





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