嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?; T2 ]% t0 ]4 v8 ]
Void UPP_TASK(Void)" C4 Y6 E- U5 ?4 l, V+ v
{
3 |3 M0 c# {$ B, o! }5 H2 ]* m( W# K$ a7 m: s7 E8 q( k
    int i,j,k,target_int_count=2;; b$ w. J: g( u7 w- e) I3 Q8 u, g
    char ch[2];
9 e& ]; f' B1 o" O( }! g0 ^1 n
- m( a, b1 Z' @
9 R+ N0 _$ G; `% e
, j$ u; j0 a. P    upp_interrupt_count  = 0;
) ~9 c/ X; F/ \  Z% v    upp_error_count = 0;! C. O2 \# H+ E- c' n; K5 k
# v; P# ^  J) [+ l# }- k
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 }. K( C/ Z( l+ P5 Z  H) q9 ?    // Initialize data buffers
& h1 d1 T3 ]2 |8 p! x/ l    for (i = 0; i < upp_frame_size; i++)* r1 B  u# M, g' w1 v; H' r) l
    {: G' Y. W4 \9 j! t& C6 [
       upp_buffer_b =i;( o% ?2 m+ S. D6 H* D# _2 I) T# g
       upp_buffer_a = 0xDEAD;2 ~, N2 N+ S# _! A+ s) m
    }# B) i1 e7 a( ~' F( X, X

' a0 Z# i, H! @; o+ g% c    //for(i=0;i<1024;i++)
0 J# c5 G- U% B: a% i    //    temp=0;
6 ?: B6 r1 F5 k3 s. x2 l8 v
& S( x' u; [7 q# Y, h, c    //UPPReset();
% b. |  x( S$ c    /*启动UPP DMA传输*/6 b8 x/ e2 T/ a; ^* S0 E
    UARTPuts("upp_prog_dma_i\n",-2);$ p( L- O& a) Q- W
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;) {$ T" C3 q& ?4 |8 J% i
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 }6 {2 m4 W" r+ ~    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
3 _  W" v% z- W7 n# R; M8 I5 z* i0 T' Q. C4 {* Z9 \
    UARTPuts("upp_prog_dma_i\n",-2);0 `( a( S1 G( g0 w
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! P  P/ q+ p/ `/ s% [! Z    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);6 z( A: p# q0 ]% W# ~; m
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);% x5 t) `7 b* R1 \+ O2 V% i. M

; h  ?6 z) t6 ]6 c    /*等待UPP传输完毕*/  {; h( I1 W; Q- c, G, X! I
    //i=0;
* r6 O4 ~4 G8 a8 S+ K    //j=0;6 }, d' j0 `' N6 }8 R2 F) q6 J
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)% X7 M/ u4 R, M: J
    {! f1 W6 i, c; A. m8 \- P2 y  O
        /*  测试UPP传输的同时操作普通DDR数据
* [; O" v5 P! H" e+ w/ R        temp=i;
( Y1 C. O3 z7 Q9 @7 n        i++;, n" [# G: @( ~: c
        if(i==1024)
3 ]* }: c7 e+ P- I" Z        {8 U. [) Y9 n8 G, G% Z
            i=0;
/ y8 X8 `, Z7 R3 Q* Q0 t1 \            j++;6 i! @0 `& `9 O, q! u; J+ R9 x7 O
        }, [9 }7 E. {2 _. A7 r
        */' Z1 G2 J3 d: y! E% C* C

4 A7 ^4 \& {" I- |4 M       asm(" nop");& ^0 d2 l# I) j2 F) \
& E* ~9 _" L3 ~; f( j2 S  F. d; I
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 s; p$ ]  z: V$ n2 \- \    }1 Q! \% ]2 |; \8 D3 P; I( [' ?
' `0 [3 B6 }9 j& |8 |0 m/ ~9 O1 D0 G
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
* D2 I! ]8 E) b" e+ D$ e    //UARTprintf( "i=%d\n",i);$ D& D/ ?, E+ ~( m& e8 b9 a
    //UARTprintf( "j=%d\n",j);
/ H. S* |$ s% I+ z/ V$ M    UARTPuts("Data mismatch in buffers.\n",-2);
2 P  ]4 {  H/ H3 t    if (upp_interrupt_count == 2 && upp_error_count == 0)% z( K/ a; \+ F, Z) [$ L0 v: V* E
    {' H$ T7 `& T6 U1 Y+ s- U& @
        for (i = 0; i<upp_frame_size; i++)
4 {+ K' C) U2 b) t- l, D6 F        {+ [9 |& X& w3 n( f
            if (upp_buffer_a != upp_buffer_b)
. h. T, c  D8 ?            {
; d. w: v# ~5 H( v                upp_error_count++;4 G1 g  \  c& G1 c" K- b/ l/ ?, r
            }0 Q( ]9 e2 _, b! a6 ]1 L
        }% f( J# l6 k1 X. C
    }
' L) {8 Z- H  U7 Y6 C) ]" O& f6 G0 A; B. K9 H$ t. C
    /* 报告通信结果*/
6 d+ z9 H0 ]: j    if(upp_error_count != 0); v3 n2 o& y9 W. |7 [% y
        UARTprintf( "upp_error_count=%d\n",upp_error_count);( ?. j2 {6 i! [7 M7 r5 t8 W# O
    else
5 z& a4 s- X8 J$ {5 m% k. U        UARTPuts("uPP transfers complete!\n",-2);
% I9 U0 e+ y2 Z8 ~) |3 M' A
6 J6 u3 H' q8 F) B1 i- j" L    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
$ g  n1 m" F$ s: Z' o    UARTGets(ch,2);
; j6 \; ]2 C& j* h9 P    UARTPuts("\n", -2);2 t4 g! n$ e; Y, J1 G: Y2 I

' B0 ]! M. {& r# z* k0 D    if(ch[0] == 'y')
# Y- M7 A/ I* o" ~+ u; b    {
4 i" w* k# y+ ~5 d) O        /*打印全部读到的数据*/
5 `# n4 h  e$ q0 m1 k: J9 D        for(i=0; i<upp_frame_size; ): A: _$ j* X, q* w
        {5 j: w5 u* t% G6 J3 i1 g
            for(j=0; j<5; j++)
" B+ B6 Z, Q- y8 C6 `6 `5 t5 |/ J            {' I, F! l' ~, B- C2 V1 E' Q
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
( B- f! O5 h$ K: ?                i++;
$ C$ l) @: N6 J, }+ p8 ~8 f                //if(i >= 4096)! Z# ~* q( }  H( |* g
                //    break;; G! a% S' c  J0 L

" L( O; w) G. P% h& m            }
; [7 q/ f  s+ Y            UARTPuts("\n",-2);/ u& M$ p- s: P
        }
7 U% X/ E5 q) M( \7 @; X    }+ h. G; z% d9 q9 i7 r

; i9 j# r# Q5 I3 J}
2 ?2 S8 S  Q& ?! y

$ c# G! h) U# Q3 s" d) _. k- s
1 d7 i7 O* Z; w
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。) o; W! h; f* a( Y

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( l8 [4 q6 b1 {# m* g; L




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