嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 m! B  M; }7 ~% p/ H
Void UPP_TASK(Void)
# T$ s. f, w; u3 [6 ~0 P{) t, a8 Y" a8 o/ H
9 z  ^8 W  s( C) x4 l- e5 d' n
    int i,j,k,target_int_count=2;
$ o# Y! Z2 ?& s$ `, K5 q9 P8 F) U: o    char ch[2];9 t/ l3 u5 A& V4 k; V( Q2 Z" ~9 P

; ~/ g, E- e+ N! I
( C4 n. S7 K$ Q6 x' X( j/ Q6 K6 }: P/ W5 H( Z6 A
    upp_interrupt_count  = 0;' n& |, _5 o9 X
    upp_error_count = 0;
! E& m  E- [' [+ t8 [6 j6 z7 V. J! c% ?: a* a
    UARTPuts("\tResetting uPP buffers...\r\n",-2);7 |+ V: z/ {1 g& [* L" X0 G
    // Initialize data buffers
7 B" {2 M. v7 s9 s- z; R    for (i = 0; i < upp_frame_size; i++)
1 e4 t4 ]3 M0 W3 _( `7 k$ X    {
2 |; B& f4 o' N& A3 g, J( w" F8 ^4 n       upp_buffer_b =i;2 z1 h5 H8 B* c
       upp_buffer_a = 0xDEAD;
6 p8 b( F: i4 G8 ?' V9 R- _    }
7 q  u  |+ s/ r% y2 h( M- ]
/ w2 v! ?/ D( G9 T2 S" D' W    //for(i=0;i<1024;i++)
- |, e- N0 ]: s! _% q& e& O    //    temp=0;
& S$ ^* \6 {7 j. d' `, ]: \; `+ T% {0 m; f; v) Q
    //UPPReset();8 W5 ~: z8 ?6 T1 K% S& }
    /*启动UPP DMA传输*/
" `( v2 O, N$ j' Y0 K    UARTPuts("upp_prog_dma_i\n",-2);& p8 e" u0 `% [  l! o$ a
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 p4 P2 F6 E/ f; k    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" \: [0 Z3 z( Y" L5 ?    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);  s9 K" J' u4 j' q/ v

; v0 q( F' H5 A  l2 m8 U' L, v    UARTPuts("upp_prog_dma_i\n",-2);. u4 [9 }9 B+ q
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;( R' h( M/ Z6 d* ^" N- V# v6 h
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);3 v/ L  z, V2 ]" o+ u. h) n
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: K; Q( t" z$ Q' {; G9 H, W. I
0 c4 G2 i7 R& L; y3 ]7 v    /*等待UPP传输完毕*/& l9 q' @" t) E5 E& y) d
    //i=0;& \4 u$ w5 j1 C3 f8 }* c
    //j=0;
+ `! g# T. ]2 C    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# x" `- [) b5 a4 G) H# d+ N    {3 L7 n! e* x" d0 N5 l: M! q
        /*  测试UPP传输的同时操作普通DDR数据/ A% T0 Q- u, d2 x+ x0 \4 s8 U
        temp=i;
5 p6 s* k9 O- ~) M1 N$ O& k        i++;
$ q4 r9 U  T/ a& L. W/ S) R9 L  D        if(i==1024)
( p% \! I: u+ N  t+ a: g        {9 }) ~" G9 |5 h( e
            i=0;+ ^# o% E3 m. w" i0 e8 s
            j++;5 I' G& \9 l: U8 e6 c
        }
& D: h; ~. T5 p! O        */% a: o7 |" b% ]* r

1 [; v, J2 J* N0 ~2 e       asm(" nop");
, x# o/ ^! ]! `1 v! w5 r
- v. x: o) \' x) ]. L2 b" B2 _       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);" q( O# V3 Q/ Z0 S% I9 m8 ]9 q! q
    }- X- W! q1 F" I' E3 s) |( S
, ~3 [" ?* g: v
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
4 Z) _' V9 Y5 _" Q. \    //UARTprintf( "i=%d\n",i);# n, g2 N: K0 S' c5 p
    //UARTprintf( "j=%d\n",j);
% E+ J1 Z8 N' m' f, U2 ]. Y% ^    UARTPuts("Data mismatch in buffers.\n",-2);2 L1 Y: {% _6 @) K
    if (upp_interrupt_count == 2 && upp_error_count == 0)
& H' r$ r: J1 V    {9 {  T* [5 j: _1 j
        for (i = 0; i<upp_frame_size; i++)
+ a; J+ \0 }0 b: E        {0 B0 |4 [  i8 a( i# {; O: o
            if (upp_buffer_a != upp_buffer_b)
( m# x; P5 E5 y* i1 E& _            {- @' H+ T& ^( J
                upp_error_count++;) T; B+ Z8 U9 X- a5 |+ h5 U
            }% I( ]) k8 ]; g! y" t  l$ `
        }
+ L- O# g; Y8 h9 H! x    }, N% e5 f% S, A

) a) E) U2 e2 u; L- @    /* 报告通信结果*/9 j4 R+ E4 a& e+ l% A' b1 G% b; A
    if(upp_error_count != 0)0 [% x  s- l6 x# m) h" Y6 w+ x- U
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
* g8 E6 Z& n+ d    else. r6 h$ Q5 w% ?0 j% }; I
        UARTPuts("uPP transfers complete!\n",-2);
6 C% K4 O7 W2 a2 A' ?1 N3 c' H# L
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);% I+ G8 ]2 R0 v" E
    UARTGets(ch,2);  |8 H6 v3 v9 u) \3 v
    UARTPuts("\n", -2);  J) ?4 A! e( ]" D0 D5 T4 R, i5 R

! A9 s7 L; G3 P, Z    if(ch[0] == 'y')
8 q: j+ \( K5 s" {# \    {
9 U4 U) Y+ U  J! C# ~$ v7 N& Z& V7 {        /*打印全部读到的数据*/  G& |" G$ C7 _! c9 L" Z# G% M: r
        for(i=0; i<upp_frame_size; )4 @( P! P, ]8 q4 s% U0 Y
        {
3 y6 }& }8 ?, R3 Z! ]1 `8 j8 g            for(j=0; j<5; j++)' d2 K; J- x" c' M2 z( G/ ]9 s
            {
9 k; Z7 A* P1 r3 ]                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
* A" V2 z1 s4 u6 _, h. J8 D                i++;& ?- l7 w/ Y5 m% M4 g1 ~
                //if(i >= 4096)' n- ?$ X5 r/ j* Q' b% d6 o. u  ^
                //    break;/ t$ ^4 k( d3 D% m. w$ H% b! x6 w
; _+ V8 o0 T0 _" R
            }# @4 s+ T: G5 o8 `1 j. l
            UARTPuts("\n",-2);, u$ O+ \( X  c7 V2 L- l( V5 h
        }
& C( d5 t( e4 k3 M; s- J6 i- U9 P    }3 h0 ]( x; d( i9 g. D7 ~
- d1 W2 x7 W: i; s! F5 f
}
; L& D. j8 H4 E

0 z( h; e' G9 T3 x+ v5 V" k7 e; G

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 B# {( X& m. `8 }5 A, Z, k7 r
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。2 ]8 a6 z! q- v( L( G0 o% u





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