嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% `0 Z0 G7 M' Z/ w
Void UPP_TASK(Void)
. x2 L3 I  k  A; X! f! q1 K% ?{
  V. U7 t. ^& g- c1 A! r/ t+ m
# k) s' i8 @- A1 p0 p. u3 R* E) D    int i,j,k,target_int_count=2;
3 Z+ S$ |* R8 F    char ch[2];" q: r9 K% f" ?! G
3 a1 j* R& y2 M& Q' D- N
3 g5 K# @3 N9 @9 Q
& D5 S& C% I3 x
    upp_interrupt_count  = 0;
+ F- p1 r  O; l8 ~" |! t9 m    upp_error_count = 0;4 z, r( e1 @1 C( j

7 p4 \. j. s0 ^& e* ?9 K    UARTPuts("\tResetting uPP buffers...\r\n",-2);
; _6 i# u) Y. q; d9 r    // Initialize data buffers6 ?; ~) J: R  s( U, x( ]7 W
    for (i = 0; i < upp_frame_size; i++)
* c# u9 R9 u# d& n    {& g7 J( O1 z: V$ y* P* S7 t
       upp_buffer_b =i;
7 S$ I3 w* O. b4 k" i5 z7 N       upp_buffer_a = 0xDEAD;+ O2 W% Q1 h2 L% ^7 F
    }
  Q: s4 u" u% a  O" E) h
( F- l. B$ ]$ x) e6 W: D    //for(i=0;i<1024;i++)
- |  f0 ~& C0 m2 B7 S8 p    //    temp=0;
4 u( p+ s  T+ V. ~% u' j) Y5 U2 K8 V  L8 K. x: }
    //UPPReset();
# D2 c% c  q6 p3 z3 W- K    /*启动UPP DMA传输*/2 s- n8 \6 g0 Z  F. ?: f1 j
    UARTPuts("upp_prog_dma_i\n",-2);
3 E0 {7 W6 R/ C4 I    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;9 t- F) j$ E& i& l) q
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);8 y* Y+ T4 C) P8 e; f9 V  G
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 H8 f9 ~- S; m. ^  w5 i4 ]9 n2 Z/ b, E& t1 _  \) `- y) k& X1 l) \
    UARTPuts("upp_prog_dma_i\n",-2);
# k7 [! l* p0 ~7 p+ U6 _    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;- N: D. {4 O1 I& E3 b* J# }) q
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 j! V1 f4 b1 y2 i6 r! A! x( r    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);! f0 g( h3 E6 J0 b7 |; H

2 @! R5 }) @( |6 V! Y    /*等待UPP传输完毕*/, f0 j& W; a7 \) `9 t" k
    //i=0;  G$ S# Y% y; ]" I) r* i
    //j=0;" U+ K! e! z' j, Q
    while (upp_interrupt_count < target_int_count && upp_error_count == 0). f; N: U/ O9 B9 b+ e+ J
    {
: ~0 w' f: ^5 X" u/ V; N' s        /*  测试UPP传输的同时操作普通DDR数据
: U2 ^& b. M: Q8 t" K! L, j        temp=i;% U  a8 |8 b  e6 j  |* h, T
        i++;
( U% S$ g8 E6 [9 ^2 c        if(i==1024)+ \1 w* b3 R7 N. j
        {( M  g" x, @) A# X7 j) X' v* n
            i=0;- z, ?3 B# u* V' O! r
            j++;
, o+ @3 q% D4 C% h        }/ ]% X: M: D2 Z# |+ J
        */
! n( l3 r3 ?% x% w4 z3 ?5 y% O  s5 d5 Z% y
       asm(" nop");
; A  g) Y$ ^/ C4 {6 S
6 R) T1 d9 ^( o       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);+ S* `( P+ B7 C! i
    }& e2 B/ d# h- S( q4 P" P+ n8 U- Q3 _

% r8 D, j& K: R% R  a    /*检查UPP传输的数据是否正确 (loopback modes only)*/1 O; c" T) x- T
    //UARTprintf( "i=%d\n",i);; _) n7 _' {( u
    //UARTprintf( "j=%d\n",j);/ [$ K" D9 j2 N7 X1 l& x
    UARTPuts("Data mismatch in buffers.\n",-2);9 V7 }$ D, _2 w
    if (upp_interrupt_count == 2 && upp_error_count == 0)2 C) p5 `1 s  Z/ o4 }
    {% Z% s: _) w7 q6 E" V# ^
        for (i = 0; i<upp_frame_size; i++)
; v4 u5 j2 f& v$ o1 o* s# K        {( n4 I5 ^' m+ g- i
            if (upp_buffer_a != upp_buffer_b)' q5 m1 K( f% Y# [9 H( U5 L( X
            {
# O. ~1 R6 r6 a, l) J! Q$ X                upp_error_count++;
, I6 F: _$ w, \            }! i0 @# Z: e9 T
        }3 n# A% T5 v/ x8 ?0 d6 ^5 y) g
    }
6 J5 p2 G8 h2 O" B2 o) O5 a8 G% a$ t! D
    /* 报告通信结果*/
' T6 z" e# o+ O& x    if(upp_error_count != 0)
; G. D2 H4 K9 f        UARTprintf( "upp_error_count=%d\n",upp_error_count);; g) C9 ?$ [: ^- F1 O
    else
6 n: J' {2 H; u: U, Q; Z        UARTPuts("uPP transfers complete!\n",-2);
3 b# \4 Y( J; P8 a* [$ L+ e6 B, N
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
4 \" B2 D$ f5 ^& {4 J9 z& N    UARTGets(ch,2);
0 @$ {0 f3 p9 f    UARTPuts("\n", -2);1 b; i" x6 X- E% M- c
7 R( z6 W! U7 [2 G) x
    if(ch[0] == 'y')# s# K7 B$ K' z. Y
    {5 @- J, S6 B! ^* s+ m
        /*打印全部读到的数据*/
: x6 X8 {2 e# |! n        for(i=0; i<upp_frame_size; )8 K) v6 M! U" T1 y" C
        {+ h- K; G) n' h& T$ n9 ~
            for(j=0; j<5; j++)
1 G9 _  ]8 ^: E" O; t            {
0 v4 o7 q2 ]$ M% u% I' p3 j                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
) H5 B9 d; H9 \/ p: \8 @3 I. p                i++;6 i6 ?- G- ?4 `- t+ X
                //if(i >= 4096)$ M( g/ G* {! ]* C% H
                //    break;
6 Y- _0 d( o1 {& S9 @, r2 |
$ J6 G/ c  P, b' f2 g* L0 J            }" f1 J5 X4 r' i! b5 I9 G4 _# v
            UARTPuts("\n",-2);) {. y7 b; ~9 V8 [. e
        }  C0 _1 f- T# ]$ `% R
    }
5 r- ^$ N' w% }+ ?# s3 M5 J7 x/ j8 w# |9 j1 o( B1 @" H  S
}
, S, d5 u6 U8 p! Q5 f

$ U) o) Z; o; n
7 u5 U9 n9 m) }
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
) U9 _; i  Z: h. V8 {, F: [
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 t6 D2 K' U) u2 ^, w3 n




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