嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?# p! V5 |, a) Q' B# E, j' B. H/ @
Void UPP_TASK(Void)( Z/ r1 W: U9 L$ f( w, A
{, P* y1 R* p; m9 i8 D0 w" z
. S0 v& n1 a7 C1 c" Y
    int i,j,k,target_int_count=2;
0 h) P0 |' R/ Y- b0 Y+ H    char ch[2];
1 w9 Z) o2 E9 q$ i/ y# I+ x& ]0 m: i+ Z* ^# b; X
+ m1 c6 O! p! H; U4 I% ]

" X# B( x8 \  q+ n2 z    upp_interrupt_count  = 0;$ {1 o* U" {/ ~8 e! j! t2 H
    upp_error_count = 0;
# _) K% L7 f% m; e1 O' @& [9 n" y2 E& K6 s& F3 n/ e* G2 @
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
' s; T5 X5 ?# b1 z1 ~    // Initialize data buffers: M. x2 @" y+ c' S- b
    for (i = 0; i < upp_frame_size; i++)) u8 Y, T' ], K. ~9 |% n
    {0 Q# G+ n, F8 i. ^% l5 x
       upp_buffer_b =i;
( k2 c; B8 ]" l$ O# J  m% @       upp_buffer_a = 0xDEAD;4 L  j5 j0 `( a1 C' t8 Z
    }
, _' H! O6 V3 a3 l/ L- u" @% e  a; M! m" V+ F5 r6 c, C3 E$ j; o
    //for(i=0;i<1024;i++)
1 A, T) \) J8 k+ H" h    //    temp=0;; T2 Q* E3 j, k7 @
* U7 h$ T& d! p; F
    //UPPReset();
% j' N. B" G8 E  N    /*启动UPP DMA传输*/2 H" c. N+ C7 {; V  _7 `
    UARTPuts("upp_prog_dma_i\n",-2);
; K7 S" B* \: K# W& a    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% m1 @/ V) L5 a2 J    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ [, _9 \( |: x2 h    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 b9 `3 P3 U+ F( u* f
1 R- |5 V6 e: J1 z! s- S* Q    UARTPuts("upp_prog_dma_i\n",-2);" x; [1 u% R8 Y/ k# o( i5 y6 q( y
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" i; B8 j  ]2 [    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);5 O7 w1 \9 z. A. ]' m) m
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);1 P9 a& E% n" B: M& H3 p' D! z! o
5 E3 L8 U5 F5 j% z' q
    /*等待UPP传输完毕*/
* y1 d( h3 F7 g    //i=0;
3 d$ V$ Q% j8 ^: w    //j=0;
% H) c7 `& b# `0 c+ d, X    while (upp_interrupt_count < target_int_count && upp_error_count == 0)( [5 H" F# p# y/ p
    {
& {" {, X. g- h5 b' ?        /*  测试UPP传输的同时操作普通DDR数据, ~% I  t" i& W" w6 ~
        temp=i;% x+ S# x4 _0 ^" B# x
        i++;, D* k1 u7 Q4 _
        if(i==1024)+ L  A2 K6 n; i
        {0 y0 J* T5 r% m  F  d
            i=0;
5 ]4 Y# V4 l3 {# y            j++;. i' h4 |, C! T$ S; w/ W0 W4 `7 Z
        }
2 }$ r4 K! V+ O% T, u  V: L        */
1 f* V; @3 Z5 e3 {7 F; t+ \
' K9 @% F' Y" f2 s9 t       asm(" nop");3 U+ N2 R4 R% C* R1 G

6 K# t+ r0 t6 }       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- u" U( `8 ^: f1 ?. ]8 K* p! ?    }1 ~0 h# R/ k" b: \

+ ]. t- j3 c) y2 V2 ~/ w; N    /*检查UPP传输的数据是否正确 (loopback modes only)*/9 t' s4 {- w( y  P
    //UARTprintf( "i=%d\n",i);
/ [' w7 D6 {! q9 Z+ ^# `    //UARTprintf( "j=%d\n",j);
7 j1 x( K8 a6 }, m2 @+ X    UARTPuts("Data mismatch in buffers.\n",-2);
/ j8 z* g9 y2 Q8 p    if (upp_interrupt_count == 2 && upp_error_count == 0)
6 P) r+ U% i; F    {8 Q# f, \4 |  ?$ ~
        for (i = 0; i<upp_frame_size; i++)
( \0 Y4 C. s+ I        {
  J, ?  j2 i( O            if (upp_buffer_a != upp_buffer_b)
! c% ^" i0 M1 T* L% H            {
" k2 N/ y! N# P# F$ J5 [7 J                upp_error_count++;8 u4 o' \. O+ j9 c5 N7 ^
            }+ C- K$ i3 p5 D6 }; _* s; I
        }) e7 T& S5 ^% u; b. Y6 w
    }  y7 g6 P) i, @) j, W9 `

5 J- D! ?* N) Q2 j    /* 报告通信结果*/
7 B% d4 z/ i8 e  S    if(upp_error_count != 0)$ u' C) p7 F0 ]9 u$ D, J2 p2 g2 ~
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 t% q  t6 M* w/ ]* H$ ]. A2 i3 z    else; K; z1 N7 y, k+ P% q
        UARTPuts("uPP transfers complete!\n",-2);& V2 y/ P. N2 P% F

, _0 n, ?' p* M( [2 T    UARTPuts("Do you want to print all the data?(y/n)   ",-2);/ v" S4 Z( }' z  ]
    UARTGets(ch,2);: C8 X+ V. ^- X; @- y- f
    UARTPuts("\n", -2);. x: Z6 }2 }, Q0 X) l
% D. t. U6 G" ], L: Z
    if(ch[0] == 'y')4 U' s9 h! r- u: W. Z
    {
/ t9 h0 V1 o  J: J8 T" p  n" }* H        /*打印全部读到的数据*/
) c) a0 y3 U$ W        for(i=0; i<upp_frame_size; )
  D1 x7 m# _8 p& ]2 @7 g        {( J1 g- E/ E$ D2 ]* ?1 T; g' t
            for(j=0; j<5; j++)9 m7 K& d* W9 }/ U
            {
8 g/ r/ b  m0 K* f                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);  u4 y. I7 A1 J- K
                i++;4 p: G3 y; U$ A3 F+ h/ |, @
                //if(i >= 4096)
( w! \9 U! A( T9 f8 O                //    break;9 v! G1 M7 D7 u6 D
8 `8 t; g7 `2 t- m( }
            }! H! e; r  r& z# V+ H& F
            UARTPuts("\n",-2);6 g) v/ @* s: R$ @
        }8 f4 x9 `3 f. ^; p
    }
$ P$ O# v. R( a6 K6 `1 S+ x$ K0 Y' c! q5 A. ?* e5 z) K
}

$ B6 {/ D3 {8 U/ V# l4 G4 L, \' f+ L
& F9 \1 j; |; v- ^2 i0 s* _) V
& ]( @3 h7 G9 Z3 m( U

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。9 s. R$ |) i! G' k) G

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
2 V- W1 T# P+ c




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