嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?$ F. _5 [3 P8 m8 B# }- B9 @) L
Void UPP_TASK(Void)6 x5 j( y0 k1 d+ S; k* d! ]
{4 Y8 t$ I! r2 m2 h+ S# B
) N3 H; a, @" Q% T) u9 E$ s
    int i,j,k,target_int_count=2;
0 o! a& {& q8 D% T( o/ V    char ch[2];' }* p; G( i4 n4 v

% J) n6 v: P0 a, i! B: s! U: g
+ ~2 f! k0 c7 T/ D" H1 v0 `* A/ ?  |9 i: c! E
    upp_interrupt_count  = 0;4 ~) @% R1 q% g9 I8 y- Y2 z2 {
    upp_error_count = 0;
' ?+ O' l9 \3 z5 g3 }: b& n( s( o- y# W
    UARTPuts("\tResetting uPP buffers...\r\n",-2);; [5 k- I8 Y, x6 g
    // Initialize data buffers5 H0 s2 ~* n% Q4 A  r5 f" ~* K
    for (i = 0; i < upp_frame_size; i++)5 ^+ p0 s' w# R5 N
    {
3 d3 {. T0 ]( J       upp_buffer_b =i;6 u7 N* T" `( s
       upp_buffer_a = 0xDEAD;0 y8 H0 Y9 F8 [; Y/ ?0 N2 T
    }9 `5 Q- z! f, P" P  Q* _
# a' H6 q5 L  |. c; n. `
    //for(i=0;i<1024;i++)
9 X& s: K5 U$ o7 W    //    temp=0;
. ^* H9 z; U4 K" p& Y, G
  t% s' [8 G! q* B    //UPPReset();
* J9 e  u; F9 p! p; |$ L    /*启动UPP DMA传输*/( D& T" G$ S% e7 }. \# n! v* ?
    UARTPuts("upp_prog_dma_i\n",-2);
* B9 l9 |( S- D    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
/ E2 k' ?3 i0 x" ?4 u! H- N2 t    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);0 V/ T" y- v  b0 u- k
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);* U( E1 f$ Q3 S6 ^- ?

7 X  K) i( Y+ |$ J- d    UARTPuts("upp_prog_dma_i\n",-2);
' f& X& Z& d+ X( K8 m9 a    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;" ^- x8 p! P$ G7 ]1 W
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. x( _" l8 u6 Q# a    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
9 g$ F% \; e/ K4 H' N' [% y0 g; Y. E. K6 b
    /*等待UPP传输完毕*/
5 g( j0 e7 M5 d$ I. d. W    //i=0;1 W3 F* \  D  R- q+ A
    //j=0;
7 [4 R4 S; ?$ E2 ]8 X; R+ u5 h/ ]    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
, h: ]3 y. q+ q$ w% W    {2 E$ ?6 Z9 u) @5 b
        /*  测试UPP传输的同时操作普通DDR数据
. |! L5 v: J- \5 I" Y; }        temp=i;) g1 l2 c# G- t' I: x! j
        i++;
% \, `5 T/ Z! C& |( K        if(i==1024)
. |: C* f8 D5 j        {
0 l; Z- e( u% K1 H; h; e; d0 D            i=0;
9 Q- Z: `% q) e' x' K            j++;
% b* S" P3 [" r& c" e        }
, z5 @" s$ D% S        */! e( G+ D& J2 n( b

( |, j  [7 _' z$ Z$ B: @* R7 U0 i  M       asm(" nop");' {. R1 k* M) }8 L& b

/ `9 S. f$ g& ]+ ?7 Z8 y  _8 z" @* o4 D       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);8 w4 S) d3 _& q. X8 k! q1 r9 W
    }8 h% Q* }; N. w8 y; V; }: t
5 d: W2 m" e4 i! p2 c! L. n- j
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
' h& B. e* j, r3 r    //UARTprintf( "i=%d\n",i);2 K3 H' I8 U. M* g
    //UARTprintf( "j=%d\n",j);
1 S# R& \" J4 {0 g5 b    UARTPuts("Data mismatch in buffers.\n",-2);5 ^( _- r/ x% U6 v- h+ N
    if (upp_interrupt_count == 2 && upp_error_count == 0)2 d7 y0 m* P% D+ V' ?
    {
% D% J$ z+ e- a$ @9 c. b        for (i = 0; i<upp_frame_size; i++)
0 K2 b' K  g7 I" h        {  A! ]0 b9 G$ R' |% o' D/ D
            if (upp_buffer_a != upp_buffer_b)
) s7 v- t, \( t4 N# h            {
9 j" n; e3 V, I                upp_error_count++;
! m* V* b: J) n, W) b            }
! @' w% ^. p2 M, M% J' g        }
8 ]+ H* N3 i( H9 ~    }& h+ w4 H8 [# Z' H
0 f$ A$ d' E9 w
    /* 报告通信结果*/0 N/ w9 n0 [7 M
    if(upp_error_count != 0)
/ A8 q7 z) b$ F        UARTprintf( "upp_error_count=%d\n",upp_error_count);. [+ ~1 n6 e2 u4 }" v
    else& |9 Q+ L4 F. a/ z
        UARTPuts("uPP transfers complete!\n",-2);
$ c) x+ F4 H, u$ u. V& A
9 F4 t. [! |6 r, j: a- O    UARTPuts("Do you want to print all the data?(y/n)   ",-2);6 [  H. _' a7 E: r  Z5 |: N
    UARTGets(ch,2);# F+ q2 ?3 A& J, v+ E4 t2 F
    UARTPuts("\n", -2);
9 C  \3 s$ |8 ?+ g' O5 ]3 R* ^# H# q4 Y4 Z
    if(ch[0] == 'y')
* n9 q" Z* k! u$ M5 X1 P( F* D+ R    {
+ L5 w% b% G- R; r! h        /*打印全部读到的数据*/
# @, J! C. ^" g        for(i=0; i<upp_frame_size; )" s5 a) C8 G8 O6 y+ U
        {1 q5 A+ w$ _% T* \0 h
            for(j=0; j<5; j++)4 I/ R2 |5 c$ W, F, {
            {4 f# t0 V/ ?; N6 K0 S0 ^% [
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);0 k: O' ~) O4 N4 X/ c) c3 t
                i++;
) m( g* a! a# {8 {' ]: B                //if(i >= 4096)7 D( p# t9 A9 Q3 N$ Y
                //    break;0 q. Z7 s/ T( t! s$ Y% ^, s/ k

4 {  ]7 B' E6 N! v# E! s( {6 b5 m- i            }7 J1 M9 c5 s) ?& c
            UARTPuts("\n",-2);8 d5 m6 H# ]  p; i+ I# I. Q* x
        }: Y1 |9 g& b1 I% t2 a
    }
0 Y2 Y! j0 u5 l( Z4 ^
7 f3 l7 O8 J5 U, {. u3 @+ u}

0 {& N* V0 w1 H  a& v

% o0 }5 V9 `4 n) w5 [8 G7 v! D4 c& K3 s2 T9 Y0 [

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 K% v0 B7 X2 h0 j0 w: M
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。: {0 t( v' P6 g5 y





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