嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?+ \* u8 U( l# H
Void UPP_TASK(Void)
1 `8 N8 m( A  U" u5 a{
0 B* K8 q0 |0 m, x
4 k+ O2 ?  D- ^3 ]6 y& X) x' M    int i,j,k,target_int_count=2;/ i7 P- \, L/ N* I8 q5 t
    char ch[2];5 u2 g& a2 M0 o' |
: h! |" X9 G6 [; I' q
& S, b' i+ I+ \, K' M

  D. t6 D; Q/ t/ |    upp_interrupt_count  = 0;  E; |2 Z7 @7 U
    upp_error_count = 0;
) f8 H! v/ d+ J! M9 u( q3 N& p
/ B: u8 E/ T1 r    UARTPuts("\tResetting uPP buffers...\r\n",-2);& G6 i5 m% B$ d3 K
    // Initialize data buffers/ d% }' V: T; H/ @. Z
    for (i = 0; i < upp_frame_size; i++)' H" p& k0 ]  K5 D/ w2 Y& k0 E, T
    {
. t2 G6 R% b6 V. h% y( `; h1 v       upp_buffer_b =i;! s. @1 ~- c1 i/ E7 k& J4 ^; F
       upp_buffer_a = 0xDEAD;& L1 ?7 Z) G& m+ j2 r
    }
. N! V4 N3 u1 V0 ?1 \
- x7 i! d9 |6 B5 D. x& I+ j    //for(i=0;i<1024;i++)4 _! t7 C: p" K9 K+ [% G8 T
    //    temp=0;
( O& u* x# a, ~( c) a& u8 P
2 E1 e8 M4 s- j% R1 d/ w* g' k/ k    //UPPReset();& i2 W+ S* w% I; u8 A4 }
    /*启动UPP DMA传输*/
2 a1 [2 A* ~1 N0 a6 _4 y# S) }4 j    UARTPuts("upp_prog_dma_i\n",-2);5 {$ k1 L6 C, u6 f' ~# H0 ]3 T' B0 v
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
; E: Q* k9 K: _! A2 z! N    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);0 L% s4 |. E5 o. J8 _
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);0 u+ Q) l3 F$ @' k" r& f1 W0 a
7 {# T( v5 x8 o4 H( B
    UARTPuts("upp_prog_dma_i\n",-2);8 A: B, w% B0 _3 a- H7 c6 \6 D
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( r, ?% j9 _" n" X! I2 \    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 J9 n2 A% G$ ^* e1 d) x    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
' W5 x1 i7 u, i% g- Z/ j9 a' Y1 U) L
    /*等待UPP传输完毕*/
3 s/ T4 _! [: h( |2 D$ t- J    //i=0;
! n  Y4 e( W/ E    //j=0;) y. M4 H6 S1 e5 t" a
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' j% s- x, z6 U+ b* s8 `. Y) Q, H    {
$ x( s! `$ r) S        /*  测试UPP传输的同时操作普通DDR数据" \/ J& h, R/ J# G4 q
        temp=i;
# Y4 h* x: e& l6 y' P% B0 D% `( J        i++;* U8 G: \6 G" ?' l& {" a, H, y+ n
        if(i==1024)
' a& ^! V/ F% B( y+ r# ?        {
7 d0 f& l6 X* ?, `  l7 R5 @            i=0;. j* @6 Q* B0 b$ F8 Z* G8 s
            j++;5 v; |, I$ [9 Q# h* S. t* \
        }
, ?& J' `# h' o8 f* i% @7 Z8 z+ \        */) A; t. B# O7 g1 U. U
9 p# E$ l# {' S3 y0 N
       asm(" nop");( j- e7 ^& k0 r' a

1 B% [8 h, s0 U6 O* z' j* [* I! \       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);2 a9 n4 M$ X) V
    }
, ^% h8 I8 k& N# P* d3 I! ^' i0 }$ l0 L& W4 t7 s( F
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
2 W9 J- ^( _# V5 n6 z% Q    //UARTprintf( "i=%d\n",i);
6 c' _  o7 R# J/ X! {% k) Z+ S- q    //UARTprintf( "j=%d\n",j);
+ R' O( A6 J9 B( S. v    UARTPuts("Data mismatch in buffers.\n",-2);7 R0 x! n  l) k; m
    if (upp_interrupt_count == 2 && upp_error_count == 0)
3 G: r6 ]: C. `' b1 v  Z1 P& a    {- i8 p$ ]9 G# `8 J6 @# ^
        for (i = 0; i<upp_frame_size; i++)
6 H  ^* `) I7 _: F6 Y; @        {
" r* d1 {9 r6 D$ M( F            if (upp_buffer_a != upp_buffer_b)
' E0 O7 ^( I, c& l* y            {8 K  @. Z* ?) P, D  O1 }) c5 z
                upp_error_count++;, w1 Y3 O# D% }: U
            }- L: o; j+ X. b: J5 p" b
        }
( `, \! f- o3 ~; Z  a    }
! m! C  P! N. q' P$ C1 T6 v1 e# v, O) |7 z# y5 ]
    /* 报告通信结果*/
' w+ n( x% S  X6 x    if(upp_error_count != 0)
! e* H7 {1 q( Q$ A8 O. c8 ?* z0 e        UARTprintf( "upp_error_count=%d\n",upp_error_count);7 M- J9 t) |4 b' F4 h$ n. s
    else$ g/ N+ e4 T# @3 q- x
        UARTPuts("uPP transfers complete!\n",-2);
3 d6 x. }0 T8 j! S! k
, w$ g) u7 o  d! ?8 L" }    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
( f( S$ Z% P0 x7 s' _2 K. Y% @; f    UARTGets(ch,2);
6 D3 i/ B: x, B- _% S4 g* [    UARTPuts("\n", -2);2 v* y! s  o: {2 r  f* l4 B* e
0 N2 p0 E: s" H; t$ ]% D
    if(ch[0] == 'y')
; m3 x" U3 q3 `# |( V    {6 \3 O3 s9 f; J" X; D# t) V  v
        /*打印全部读到的数据*/2 p3 L: c8 n7 }& s
        for(i=0; i<upp_frame_size; )
8 B. p+ r: `1 T2 Z        {
/ u7 a5 F$ x3 t& G, U! D, a            for(j=0; j<5; j++)
! O  l  p0 d. V, a  d            {
1 H' ]8 r9 a, S5 M/ a6 n  z                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);, m* [" U4 \. Z2 |# \% D
                i++;0 `: a9 V. T. C
                //if(i >= 4096)
+ Z6 r+ d. E& s8 U/ {                //    break;* t, v; n- U4 z" s" e0 T* }
" c) O( z+ }5 R
            }
4 W, b( V& N5 p( I7 _/ N            UARTPuts("\n",-2);/ v8 s7 o. `+ x
        }
- p8 [# v7 u- w; y    }) K$ R0 e, n) F& A
, r. u9 g- k2 O- c3 L$ u* K6 y, D
}
* z* R( L5 i$ Y( g

% l1 m- K7 u1 `$ M2 h
/ `1 f9 E3 x' Q; b  k/ g
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 P& I) ?. e9 ~. |
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 d6 G: Z' q# z% e




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