嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
! e- G, i+ \; Q
Void UPP_TASK(Void)+ |# q+ q- D6 m& }
{3 ?' k- ~/ H, {" M5 ~

  R7 o7 Q3 _/ |* U5 A. c; k- {    int i,j,k,target_int_count=2;
6 }' @- G8 u2 ]3 d) x! Z/ D% X# c    char ch[2];- r: C" J  i+ N' H6 I+ `: P

% Z8 @% S* T& ]
' y, ?! [# I. [1 j% [# P6 O" {3 t; a
    upp_interrupt_count  = 0;6 s& f. E3 L: p: j( g3 P/ b4 W
    upp_error_count = 0;3 v3 b9 h) {* z0 n/ X
9 F3 g. v6 j- p& H0 C& z
    UARTPuts("\tResetting uPP buffers...\r\n",-2);* P: L4 t9 L# b- h6 K# k
    // Initialize data buffers
' t9 A# p7 R: I    for (i = 0; i < upp_frame_size; i++)
) C9 a9 n) I  ?6 G6 @    {& |; G3 p4 o# C! n, \6 A6 ?
       upp_buffer_b =i;* x! l. N+ i, K" ]% C0 m7 {
       upp_buffer_a = 0xDEAD;
0 J/ }- Z' [) c' _    }
( h6 I! A# A3 v4 J; r9 z" b' [4 s& A7 f3 r6 A
    //for(i=0;i<1024;i++)
: o. n' {8 M# i: y* b4 v7 e    //    temp=0;
' H7 k) [; u1 ^
; w$ m5 t8 ^6 O9 P7 y, Q    //UPPReset();, b* j# w* F6 {  ]4 ?  P
    /*启动UPP DMA传输*/. x' |& K; d$ w7 x
    UARTPuts("upp_prog_dma_i\n",-2);1 C4 u# C8 t8 o7 W- P" x) G6 e9 y4 M
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% D  F- }& J. O( l    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( _# [8 t8 W; E" P    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);, ?7 _5 U) B' M, O

, D9 y( s2 j# C: Z' t    UARTPuts("upp_prog_dma_i\n",-2);; J$ v# D7 j* K0 w3 j& }
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
& e) _7 W! u" a8 H% P/ \    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% n# O& _: H/ g4 K- P    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, }" S5 ]& D( a% z+ N. N4 A1 d* h) p
    /*等待UPP传输完毕*/( h! k" b4 Y0 Z2 U% M2 `
    //i=0;& i6 |7 D4 m0 F- Y
    //j=0;$ C* n/ S# x# B' n* y: O
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! M$ j) H- w; c! n& N) n0 ]) B    {
# P+ L5 `, j4 L6 t6 `7 t6 k' F        /*  测试UPP传输的同时操作普通DDR数据* m9 f3 x4 v3 h2 j7 N" ?
        temp=i;
% x! a+ g( i5 [' f+ r        i++;
( f2 F1 q( _2 h2 L2 E/ P; [        if(i==1024)
# F% s3 }+ }8 m" j* J        {
9 @% O* n2 z1 l+ s  P- L5 w            i=0;
. q$ m4 o, o' x1 H            j++;+ a5 R0 M) S: {; k1 f4 j
        }: E& I& j( h/ W3 X  ^6 b! E
        */( z4 n( @# c! w. F
* C2 ?" p: D' o+ t5 o, f& E" c
       asm(" nop");! P1 O0 U8 O& q4 G3 g) h  K4 j
  x$ Q2 C1 X! U9 n0 ^  S( L
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);7 L- U) h" h, {7 P! ]& `" ?
    }
) F5 K0 V- N- ^0 O" y$ Q& U$ M
9 _( K( p& x6 d- @% R3 ^$ S    /*检查UPP传输的数据是否正确 (loopback modes only)*/6 e& \! ~; x# ?. Z
    //UARTprintf( "i=%d\n",i);/ u2 v) }7 I! W7 u" _' m8 ^
    //UARTprintf( "j=%d\n",j);
$ h% J7 H2 g- V- k* z* T# y    UARTPuts("Data mismatch in buffers.\n",-2);; D) R3 Z8 J" c! H5 O
    if (upp_interrupt_count == 2 && upp_error_count == 0)8 m* C6 Q& ]) `/ Z4 [
    {
, X) `& @( z' k% |8 ^; r8 ~        for (i = 0; i<upp_frame_size; i++)
% [, b# W3 Z/ g/ A9 o        {
$ C: ?$ n, z4 n8 S& h            if (upp_buffer_a != upp_buffer_b). j( o8 K: P# l* j0 y% d) q4 J
            {! {7 F) C% ?4 _1 W1 s* c3 w$ Q2 V
                upp_error_count++;$ ?3 {2 m" S1 F- ?, N) s: _3 q
            }) ~# ?; y' f% ?5 O2 M
        }
* S' ]9 z5 O; F* q  E1 I+ h    }
& v" I7 u. z) k; B
& w9 z+ N) ^) F% ^* y6 ?    /* 报告通信结果*/
& r8 `$ i% }  C2 |4 M    if(upp_error_count != 0)2 j! j9 D2 ^+ W& Y0 c) ?
        UARTprintf( "upp_error_count=%d\n",upp_error_count);; `1 ~7 A- X7 t3 J
    else
0 t: h) r: {- q8 W5 L4 {$ a9 q        UARTPuts("uPP transfers complete!\n",-2);
( O: ?2 O+ ?+ q
! N% p( D7 Y) k    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
% q* V3 k) m5 \7 u: z6 N' w    UARTGets(ch,2);
/ e+ N5 J; s2 A, ]; L    UARTPuts("\n", -2);: E9 \% r, N, ]3 W1 j
5 M; i& {- M+ S$ E: V, w' s! a9 W
    if(ch[0] == 'y')  E  w7 F% R5 [0 I% u* J" c  e
    {* M, y  ?& F0 f
        /*打印全部读到的数据*/3 Y: w9 ^7 _0 K1 [
        for(i=0; i<upp_frame_size; )
4 L0 U) B% c, M6 Z! O        {
5 h; U# e) {$ c- [' ~# x            for(j=0; j<5; j++)
! G0 C! o: R0 C            {2 n# Z0 o; [' Q& k0 j% @/ f8 W% A: Z
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
1 |4 A* a' a# G) q; {2 |$ O0 y                i++;
1 a' b1 s3 M4 o& H. J$ [7 }                //if(i >= 4096)
3 I4 k4 B4 J9 r' U3 w+ r                //    break;
+ H2 i% z" n5 F4 Q: X
8 e) }4 ]9 h3 q            }
) A8 B* i/ }2 g0 \2 o            UARTPuts("\n",-2);' w7 j8 @/ {9 |2 v/ P, ~
        }  v% N3 q, V! V
    }2 _) p$ f! V8 o3 a

7 g+ o% V! o, E1 b& Z5 S}

2 z- N8 a2 |7 N7 z( a7 L

! @5 _9 i0 }* ~7 ~7 s2 y) k3 Z; N7 F6 |

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。9 x$ A' ^/ D$ }% l

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。8 o2 s) P: Q: J3 |; o7 s4 B3 g





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