嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?! V, m4 b4 \: l( X' M# }2 B- ]  q
Void UPP_TASK(Void)! F# P) g' |9 @7 t+ X
{
' t3 J( @! `, f! z/ {& p- M
! ]" }( q  f, S! y1 N$ a    int i,j,k,target_int_count=2;9 W' z% `9 _: c
    char ch[2];
3 a0 Z  l3 `0 M4 z% W6 v. ]) e& P& |* d) C, h; [

* q1 m- Q7 N" p9 R+ u& u0 n: I- {9 o1 ~4 }- _# m% w+ |
    upp_interrupt_count  = 0;
0 [- `! B7 Z9 A5 L" V( J4 H# |    upp_error_count = 0;6 e0 F6 o$ e1 E2 ~
3 }  p/ y( F9 e/ {$ z1 E% _
    UARTPuts("\tResetting uPP buffers...\r\n",-2);( N$ t) G1 y$ s
    // Initialize data buffers
" h$ C+ L& x7 A- F4 a& a    for (i = 0; i < upp_frame_size; i++). {; z* k: p  P# {& G" F9 ^- g! _
    {( ]! t. p# E0 ^# u
       upp_buffer_b =i;1 d$ `0 q$ \- s: I2 R4 T! u# G& p
       upp_buffer_a = 0xDEAD;! U" \! ^/ s  H! R( }' z+ O( q* d
    }
: ~7 N( ]8 X2 w! ]6 f9 g: k6 J- F0 a( d# y# M" G
    //for(i=0;i<1024;i++)
, y9 ^8 K$ O7 M$ \6 I    //    temp=0;$ B% O. O9 D1 D) M

  Z( D2 i& z7 j& X    //UPPReset();
5 N* |4 ]7 M- Y- H. Z0 e+ X5 g    /*启动UPP DMA传输*/
, i* |+ G& P. P: [% J, f    UARTPuts("upp_prog_dma_i\n",-2);' x1 X7 J! p! O0 @5 O: v
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( v9 \% h0 ^* T& R. M6 ]- k8 E3 k4 ]1 [    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);; a5 |0 ~# F# o6 G* y) D$ |
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);4 ^$ m, |/ K# a4 h: [3 X/ J
% j3 U. @3 }7 b$ M
    UARTPuts("upp_prog_dma_i\n",-2);$ v( l6 C: J6 o0 L1 r9 O. R
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' O9 t( |, ^* x' R6 ^  W) O    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);  Q2 A! n: }  @& Y9 o( v/ }
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 o3 l3 z* S$ N# c) R/ C
, l* g! u) d" [8 ^8 I+ V- g    /*等待UPP传输完毕*/  t- D3 E- N. _3 l# S/ f
    //i=0;& {7 C1 ~& A0 N' k" c! W
    //j=0;! r; T( G$ p' O
    while (upp_interrupt_count < target_int_count && upp_error_count == 0): q, g6 p: T3 S, ?! F* }
    {
# [1 @- o; ?9 t) Q        /*  测试UPP传输的同时操作普通DDR数据3 H2 j# Q2 t7 c: ~
        temp=i;. K1 X& j2 H  \$ d+ S( n. R) s) g
        i++;* K- M+ x( y! W
        if(i==1024)
9 y# u5 Z. d6 I: N9 a        {. |; ]/ ?  ~, H; g2 y$ ]% ^/ t
            i=0;
" J2 @' }& x2 a% T            j++;
" D9 D4 b7 T/ L3 ]" h        }1 h7 d% Q- G: f7 u4 {
        */2 T4 N; R- j: }2 L. F/ H4 O6 y
1 I+ i" _/ a, P! j1 a
       asm(" nop");
8 ~% d- p, I9 m- X& e
" P" p& G& f& z, s       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, y1 j1 g4 U( r7 c0 p3 c% t" s  y4 _    }3 t6 |+ a9 z( @9 q. J2 ]1 E% t

! V  A7 K+ x: I& \1 j' ]    /*检查UPP传输的数据是否正确 (loopback modes only)*/
( T4 r( ?& W9 g8 X- G% z( q/ h3 W+ j    //UARTprintf( "i=%d\n",i);
7 ]) L; M' q) Q( Z- N* \    //UARTprintf( "j=%d\n",j);) P* _% A2 {- G: x/ k
    UARTPuts("Data mismatch in buffers.\n",-2);
3 W3 `! ]1 ?9 @8 Z3 }8 D    if (upp_interrupt_count == 2 && upp_error_count == 0), ^/ Y# j' U2 q; b" V5 W4 w0 U
    {6 T2 a3 s- o4 d. A. ^2 s( q; m% X
        for (i = 0; i<upp_frame_size; i++)% K6 V& ?4 K( N5 W" }+ o
        {  u6 i7 D0 A0 X$ ^- S! u% `/ `
            if (upp_buffer_a != upp_buffer_b)
% D( Y7 P. @4 A- A+ @  p4 w            {: W. y4 U4 L/ I, N7 `+ F
                upp_error_count++;
! f* ]3 e: A% g  _3 p3 O$ w+ J            }. @5 F# O  X- M5 x
        }
4 Z9 m$ o8 J' d; Q$ o2 y$ h" S- x    }8 u3 T) Y) w6 e+ l. X! @
1 I3 G. f0 H3 j
    /* 报告通信结果*/* I6 y5 x, j$ l- ~* G8 Z' `' c
    if(upp_error_count != 0): Z! @2 C5 p4 H. o
        UARTprintf( "upp_error_count=%d\n",upp_error_count);8 b; {. g6 [# V+ j# m' n
    else
" ]3 f5 o# v- V; S# q        UARTPuts("uPP transfers complete!\n",-2);/ t3 N8 y, v* U/ \* }; K
4 D, P) _0 b8 r: X2 P
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
' v* A  a: \5 t    UARTGets(ch,2);0 M" l" c; H6 M# |& G# }
    UARTPuts("\n", -2);
8 ~* o7 ~$ U# Q, a0 T0 B  `7 p3 F% q- j' {
    if(ch[0] == 'y')6 e4 ]; z& P3 \7 _% W8 m
    {
- K! j% L8 |/ ]; `3 w5 O0 s        /*打印全部读到的数据*/! l9 @2 X! m8 X/ e& [
        for(i=0; i<upp_frame_size; )" X0 H0 T2 c5 v* W8 G
        {% l: c: `# W% W+ o2 b
            for(j=0; j<5; j++)0 ]$ e2 h! q3 m7 O
            {
1 [' y3 c8 S0 s                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
) k+ B/ d$ J! V: R# e& h9 ^                i++;
: O7 P% ^% y* ~8 v) I4 H                //if(i >= 4096)4 X- r' w8 ~6 Z, @9 [
                //    break;
' e8 [8 m  @& q
% K& K+ D. X4 p            }# s; X2 G: |8 z9 L
            UARTPuts("\n",-2);) Y/ ^8 B9 w! ^7 u8 ]( ]
        }
: j4 v' k2 Q8 s8 N    }% r' t, {( ?5 ~: U2 q- l, w# D5 F
6 j5 c6 |' U& d0 @/ g9 R/ o
}

: Z3 C8 O/ x# L9 C

& V! y' ~: j( w$ h6 w6 L" d8 J- D9 ^+ M

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 v, u. D. S! L3 V0 J
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。6 i& x9 u; O. i2 [5 a* B& y: D- W% X





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