嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
) H8 `6 J# O! S* Z6 L: ?5 I
Void UPP_TASK(Void)( K% i) _( P; ?# K5 W: F
{
- z* `- X/ R$ c/ b' Q6 F9 z; F1 r. M3 j
    int i,j,k,target_int_count=2;
* x5 ?- k% D' F& A2 O- c& }    char ch[2];
+ D  P' B) P, D9 W' m4 c2 X9 _3 ?' _# Z* d" [: V. U
- p4 ~" r/ V4 U, j  O2 V
$ ~  {) V+ G8 x+ a9 D+ }
    upp_interrupt_count  = 0;5 T& I" h# L1 Q0 W: K
    upp_error_count = 0;
$ s7 T: ?) a; m- b6 {+ h% K: C
; }5 d9 B7 z# H- [    UARTPuts("\tResetting uPP buffers...\r\n",-2);
& V, {3 S+ A/ ^    // Initialize data buffers
5 G6 j" B6 E! g. H8 C0 T' |  X    for (i = 0; i < upp_frame_size; i++)
5 {7 y9 C- P+ h9 u. J. u    {- u$ n$ l, o3 _; \+ D' V4 X& y
       upp_buffer_b =i;' r: N- b3 Y, B& L- D+ Y1 U
       upp_buffer_a = 0xDEAD;
( d: C! G- J8 l    }
" j6 |- }) j* j; E( V3 I4 ~
% b1 p+ P7 \/ O    //for(i=0;i<1024;i++)/ Z' S  X9 g- H& T! F& F7 C4 J, Q
    //    temp=0;( x1 T) g6 |+ E( f. i
- r5 C8 s( ^" r$ ]& m3 _
    //UPPReset();
+ l; E4 u5 M! E    /*启动UPP DMA传输*/
0 g1 B% J2 K/ P  W& R  U    UARTPuts("upp_prog_dma_i\n",-2);2 x; H8 r$ J0 ]1 L# u- N
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;* _8 e* c0 m- L/ T2 I
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);1 S! I' J( M; V' \
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 A. C0 _9 S& I& S# G& E8 ~! ~; [4 x, v. B4 X- e
    UARTPuts("upp_prog_dma_i\n",-2);6 N" r' h% W7 `- R
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;, _) A0 M( `) F, H7 ~
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: O8 a6 B, E/ |7 e  F6 b    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" i$ @: l) d# o$ ~
5 H8 l6 `( \4 ^! Q8 `, Z& {    /*等待UPP传输完毕*/
( o. T0 @1 x) \& T, P% K    //i=0;7 O+ d6 S/ T) k
    //j=0;, F9 {3 R, q  ~- V; Y' f* g7 A
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
; c8 S# A9 d9 P' w' E' U; ?% B    {
* |* g! |( n9 j5 S+ r' B- l8 s) m        /*  测试UPP传输的同时操作普通DDR数据
& u1 k) Y1 |2 l3 i        temp=i;
" v+ p( v# E# ]+ s1 C) f        i++;
6 o' c( s* c: h1 L3 g        if(i==1024)
/ X& b8 n( E: w) X        {) F  ]& E) g7 O8 q5 Y
            i=0;
; ~9 R9 y' A6 f8 d            j++;0 E. E& Q/ G, z; @) j" X& }
        }0 n/ B6 m, x+ k( V
        */" g! _/ i+ L1 J& |( z; z: |9 \& }
5 y4 b0 d/ q1 L
       asm(" nop");: v6 T9 V% T9 d$ v* v) h9 q0 ~8 I

1 U' E5 A4 b, |+ |4 g' n       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 \0 ~3 R& Z0 m5 H4 l    }
* Y% F9 f0 g" ]3 v6 o) K% v7 N: `8 y1 g5 O3 z! q$ v( t
    /*检查UPP传输的数据是否正确 (loopback modes only)*/+ m. Q, ^7 \1 r# W* ~! M
    //UARTprintf( "i=%d\n",i);; x9 f4 |8 r1 ?
    //UARTprintf( "j=%d\n",j);, P2 o5 b% U- h2 i# M
    UARTPuts("Data mismatch in buffers.\n",-2);
' W- l+ |$ ]2 I  N    if (upp_interrupt_count == 2 && upp_error_count == 0)
; N& X, J5 }( Q    {$ G6 E2 E! S; s" R' @7 _7 K
        for (i = 0; i<upp_frame_size; i++)! K9 Y8 E' @! q8 V; _) `
        {
. i( o6 {& O* r# v7 P, Z            if (upp_buffer_a != upp_buffer_b)
; V" e+ V& E3 X9 v& v            {! ]5 s: n- m( P1 ]& [
                upp_error_count++;
# v+ U; Q$ `  ^4 {. c' X  c            }
  ^" _% |/ ]1 p( L: y+ `) q        }
% t4 M# X8 J& a( h6 r; t    }' x0 o' S- A- n, J4 r) |; ?
- }$ C! y  g/ c1 g; g' q
    /* 报告通信结果*/" M/ {; T# o  w: X: L
    if(upp_error_count != 0); J7 z* V# g+ h( F
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
7 D8 p% H% ]$ ]3 L# t9 U    else. k5 S% X# j" e0 E
        UARTPuts("uPP transfers complete!\n",-2);2 h, I/ S. S- y- M/ N/ {8 n( d8 C

  d# f+ b: W1 F! I! u5 c% C    UARTPuts("Do you want to print all the data?(y/n)   ",-2);' J5 }+ ]3 D' \7 q9 K
    UARTGets(ch,2);
! G& L& z7 b/ Q# _/ L) m" T    UARTPuts("\n", -2);2 K" W# [0 G) {" `$ c- T5 f/ L' U

/ l7 Y7 j2 P) x' k2 f$ G) J1 w    if(ch[0] == 'y')$ q6 k( @. T. ^8 E) C) A
    {
/ Q3 b* l1 a( P( b        /*打印全部读到的数据*/
: P3 p+ s) W- u: ?/ n$ I        for(i=0; i<upp_frame_size; )- F# _' L& ?. l5 P+ Z/ h+ k
        {
# e6 f7 Z( B' B0 n- n            for(j=0; j<5; j++)
! @/ p+ F5 k8 H9 J! s% ~: V; H            {. x% _/ a/ E& g
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);  ~! t  w# ^$ @3 @% _* C* R( o
                i++;" C+ }( \* v$ U. \
                //if(i >= 4096)+ a/ O+ [3 k' X) a3 p$ z9 s' A
                //    break;
0 o1 x9 d0 q' U* {8 m! G' |0 q; O8 @$ c
            }
- p& c0 ^& r# d0 j( c' N            UARTPuts("\n",-2);1 T& e6 @7 _% K( f: o
        }
& x& [- |0 C  D  o    }
: u. Y- T( @6 o4 X) H
0 m$ w* ]( P2 q8 ^}
6 D6 Y* f; N, x9 `% O  o

$ J/ ^# D0 ^! U. J, M3 b
& _4 ~1 U$ O6 q( \/ T! i8 y7 l: z
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
3 R, o$ j, m; T
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。# v$ u3 y; f( r& z+ K; M





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