嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
7 f: S% l1 s, @, n
Void UPP_TASK(Void)
2 ^$ v/ S- ?- V{8 K5 o, K4 J* F9 ]' m. _
- P5 Z7 R+ ~; [: ?* J
    int i,j,k,target_int_count=2;
" P$ B" l+ ~# n    char ch[2];
4 r  A# S0 b8 J0 q9 e% G
: K/ e0 j$ K1 ^! ^! x9 s) g8 [, L$ o* e* K  `7 ^

& J; K8 y. B. L+ A, S+ e. z    upp_interrupt_count  = 0;
7 J+ M( W+ h/ n4 m6 p8 }: N3 K$ T    upp_error_count = 0;
6 l; R5 {  N/ |" z% d
, A  L! q1 G4 l, @3 W- c: k    UARTPuts("\tResetting uPP buffers...\r\n",-2);3 W7 D+ O3 |6 G( @
    // Initialize data buffers# ^) D7 `8 n; H+ X  f( c- {7 ^' p
    for (i = 0; i < upp_frame_size; i++)5 u: K9 F# I7 J- N
    {! Q* c4 r- u8 Z8 ~- d& ~7 }
       upp_buffer_b =i;
! i4 d" f( ^+ k; l* ~8 F       upp_buffer_a = 0xDEAD;+ b1 Z. J% ?+ e3 B
    }
: A+ B3 d8 `' ]  F8 c, b# ?/ \, [! ~" F! W
    //for(i=0;i<1024;i++)8 O7 l3 ]1 K2 v5 ?
    //    temp=0;
0 G# @7 l. r4 T  |
; H, U9 L, D/ c2 N' ?; a    //UPPReset();% I) }: Q  ?. G& K+ m
    /*启动UPP DMA传输*/# G  Z! M9 }1 M7 V# {. p4 s
    UARTPuts("upp_prog_dma_i\n",-2);7 l" u! M8 `" T; C6 }4 }
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% z% X& n/ c: o% Y    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);$ l# a, R+ M: t
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);5 }3 G) ?: ^6 k/ k1 [

3 `! y, f- O0 e( u    UARTPuts("upp_prog_dma_i\n",-2);
- Z7 N5 P& v; W  g9 A& k, d0 e    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
& V/ l$ l* q( @    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);9 p7 x/ [& M* ^- f9 W8 A
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; s7 k: k/ u; T' H: G7 q7 |4 Q, O% k% ^) i2 `: |0 ~) }% J
    /*等待UPP传输完毕*/0 r/ w4 V4 C. N; t0 E
    //i=0;
1 b" Z& r  A/ l3 r2 I- O' z9 _    //j=0;2 S/ U1 Z3 a% X. [- U5 ~+ U& E
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)2 y& h7 n( l" b+ X
    {
# D5 h" `, ~8 k# Y        /*  测试UPP传输的同时操作普通DDR数据+ Q) D+ I# M) H/ m
        temp=i;
/ W1 L; M5 Y3 G2 \        i++;
3 P2 g; w# `* L, o' R        if(i==1024)/ D8 l& Y8 c8 {- `; ~$ f" _
        {4 ]3 `3 p2 s! T! F6 E
            i=0;$ }. |8 _4 b/ o. N' D% ]+ w2 P
            j++;( ^1 i- d+ P# g" E# X5 S
        }
3 {% T8 k( u" o% @4 _        */) X' }- Z- C% i* C6 D

% w( S9 u+ b( ?       asm(" nop");
" e+ v* G) k& z. o: X# E. C2 a  p& \4 ~1 g5 e
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
: ^2 v  X9 N. C    }
$ N: w; V: M; _/ }$ L
8 a3 k3 K& U% Q) x! f: e    /*检查UPP传输的数据是否正确 (loopback modes only)*/7 ?  k# e1 ?/ @4 v
    //UARTprintf( "i=%d\n",i);# b* X8 {" c8 @) m* s$ T* d
    //UARTprintf( "j=%d\n",j);) K" y3 U; g4 g  g4 D8 D
    UARTPuts("Data mismatch in buffers.\n",-2);% Y3 U* J7 V) o5 e" N) @  |5 D  P
    if (upp_interrupt_count == 2 && upp_error_count == 0)) {8 N+ m  l% _4 j8 b4 a: C& t9 n' b
    {6 D5 A; q7 Y+ E/ l8 t
        for (i = 0; i<upp_frame_size; i++)
. H$ M, V: A$ f+ g, B        {( |( U: w. D0 t7 }' j2 U
            if (upp_buffer_a != upp_buffer_b)* S6 s1 C; k& K' q6 [6 w
            {
' g5 s) f' V  l1 P! B" e7 l7 ^& a                upp_error_count++;
6 O& P7 T. L7 b) t" j7 i! u% y5 v# x. o            }' O& }2 _& `. x; q: u2 m; ~
        }. f% e  b  E( p) v
    }' {# h7 u7 Q  G3 v5 d
$ f! d5 R  a0 P/ x, T
    /* 报告通信结果*/- D, t- n% I! T( R- T$ \
    if(upp_error_count != 0)
' J6 ~: s8 w2 l8 n. p6 G% b! q9 Q        UARTprintf( "upp_error_count=%d\n",upp_error_count);/ o1 H5 c5 T; x6 \% x' R* ~
    else  v8 _1 K: l$ }4 l# Q
        UARTPuts("uPP transfers complete!\n",-2);
4 k' G; {, F. J# O8 Q( T* c+ l, G7 L) q+ ~( ~$ `
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);8 V) w( V* ?5 ~+ u3 b0 g' \, M
    UARTGets(ch,2);. d7 l% z2 S# B( J
    UARTPuts("\n", -2);
& f1 s, ]7 S1 [% S; N0 D* [: K' q, K- w3 o& l' J
    if(ch[0] == 'y')
: M! g7 e! Z# [; p& I3 G% h! G    {1 d8 p. m6 u& C2 Z  Z$ i. W5 G
        /*打印全部读到的数据*/
) E. p: r" G/ Z6 w; y        for(i=0; i<upp_frame_size; )- t( |. d$ H4 a) O
        {  S& ]1 N) m; P- v
            for(j=0; j<5; j++)( e8 A' f3 p) l  o( k8 C
            {1 s$ X* S* d# ^2 b8 N
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
& o8 ^- `' \! E7 |! L! n8 S                i++;
& `' W% T* D, `  g( v                //if(i >= 4096)9 X$ {) `; o8 ?; P- M- b
                //    break;& j" Y' g% x( \0 a
, h2 j, ?' S7 B. n! u# V
            }
6 N9 H  H  f! U1 M1 _+ ~9 c2 L            UARTPuts("\n",-2);, S1 b6 C9 v4 Z& F( J
        }
/ G" v/ w  j% o' z% v) V, D( p% {    }
# H; c/ |$ v- O) j9 K
4 o8 y( e: n6 b}

. A1 K, b) [$ Q  \6 s2 e
& i4 d" I( M& `  j$ P

/ R$ M, R  W, _* t! x
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。8 H' `6 s3 k6 y6 l) K: T

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, s* e7 T1 P3 Q1 Q




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