嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?( a5 w. S1 {) {' i7 {: |9 l
Void UPP_TASK(Void)
1 b( T" x. F1 z{
) v; t/ E, `. T) {9 o) f) l
# i: ]& }! v7 g    int i,j,k,target_int_count=2;
2 U5 r* `; N% @    char ch[2];0 k! x1 }; X: h1 c+ C7 `
5 S( l: _- X6 P# P

3 y1 H; w& @/ B  M7 i$ u
2 w! Q4 N2 r5 T0 X: b: s    upp_interrupt_count  = 0;4 |  u: M* D! z$ W$ g. r* r9 @
    upp_error_count = 0;/ ^8 b% i4 \9 \' L
5 X' Y8 h5 u) X8 W/ O
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
8 {8 X. U% q5 W: Z, o    // Initialize data buffers- ~6 O$ N+ U9 R
    for (i = 0; i < upp_frame_size; i++)
: \# u. b" k' f3 [( M    {
. ?# Q/ v- U7 T/ I       upp_buffer_b =i;6 l/ h5 M2 C& l: u) ?
       upp_buffer_a = 0xDEAD;
- ]6 f0 f. i; T0 F    }
% {1 X7 O9 M: c: |# C: M
% d" z" t0 W* ~9 i' i    //for(i=0;i<1024;i++)
* z- z% ?, ]: `1 R9 }% A0 P    //    temp=0;
$ B" H5 G) h: I( J9 f7 M, l  F
% |- u; W. A, n; g4 z+ ?    //UPPReset();
  W0 I5 j6 V$ `, c    /*启动UPP DMA传输*/- D; r5 ?( P4 d
    UARTPuts("upp_prog_dma_i\n",-2);# S' S8 f$ x9 p  k* u* v' c/ N; U
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;4 r  X# c% v# g: F5 C
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* E( s3 Z* R, R" ^6 i0 l2 V
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);$ ~' k8 q. |  y" e/ c0 W: i5 ^- _' q
" f9 \- v& T- R1 Y& x. U
    UARTPuts("upp_prog_dma_i\n",-2);  P: X0 l4 |( p; X# ~
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" B# r- p) z) m$ ^8 W' G1 E, B    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);7 A  f" r- c4 r0 t' a8 e- @% o3 }3 B
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);- e3 G# I! K0 R. k/ D- \

2 Q8 H  i7 x5 @3 P8 d. [    /*等待UPP传输完毕*/
- m& n6 w8 g' h# g, j: j    //i=0;) \2 o. k( o3 g  ~: e( X
    //j=0;3 @% v* h, q8 V  N% n
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)' Z3 ?% L0 E  e& {! e
    {- W) j) l" K3 P& }1 c: ]7 D
        /*  测试UPP传输的同时操作普通DDR数据
/ ?8 ~, }; R/ o6 j. h& i        temp=i;
0 V% N7 U0 l5 p  [7 x- U        i++;
$ c) @2 E9 K) ]+ B: ]        if(i==1024)/ q# C0 ?* C% B0 d
        {
* h/ `, o% O( |+ U9 B            i=0;
% X. N7 c2 B! x7 q8 t            j++;5 r6 j' i6 a* }1 T+ D
        }/ T9 [# J) m9 r! a+ W" \
        */* a* M( [# \! h4 B4 p  }

; ~: V5 t$ c4 y# b       asm(" nop");6 F! [/ [( @( Y% w9 K2 v, v' [) B

1 X4 T4 y7 w6 D) u6 C# n" i, |       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);0 B' ~- D: q# k3 R7 E
    }' K$ J8 W0 ?% x2 Q8 m, T+ V* e0 T4 |$ q8 y
! G4 B6 ^* ~0 C' I3 |- e5 _! v
    /*检查UPP传输的数据是否正确 (loopback modes only)*/+ T  @) n1 O1 u& }5 I- b& {* M- C
    //UARTprintf( "i=%d\n",i);* T. k0 U& M, J9 g% s' y
    //UARTprintf( "j=%d\n",j);1 B5 S( z! o0 i4 E+ w% V5 e# b" ?
    UARTPuts("Data mismatch in buffers.\n",-2);7 ~) L, [3 W4 M: X- U
    if (upp_interrupt_count == 2 && upp_error_count == 0)
9 T- M" Q3 D8 p( L    {9 u" s/ V9 r0 h. m. F- f- ^
        for (i = 0; i<upp_frame_size; i++)3 y6 Z2 u/ R$ R! a; D6 [1 m9 c
        {
- F% x/ F; v9 y/ W. x% g$ Q            if (upp_buffer_a != upp_buffer_b)' `  K; v0 w7 y' U+ L1 t
            {2 O1 {6 ^, f) o. T
                upp_error_count++;4 Z4 V1 N1 G, L6 j, {
            }/ @7 _6 m* V6 o# D0 l+ g
        }/ N- ~: D8 n! i4 s8 i% U
    }
0 h. y: u4 q% R5 l2 ^6 w# h  R" v: Z+ S. ]  n4 o& y) p( m! j5 v
    /* 报告通信结果*/
! j( M$ d, L) W    if(upp_error_count != 0)
  i3 w5 |& H3 d& [: \# y        UARTprintf( "upp_error_count=%d\n",upp_error_count);6 G8 i& F! w* S, u0 h! h
    else
  T7 z' k3 m9 s0 _        UARTPuts("uPP transfers complete!\n",-2);
" ^$ u) o0 ]) |  Q3 F) q& i+ z
4 R7 N- s8 `8 w    UARTPuts("Do you want to print all the data?(y/n)   ",-2);* S8 ^$ p$ e! I: f) G* K# _+ _( r
    UARTGets(ch,2);+ @& p, t" b6 z! `+ N! p0 c
    UARTPuts("\n", -2);
4 R& L: r1 N0 k. R, v5 j
8 U4 L6 z- P" e1 s8 ?  d& s2 \    if(ch[0] == 'y')
4 u2 W6 q4 m* p6 r  @    {8 J* N+ ^' \: z7 U/ d: r  N
        /*打印全部读到的数据*/3 s6 Q" N) [" G5 O
        for(i=0; i<upp_frame_size; )/ q$ x3 \6 h* F( z1 D) K" z( c
        {; D8 t  f* c/ F* ^# q8 N
            for(j=0; j<5; j++)
. L* k' R, ]: o8 f& Q; G) F* R            {: ?+ U2 N& ?) B5 ?! a6 X& N0 r
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);: h3 _8 L2 G/ C3 R5 l1 m
                i++;
( w& @& B5 g) u0 y9 o3 s                //if(i >= 4096)1 J9 R5 A& V+ R) U  q6 s
                //    break;% R& x1 L0 |0 N7 U- h% b7 V! r, g  J
+ b9 h1 m( K( H( j1 h
            }
' V- @$ P+ u6 K# ~            UARTPuts("\n",-2);
7 ?& m) p! q" X; A1 R0 q# @1 l        }
; t% Y4 q& P$ h  x8 M    }
! R2 k8 M- K, r  G! H
8 g( m7 C8 y3 @& e0 t; h! Q}
  x8 q+ H, U6 k4 L
6 r7 U% K: Z+ c3 H& a
1 z, G- H7 w# ?# d- k

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
' p8 h# g/ i' X( n- g" r( u- h
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, a2 G: @7 T# v! q




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