嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?9 G2 Z; w9 }0 ^
Void UPP_TASK(Void)  U) J( q8 M. G
{
' P: K; L8 `4 f4 w1 s$ A
& w* ^0 g% v# t7 F. O# w    int i,j,k,target_int_count=2;
9 p3 R* ~2 {. _9 ~( n) i    char ch[2];$ B( p: e% h- w
) r8 |$ F6 Z6 G. G8 @7 z0 ]3 S

5 P3 `) u" J% N8 Q" j
* W) G, }9 f' k    upp_interrupt_count  = 0;
1 m2 V% T4 @7 D6 Y6 b    upp_error_count = 0;
  c$ B1 P/ [; P; M: W+ X4 P. s* h# v7 J3 _* m
    UARTPuts("\tResetting uPP buffers...\r\n",-2);- o2 a0 a$ ^) P' O; j) ]' x6 ]4 o
    // Initialize data buffers( V; Q7 d2 A& _" z, Q. m' N8 L
    for (i = 0; i < upp_frame_size; i++)
" e3 }% a! A0 o" @3 k4 I' t    {" b# v1 c5 s: F" z% a$ D* @) e
       upp_buffer_b =i;
5 }: {. m7 r; O5 @5 z! N       upp_buffer_a = 0xDEAD;
2 g6 z6 {: {" T: y0 s$ b  ^) y    }. _- x- a+ @7 R( O' T
5 |9 j9 h4 w3 U  u+ s1 G
    //for(i=0;i<1024;i++)
6 j% w  X  ^7 x& A/ f    //    temp=0;; W0 {7 V' ]9 t0 _, c) O

/ a8 e( i7 n) d- |& J$ c% k    //UPPReset();
" D1 [6 v* f/ {: q- j    /*启动UPP DMA传输*/
( f3 ?: F$ ~+ E2 t; h2 I0 O- m" v    UARTPuts("upp_prog_dma_i\n",-2);
7 ]4 b" r: v3 @" G" q" N    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 F7 U9 m8 J  \5 H3 P) V    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 S- S- D; l- S1 D    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- L+ Y8 ~1 a, k( |: r* u; e) w9 D, x# Z3 f  Q0 r) ^$ u
    UARTPuts("upp_prog_dma_i\n",-2);3 s! r! I" B" ?1 `
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;  q: R1 G/ t! L# n1 W8 f
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( r. y& ?: @7 `, w8 o3 {2 V
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);5 ?/ H5 @8 t, C, p$ N

6 @! v) i* \5 ]    /*等待UPP传输完毕*/
* ?8 Y# g! U, a  q9 Q    //i=0;+ n$ C  z3 J* g
    //j=0;
8 X9 s8 @; v* k& P    while (upp_interrupt_count < target_int_count && upp_error_count == 0)' ]$ _+ K3 r' M& d* D
    {
* Z) n1 N+ E/ F1 R- E        /*  测试UPP传输的同时操作普通DDR数据
8 }$ B0 \# |6 h0 q5 u        temp=i;
5 m, E# e8 _5 I        i++;
0 X1 ^: H; v9 |        if(i==1024)
& N- R+ |" ?4 y" o        {% }4 {$ e' C* u& F
            i=0;3 y. g; m$ J' p, }, k9 \6 [
            j++;
2 W( N- E& C! E  R$ F        }
5 i- c1 k, ?6 @! |8 z3 |        */% O0 ]2 o# a5 V0 P+ k& v

2 S* \, D& X' a8 A$ L) \3 ]       asm(" nop");) U, J1 {, f& B

: |1 r8 v) X5 ~; h4 \       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);$ a1 @" ^! K3 b, i* Y* y
    }
4 N8 P9 k3 P1 I/ X1 V3 T9 W( s4 S- O/ L6 z* B* \* B
    /*检查UPP传输的数据是否正确 (loopback modes only)*/# |5 L$ Y. D8 W! X
    //UARTprintf( "i=%d\n",i);
4 U# O" Q" q3 V9 e5 n0 p) l    //UARTprintf( "j=%d\n",j);
9 f' ?& E  y* n9 e# w    UARTPuts("Data mismatch in buffers.\n",-2);! ~3 [6 Y* E3 _: I) i0 N$ f
    if (upp_interrupt_count == 2 && upp_error_count == 0)- w( w9 W' l( N0 ?0 m5 W7 J; }6 J
    {
! {; B5 h# Y" T$ z" x$ O# j        for (i = 0; i<upp_frame_size; i++)- o5 g6 \; @7 a
        {
. |9 F% S2 ?0 N; v* h* m            if (upp_buffer_a != upp_buffer_b)
( |" E5 }, p, Y. ?8 r" F            {
9 y3 w- x/ Z# e5 E! o) z                upp_error_count++;, A* F$ n4 \# W" F
            }; C& \2 X; v+ o2 H- n; o
        }
  L1 X3 L& t3 s" ~, k% d/ k4 M8 ]    }3 n/ s5 z0 j, g1 L  ^
5 _2 A. J9 B3 ?  Z1 K" r
    /* 报告通信结果*/
) Q1 G# I8 a' }    if(upp_error_count != 0). a% O) Q9 F5 ?3 ]
        UARTprintf( "upp_error_count=%d\n",upp_error_count);+ E9 r; b4 N7 k; o, R" H
    else
+ C/ T) e+ G4 ]- b5 Z$ T        UARTPuts("uPP transfers complete!\n",-2);
" ^" E+ @7 F" i( C) B! K3 h% f% v( D4 C! j
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
; o1 P" N1 y  f    UARTGets(ch,2);# S6 u' H6 Y% {" f
    UARTPuts("\n", -2);' {. I2 @* \, k5 O! s
9 t  {5 L2 O- x9 p( w
    if(ch[0] == 'y')' O* X" j& T4 L# Q2 l0 p
    {! B* n6 t. R% w. j
        /*打印全部读到的数据*/9 h' b8 g  [; E: r4 v& m. x
        for(i=0; i<upp_frame_size; )
6 W* H  B" @6 A2 N0 y+ }2 O0 S6 c1 E        {' x; l9 K, L" i! y5 a
            for(j=0; j<5; j++)
; K# r2 P, l1 o& D            {9 y  y' i& {! ?7 z% _' Z
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
5 F* b: S$ ?' M$ q' F4 g- n                i++;$ q: p# P) y/ V$ E% P8 C
                //if(i >= 4096), ?0 N8 L+ }  x1 I5 i
                //    break;9 O# G0 G' z$ ]# ]8 ~2 L! i& h

# D0 I* k  Z) \; k            }4 a7 x' T- \  C9 C; g  H4 ~7 s; z2 w
            UARTPuts("\n",-2);  s( N9 b& S1 @
        }
1 @( d% G9 z# O5 q; A    }
9 H6 b8 ^% ?8 n4 V& a( v
" v. k( G. M9 A* M  D8 M6 o2 b}
; I, T" d6 }  q' O9 \* s* R) ~1 A
* G& E; ]! A2 ?) l* Y. F  e

" V. f" h9 M3 l! E" D( p# k
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。- O* D4 s3 Q; _2 ]; g0 {

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ A$ U/ O6 [/ R. o9 E& ~0 Q8 z




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