嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- m. l; v$ {% S6 ]) _; X
Void UPP_TASK(Void)
! c* R3 F: Q( [* P0 b{& |+ P9 U/ D& S, N4 N; v

, B4 C' \! f3 G7 W  A    int i,j,k,target_int_count=2;
2 O- o9 B* \  M" C    char ch[2];) [& S$ k9 U7 \; x$ ~) P5 u. W
7 M- x1 R% O9 h# h+ t- c- z% k0 \6 f; ^

; O8 V- o# x* @0 O' P8 k
. S/ Q- b: u5 r) W2 ^    upp_interrupt_count  = 0;
3 r# ]* S3 s; _; v: ~- x    upp_error_count = 0;( g( \% @! C4 u& Q) ]+ @9 }( k

$ c( b, F/ O2 W; l2 b$ p6 j9 f1 C' \    UARTPuts("\tResetting uPP buffers...\r\n",-2);( I9 H2 a6 m6 o7 V' L
    // Initialize data buffers0 H( z& V. ~7 N
    for (i = 0; i < upp_frame_size; i++)) o6 y1 G  W" O- Y
    {( e) {6 Z( M2 ]! L" [0 H
       upp_buffer_b =i;
) |: P8 N( V6 O" r! n1 K       upp_buffer_a = 0xDEAD;8 V2 T4 X* E& b% g5 \9 h( P2 t
    }
( ?& n( d+ P' C
# x; n  G3 A: p7 ?    //for(i=0;i<1024;i++)7 `( Q4 Q1 n) M9 d2 s
    //    temp=0;4 Q# J# b: K+ n) f# I% g3 g% ^2 I9 j
+ q. t# F9 M" f1 r& n( {$ l
    //UPPReset();
5 k1 F" g) q. o    /*启动UPP DMA传输*/
+ s1 j! l1 Q6 |3 g6 z    UARTPuts("upp_prog_dma_i\n",-2);
+ X: A6 N! {9 y% m    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;. E. m; j# B- Y& `8 G! {7 D  |4 q! J
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ W& [) G: H: C3 r1 i! c    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
/ a, K3 Y. Z7 D7 x3 S
) d2 I- m7 X/ ~! ]& t0 T# R    UARTPuts("upp_prog_dma_i\n",-2);
( X4 y* {" K4 z* W    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( m. V0 ?% J/ ~  W+ d    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);2 ?' Q/ U6 l' r0 g6 _* ]
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);) A* s" F1 M2 M6 ~6 T+ D5 X0 I% }# [3 M

8 V; g8 J! @6 n) y! H8 F    /*等待UPP传输完毕*/
3 R- G1 I' m; _& p, E    //i=0;; W2 [& Q6 A; g; }% d3 T3 w% g, i
    //j=0;
; b* ?, F8 }7 U9 z, o4 @, V, p    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# a2 H0 ]5 t7 L    {
. u. Q; w, m- f) I# k        /*  测试UPP传输的同时操作普通DDR数据8 t$ ^, t# ^: ~% P  G* f( q
        temp=i;
0 g1 x7 U; V' N+ u        i++;
' D! ^$ F& P8 D" T( v: F% Z# j        if(i==1024)
) A* j: L9 X! r' P8 H8 A0 ^        {
% S( T; z; L! Z) @# n4 _4 K            i=0;
$ K4 O& q! n- B: b/ X# K) k            j++;- b) X" ~; @5 Q, R
        }; z6 O! v9 }3 R+ ~8 m
        */& L% s: y# {" |1 @# R8 y: \. v) `
* m4 e! \$ D  D4 b2 L$ n
       asm(" nop");
, }" R* H6 Z+ ~( s3 E/ ]6 x7 s- }
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);9 j- m4 ~/ m$ b9 t' S8 q  d% o5 S, ?
    }
/ x6 ?2 d; S' y6 _3 Q8 E, G8 L0 u, O, K# J2 b
    /*检查UPP传输的数据是否正确 (loopback modes only)*/9 Q9 b8 y& z9 c$ ^; ~+ M8 G0 U  r
    //UARTprintf( "i=%d\n",i);, P) g% `# u  ]/ w
    //UARTprintf( "j=%d\n",j);* f! o. o4 ~- E. s: ~1 y" ?
    UARTPuts("Data mismatch in buffers.\n",-2);) k4 S0 x' n7 b" N" z! C
    if (upp_interrupt_count == 2 && upp_error_count == 0)( V% W2 C. e7 x9 n. }" M0 v2 p+ C
    {
1 I2 t4 [2 d8 N" d+ u) Y4 j        for (i = 0; i<upp_frame_size; i++)  T  s& ~6 q; X) @
        {0 p- A4 k2 A( z( U$ {9 o
            if (upp_buffer_a != upp_buffer_b)
$ k/ s0 s: \5 D: j& R% S            {' ]& Q) {* W0 \1 {! |. h
                upp_error_count++;  X9 g8 h9 l: Z) c9 s
            }+ W  l6 W6 @( a
        }+ M/ T5 x  N5 _# c
    }
% D& z$ t  ~/ @% N8 j8 k" l
8 J9 p! s- n6 y$ E    /* 报告通信结果*/
; I' W  j: [4 f/ h# c* I    if(upp_error_count != 0)
: q( S* @) u  {& U7 C        UARTprintf( "upp_error_count=%d\n",upp_error_count);( C4 x: c, y9 O
    else
9 K1 s9 c9 M2 b        UARTPuts("uPP transfers complete!\n",-2);
; N/ F9 k2 T' X, i2 p4 Z: k! ?
+ {1 e4 K. k; g: x" w    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
8 t3 J' w: d4 C# i( E    UARTGets(ch,2);
8 ^% }) C6 u  T' }' i    UARTPuts("\n", -2);& U. v$ H: j; j( D' }

5 L# B) ^1 Z; ?3 v7 ^    if(ch[0] == 'y')
% W  W* B6 G2 r! b4 l    {
3 u/ x, Z3 E0 A        /*打印全部读到的数据*/
, g7 V: o; s9 \2 s. ]        for(i=0; i<upp_frame_size; )
+ T6 ]! k1 i5 s5 `, W        {/ Y9 {6 ?6 E9 d; r1 g3 ]
            for(j=0; j<5; j++)
* I2 j6 l) u* \0 a- C            {
0 P, I/ d% j/ B; h. H                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
& L7 x% B: ]- r                i++;
6 D& u, ]& V( k7 e8 d                //if(i >= 4096)" [3 y: _. z5 X1 H3 c8 v0 s
                //    break;, @# @) t8 M, @9 n
/ t, o# a6 \) Q/ v
            }
. f$ j" I! Z1 ?; i$ Y            UARTPuts("\n",-2);
; j& @/ S4 [( I6 j$ _: o        }
4 [! u4 n9 i( Z) U7 J! B" @    }
/ `% h4 a% z  L; Y
9 ^0 ?8 g& m! A( J}

. ^+ L" w9 i+ \9 d: B" c
  l8 R+ c( v% Q/ \) K

' \% P2 ]  @5 G* M2 j/ H  V" Y/ U2 b
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。( f, v% M2 d, P' f

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。- w% X5 C+ D# Q+ t! R





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