嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?$ q) \5 d  s7 l7 P: _
Void UPP_TASK(Void)
9 h  C7 l. o& W: t) F{2 q" M: w5 b' a9 c$ l, y
8 {$ e1 Q! l: u8 C
    int i,j,k,target_int_count=2;. |/ S1 ~% n" Z# S- y( ]. h
    char ch[2];
/ \/ I  j/ g# [8 W2 \3 {' _1 H
4 T3 N4 g& ~& T9 s; {  Y% D3 K; U  [
3 S- z8 |" ~4 t; L  D
    upp_interrupt_count  = 0;- G. \6 A5 p  d. ]+ G9 @
    upp_error_count = 0;
3 Z3 X& E9 C; E
9 |2 G$ U: `0 x2 c% B5 m% G    UARTPuts("\tResetting uPP buffers...\r\n",-2);
8 k. i0 X* |5 G& u! Y    // Initialize data buffers
; ~- Q, c5 b1 l    for (i = 0; i < upp_frame_size; i++)
* J: L( D" p" S0 }! {1 N    {
, `) u/ G5 i$ Y8 i* X# L       upp_buffer_b =i;$ i9 A. e4 s, u& j
       upp_buffer_a = 0xDEAD;, ~0 j! r; W4 z) c) k
    }
6 V- |, \3 n! f- k2 a! N, e! _4 Q. Q) \; ?& g8 Q! D
    //for(i=0;i<1024;i++)
9 B7 b# v! n  T; o) v- l$ ^    //    temp=0;' S: N. S. s$ M$ K- m
0 P. @+ a( R/ E2 _4 g* i
    //UPPReset();8 I3 O- v3 ~, o& }
    /*启动UPP DMA传输*/
' j, y: S( R! |% C& I    UARTPuts("upp_prog_dma_i\n",-2);
7 ~% {6 U$ j" H$ _9 E% o5 U8 W! {$ W    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;4 S8 O& C' x* X" I3 D
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);) r9 |$ P& }4 I1 ]5 t
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; G/ ^; A; b4 `& ^& Z5 @$ n
0 o: \& P9 y. G2 X3 S- Z    UARTPuts("upp_prog_dma_i\n",-2);
1 A- I; t$ X% s" w$ }( P# W) C    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;, o& ?! m) Z9 {  ~- U- Y
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);) A' S3 _" i6 e0 v  h% U: d
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);1 y8 R/ q$ Z7 v2 [8 ]
8 }" F6 k& l  j3 g  \7 U
    /*等待UPP传输完毕*/
. ~) c* n# P# q2 d/ T    //i=0;! J/ J! L- h' L; K/ {
    //j=0;) y) q' N/ N" L  ?' F4 P
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)2 }+ r; q, E7 V& z
    {
( A; h  x/ Q! D+ I( \- `* I        /*  测试UPP传输的同时操作普通DDR数据
1 \" O5 o9 ?9 J7 s        temp=i;3 h) u( n, A( d( F
        i++;2 L4 a  w6 l; t' G  L
        if(i==1024)
0 l  L0 S3 L2 h' E) m' j' z4 k        {& \0 m  c) f4 t; L, T
            i=0;& R' {, y# B: Q1 h
            j++;9 v1 S3 C1 i9 h/ u+ i
        }
( \; W6 Q2 y' E6 z        */7 J! t0 c6 _+ w* H
$ f1 w3 U3 ~2 D, {
       asm(" nop");$ n7 k6 p4 f6 Q) y8 P* G

0 @. G) b: p4 B) s       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);- T: O9 w  j2 q5 R4 z
    }& Z% u& j5 Y% B- u( U

" T1 L- j& p$ l3 j- y    /*检查UPP传输的数据是否正确 (loopback modes only)*/  Z/ _1 `; P& J* b+ E% F4 i( Y, d
    //UARTprintf( "i=%d\n",i);
* z& m; x/ \+ L1 r    //UARTprintf( "j=%d\n",j);
6 o; e; N! H+ {" Y+ h    UARTPuts("Data mismatch in buffers.\n",-2);3 k( z# S$ V$ O9 t7 @
    if (upp_interrupt_count == 2 && upp_error_count == 0)9 S) d" F6 ~5 O" X: J& p
    {# }. X+ u# V" E, j
        for (i = 0; i<upp_frame_size; i++)  d" f+ Y' s; P) D% A" B+ @3 ]
        {
' \1 ]8 f4 D( L& `2 H8 J2 J5 h            if (upp_buffer_a != upp_buffer_b)
% U  \. E) T% Q            {
  {' m3 b6 g  k6 k; u  B$ |3 ?                upp_error_count++;
" q7 {4 ~( D; r: W! e            }
+ L1 N: a9 n- X. z+ _4 y+ [        }
4 t9 e" I" _1 e! m) o: |2 g    }; `/ f& Z% l- {$ k

5 a% m7 p2 c- L, h1 }+ ]' t+ h    /* 报告通信结果*// d5 N. k, f; S
    if(upp_error_count != 0): Y& Y; [: [5 ]6 n8 ], u% [
        UARTprintf( "upp_error_count=%d\n",upp_error_count);7 s. T  u0 C' }8 S' U. J
    else' [0 ], Z/ {) ]6 l. f
        UARTPuts("uPP transfers complete!\n",-2);
, R& j! P# s; B4 g; |+ R. o7 [) }* D7 H8 n
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
* y+ f2 z  `9 V* U; t2 L1 Y; X    UARTGets(ch,2);
4 c% b, d1 }% K    UARTPuts("\n", -2);$ t' G4 i9 |. _/ b( k4 ?; Q% @' y
5 q0 C/ G+ y+ x6 Y3 Y* b6 q2 `
    if(ch[0] == 'y')3 g( r. P7 ?7 F0 _6 r
    {
3 ^& J8 ?+ z0 Q        /*打印全部读到的数据*/" `4 }! Q6 p5 w% q5 h$ i: [: G
        for(i=0; i<upp_frame_size; ): X0 h# j4 M: B) b  ^* W0 |
        {, D( E+ k! ?8 M' @, i
            for(j=0; j<5; j++)
+ P  h* g. H3 z( m' _            {3 [% a$ E3 j. f4 j( w, w- h
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);$ G) N& ?! x0 B6 P
                i++;
6 c1 U' ]; z" |/ ?6 x                //if(i >= 4096)
9 p5 ?! R7 \$ j" z7 W                //    break;
$ f. N) q7 k$ ^
% |" i/ ^: B) f3 ^9 q            }
8 ?% {( ]. d6 E' u, Q            UARTPuts("\n",-2);7 q, w( d! N; f  O
        }
& p8 d. E+ M, V6 m    }
$ P6 }1 ^- g- A- j: ]) i+ a4 B7 x" [# n* j/ W4 U, u8 V* Y
}

' \$ ^) J2 \& u% z

, z# J0 H% {- ~
& [5 e1 Y+ u, E4 q! A# W! {+ W$ o1 O
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。3 u- c; C: q& |' ?5 Q

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。' q+ h. T  k* f





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