嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?1 `5 D# x8 s4 [: c9 G. U) J% j
Void UPP_TASK(Void), K$ c0 s; A, C! ?4 R. ]5 Y
{% X4 \+ W9 s8 A2 J
7 p: Y1 G. W: q
    int i,j,k,target_int_count=2;
, W7 l7 Z( ^% J1 e. h+ P/ H    char ch[2];
* E6 m( q* @& X
6 O- }8 b+ e  K2 o) J8 N+ ~( o2 o, U8 b4 q: w6 Z) Z5 A+ y

; L/ X& `( F; O" l7 @    upp_interrupt_count  = 0;
- P) H% H1 u0 O# r) `8 c    upp_error_count = 0;
0 r9 i& U  I! X  z; r& L2 {+ T) F" M5 `5 m
    UARTPuts("\tResetting uPP buffers...\r\n",-2);4 l, L0 q0 A* t
    // Initialize data buffers
6 _8 O: ~' E. I" d8 ]6 ^/ z0 t/ \    for (i = 0; i < upp_frame_size; i++)
/ I6 L+ V7 _: d    {7 B6 \( J2 ^1 X9 ]' o  j4 U
       upp_buffer_b =i;8 N8 l7 j! O( N3 X! F- _8 }
       upp_buffer_a = 0xDEAD;
8 w4 H/ v7 m& L# k# j    }
* _7 N3 @: K) W% i8 w7 B0 B& V& R" N9 S& ?% r( _: u/ Y6 i
    //for(i=0;i<1024;i++)/ B- N$ G# E3 }
    //    temp=0;
, L# x- d7 [" l6 a8 {
" W: `: R+ G. ?, F1 M5 V" G! V7 p7 s    //UPPReset();
& u- j  \5 i2 T4 Z    /*启动UPP DMA传输*/
8 L5 [0 U9 _$ W' b0 H& ]8 T    UARTPuts("upp_prog_dma_i\n",-2);5 k. _/ d! Z# J) X) e$ v
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;( _# ]0 m* o3 P6 Y7 R
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 g5 h1 ^' X1 A" ]+ g    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);$ `+ n& `+ @& ]& c6 N
0 O5 p& D, E7 J$ D
    UARTPuts("upp_prog_dma_i\n",-2);- m2 x- v7 X- {- b! k8 e
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! n- A8 E  r9 c& S4 t" b7 ]0 Z3 @    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, t" g% j  w0 f9 o" r( a    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);; ?1 q, k# Q% p; j/ Q& p, p! t
8 J8 [- g: P  f3 ^7 B; ?' b
    /*等待UPP传输完毕*/
3 d" ?- p( I' `% f: F# [' C    //i=0;& r. _" B/ f5 W$ ~) k
    //j=0;0 U# Y' B3 M2 L
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)! F7 \9 A& s, m3 {( ^6 r
    {! ]8 m8 T" B0 R9 n% p' u; {4 l3 K: u
        /*  测试UPP传输的同时操作普通DDR数据/ N) x) L) [* b0 K" C" e
        temp=i;# i, g+ @6 `! U
        i++;5 C7 c. |) ^1 r" L0 C
        if(i==1024)) G& R0 F6 d3 K0 u
        {
7 C3 f# J" J5 Y2 [9 K& X& [            i=0;0 O' ]1 y% y+ E$ M
            j++;+ v' N9 W( P( B$ A( S" P+ D6 o5 \
        }
7 l0 B: q  P6 J: V) U- q        */: J: }, n+ Z6 w' L; B

0 Q: B9 Z# b- u- V' D2 e. ^3 `       asm(" nop");; e2 U3 A& k. [8 ?, P& ^
5 z1 W0 V* @- V% v2 T4 q( E
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);, D% b$ x$ T3 U+ r7 z  P. x
    }0 y) \! y4 e' [& d) x( C/ ]

3 t4 G+ N6 C$ l& p# P    /*检查UPP传输的数据是否正确 (loopback modes only)*/
# [" h, G. h8 f  I; x& e! A    //UARTprintf( "i=%d\n",i);8 [6 z  c1 F0 x7 b7 i5 T( A
    //UARTprintf( "j=%d\n",j);
6 J  x: o% Z! w% W6 q% ^7 S    UARTPuts("Data mismatch in buffers.\n",-2);# k  B. |1 a  z; F8 A
    if (upp_interrupt_count == 2 && upp_error_count == 0)
# t& r# G1 n, B! [5 ~' z' `    {' e/ y" {. ~9 p/ X8 h; I7 J% H7 U) u
        for (i = 0; i<upp_frame_size; i++)6 u) C: t3 U8 v' d) L3 M0 x7 x
        {
* q7 }4 M4 F/ v6 p/ I$ |            if (upp_buffer_a != upp_buffer_b)( W) a: n9 o" h
            {
8 c: U! T* q+ E5 x. d6 \                upp_error_count++;
5 _" J, s9 C! N" H# O5 \            }
" f  r4 m2 v# y" B& K        }( a6 ~. ]8 @- l# q6 l  l8 y
    }% e9 ^8 o+ Y# ~& a
7 F/ m+ n; U: F9 Q' G
    /* 报告通信结果*/
8 Y* n& M, s- U5 D2 e    if(upp_error_count != 0)2 g3 D$ x1 C. `9 l& Z& ^* a
        UARTprintf( "upp_error_count=%d\n",upp_error_count);) s; P6 k4 A5 _8 C1 V
    else0 k! t2 N. e2 S. _; @: B9 F9 D
        UARTPuts("uPP transfers complete!\n",-2);
: o+ @( Y& _% C$ @
5 P9 {0 J7 e' D9 A5 Y    UARTPuts("Do you want to print all the data?(y/n)   ",-2);$ K. Z1 k; [& k; S$ d
    UARTGets(ch,2);
/ b5 o0 A+ o# ?* D: D" P0 }" |    UARTPuts("\n", -2);: p, Y' O# d3 o$ p6 h! G; P% P3 i
# b( y9 o' B) n
    if(ch[0] == 'y')0 O& c, Z9 k; f$ f5 n0 r
    {1 C  K  V- z' n' n% z
        /*打印全部读到的数据*/
' p. h4 D% `! M2 C# n        for(i=0; i<upp_frame_size; )
# _, k: W: Z( _        {
% M; e6 E8 _* K: b            for(j=0; j<5; j++)
" B$ _* v. B) b0 H/ k  q            {+ r. N) p8 N& j: b; o
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
, }$ ?- w+ z1 Q! G* X' G! i& a2 p! ~                i++;) B: X  X% H; W9 M* t
                //if(i >= 4096)
# X  U' s) u% ~0 Z                //    break;
0 b! H$ Q9 C0 l7 v0 y5 V+ ^& V
. D# \$ G7 Q. y" M5 s5 T            }
0 N& F  H( N+ H6 A6 y* p            UARTPuts("\n",-2);; I: j3 ^) z2 ~' [& I, l
        }1 T" Y* V$ Y4 j
    }6 z7 F! m7 U8 |! F- q( M

6 i/ }$ ^; y' T0 n2 f4 U4 N}
! t5 N1 ?4 P$ F; e, ]

6 D1 r: V0 O( j- Q1 u) F3 I) Z0 }' z+ d- H0 f* [  S

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ K' ^4 A1 g) X8 r4 }& Z. J2 F& T
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( }+ |/ O! t* q/ f& }- c) x- K




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