嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?% c) Y9 N) y: D% ?! c0 P
Void UPP_TASK(Void)/ }0 V5 `3 |4 _# _1 }
{
( m% c+ V+ [( l) |( c, S- ^! f& ?' |2 M
    int i,j,k,target_int_count=2;
2 E- X6 f4 {( i# r4 {' h    char ch[2];
$ U6 @5 Z/ M7 [4 w; ]& G& @: [4 |6 J# A: A
& Q. \) x9 z9 L9 p: M
8 h/ \- g2 A' G3 C0 j
    upp_interrupt_count  = 0;% ~7 z" @( l' ]! ^
    upp_error_count = 0;
( m7 Z( P( {. K: J8 j/ X# I$ e/ x, x6 W% P2 Z) [! j
    UARTPuts("\tResetting uPP buffers...\r\n",-2);2 B5 N+ K; s% g! X' }) }
    // Initialize data buffers
2 E+ G7 f4 v; Q, w' `    for (i = 0; i < upp_frame_size; i++)+ v! U7 h% O/ s6 [0 U( p: _
    {# `6 F# V1 k0 x/ D- V
       upp_buffer_b =i;# C7 {% e3 l( S5 \! R4 r/ C6 k
       upp_buffer_a = 0xDEAD;
- }3 l9 s5 x; B; O% H    }4 y/ h" ^3 K; N5 @
/ B/ w. ~  s- }6 p
    //for(i=0;i<1024;i++)
$ V% M' I9 w# m, u* Y3 c! E* s    //    temp=0;6 k/ U) c3 b9 S8 }$ I8 x& E
: Y! c. @1 Z3 O( s7 V8 l$ t
    //UPPReset();) |+ L) }) Y+ s% J5 G2 l
    /*启动UPP DMA传输*/
5 _  h0 M, v3 r, h/ R0 a) C    UARTPuts("upp_prog_dma_i\n",-2);
) M+ Y7 [# Q1 X, `# }# {% d. K    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
; U8 C. G( }: C6 T' _5 S    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);4 H- _" ?  a' i) T
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
5 e" I( d. U' a/ n& G4 v; c% X) {/ O$ r
    UARTPuts("upp_prog_dma_i\n",-2);
& N0 r! q$ R; b3 D7 e% {9 g# ]    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
% l+ W. ]- Z! {* j    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( j/ v" Z4 N; _4 Q2 @
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);! p) H$ b2 j. H3 \

2 w, Y, ^5 N" Y' H$ L! n" d& n$ ~    /*等待UPP传输完毕*/
! ~7 I* E2 Z# k    //i=0;3 o! Q. x0 f7 ^6 Z! S
    //j=0;7 v# q! v/ K; f3 B/ _
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
1 I! q3 G4 x8 d9 b1 ?7 w    {
, b' U0 n' }- e( @6 w) }4 m        /*  测试UPP传输的同时操作普通DDR数据
1 H% Q( p; _# U6 G        temp=i;3 ^: ]% z9 J1 s* q, |
        i++;
& {1 u: P) A' j        if(i==1024)
/ u" \& `( f/ b4 O& l" K        {
- A! L3 g% u* r  f! {9 P% c& @            i=0;$ @3 j' k9 n6 j! X+ U9 Q
            j++;/ T5 D( n0 m. q  k' t
        }# T4 @! Q& ?, B$ w$ a9 E# }3 F
        */
4 u% K9 S) {! N1 z( I+ h" }5 F1 M9 m' v6 U
       asm(" nop");+ d* ~+ X& I1 F7 _% _/ g2 a
* S$ Y8 H# l( [: s+ O! f) z
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);# Y, g6 H" g8 \4 X! y7 Z
    }
% n5 o2 H. J4 \+ N) L8 A0 F
1 G5 N7 z7 W8 L6 Z- P    /*检查UPP传输的数据是否正确 (loopback modes only)*/
& M+ K+ @. [$ W1 `    //UARTprintf( "i=%d\n",i);
  y8 M6 h! B0 h' L: d) M8 N    //UARTprintf( "j=%d\n",j);* R% U# Q  \  A, \' f' z
    UARTPuts("Data mismatch in buffers.\n",-2);
* ]5 N$ ?- P* m; O& v+ f7 q    if (upp_interrupt_count == 2 && upp_error_count == 0)) f( s" u) e& D8 I# D# H3 j) X
    {
$ p/ j" D6 _' Q, G- Z        for (i = 0; i<upp_frame_size; i++)
. g# B) U! q4 I# J/ D6 N4 R& x3 S        {
8 m0 a8 [7 Z. [6 c& l2 M            if (upp_buffer_a != upp_buffer_b)
6 m4 |; Y! T7 Q9 n" R6 o            {/ J; U' l; t- {: B
                upp_error_count++;
* A+ a+ ^0 |& y4 x! @4 y- M. u( x            }: l1 W9 z; h, Z/ m1 w- W% Y
        }
6 X. T  N0 \, ]- M* h    }9 Y* Y0 ^3 d) g3 ]
3 L. v, L3 f& y0 F* X+ P% |* I5 V) D7 V
    /* 报告通信结果*/& f( K- E0 @" `% _/ x% u
    if(upp_error_count != 0)/ @# i2 r/ x- C0 R- }& ^  o, ]7 O
        UARTprintf( "upp_error_count=%d\n",upp_error_count);' y+ G9 V# y- t7 B4 C" @
    else
: S* G6 f& D$ N; L4 j        UARTPuts("uPP transfers complete!\n",-2);
8 z! P0 l! ~/ X- ^* _5 e% _& ]& k+ `$ {
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);7 o) Z0 p7 m4 A: ^
    UARTGets(ch,2);
4 R4 t4 N5 w! R, L1 z& ~    UARTPuts("\n", -2);* [7 G9 e0 n, D8 D) ^; q4 @

; `! e& |$ \4 p5 e0 I    if(ch[0] == 'y')
9 g: u% f$ F0 w# z/ Q  L1 {    {" G+ L! S4 T5 j: A+ M
        /*打印全部读到的数据*// ]- \$ g3 @& g# J1 y
        for(i=0; i<upp_frame_size; )( k. t1 h! G1 A+ ]! [
        {8 P( ?) ]% k" G; c! p% t9 `* H$ P. {
            for(j=0; j<5; j++)
) u$ D4 @. o( H4 Q# H: O            {; }! }0 `: Q* @9 |* A6 `
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);& {: q& U8 D& L9 O
                i++;! U: L: d/ C6 f" ~) Z
                //if(i >= 4096)
4 i$ `5 B# ], n+ M" X" X% S                //    break;& b: [4 K& ?6 w! j2 G( a& d: X
( P7 b3 N/ T* Z7 f3 O- x
            }
% T0 t% f7 o9 r; n, ]4 t            UARTPuts("\n",-2);
" i5 Z) X5 a/ w# v/ H/ x        }
0 ~* C  b# A6 O7 o! w% _    }: k! _7 |$ a3 j: h

' z6 b  n5 }, ^}

6 n; S$ P  P- [9 R# n! f
6 v& \+ d0 N# F) N6 ?, s1 Q- r

$ K# ~8 O7 j3 ?4 f8 N, M+ Z+ w
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。% I! e4 ~3 W# x! S5 h0 K" k/ t, K& _. M

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。# n6 C4 h6 E* Q% h0 k





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