嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
; T3 S$ b) @3 F# f4 u* J9 h
Void UPP_TASK(Void)
% z0 q/ @/ b  [9 k7 _8 X{
+ L7 r3 U: b8 Z, W# U' v- d3 M* l% u  y* c6 ?2 e
    int i,j,k,target_int_count=2;
% [/ A) ]4 |; W$ a    char ch[2];6 Y9 `- J' e# d0 x$ K( I/ D! `

& b0 v# Q8 }9 b6 P1 Z; J/ N, J- n) [9 ?/ Y+ z

9 Y5 w6 H) O1 b/ B+ _    upp_interrupt_count  = 0;. O* T: _4 }9 k" |& |: j6 l- N
    upp_error_count = 0;
; W; z9 C4 T( g# d* e
, N* z' d$ H1 S" l. |* _9 y- {- W    UARTPuts("\tResetting uPP buffers...\r\n",-2);
) ]8 X6 Z) X. }3 |    // Initialize data buffers
0 b, d2 y& P6 I, X0 H    for (i = 0; i < upp_frame_size; i++)
0 H, S6 I6 {$ w4 `& @1 G2 W    {: ]( N8 Z% L/ E+ L! p
       upp_buffer_b =i;
! d: h# j5 ~2 b* `& b2 f$ |       upp_buffer_a = 0xDEAD;& H8 K  X# q0 R5 T1 s1 D  ?
    }
7 ?' q' N! M4 x1 [4 i5 K, E1 k+ @$ J- I. u. j* i5 q% P
    //for(i=0;i<1024;i++)
% {/ a. [' R' O3 K9 @9 U7 x' S- r    //    temp=0;$ @- ^2 _4 u2 |/ E, {- [- M
+ ^. A9 ^- |( N2 d
    //UPPReset();+ C( S7 a1 ?0 u5 z6 c* f* I: m
    /*启动UPP DMA传输*/
2 B4 |/ o' X2 V: h4 L1 t    UARTPuts("upp_prog_dma_i\n",-2);0 v& e! F( C; m1 c
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& i- r. X) `% A- C# S# z/ W    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! I5 J( m# R# V$ m    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);, P$ f3 @1 `9 Y3 r' ^+ u* @

' w8 U0 l1 \5 [' y: F    UARTPuts("upp_prog_dma_i\n",-2);
# Z$ O( ]: T2 z    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;& V  Y" m5 N! k! d, q  R
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);) {$ V. q# h9 d0 n, K
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);8 M( a& Z. h$ q9 X: a0 X+ e
% C; z& U/ {, S
    /*等待UPP传输完毕*/
9 s0 J$ G6 G# H9 m, w  _  i. p    //i=0;* m: J  V& r" F
    //j=0;9 y4 i- `! y5 G! F( A
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* b, L7 d& \( a    {
" `) a' ~" I% v        /*  测试UPP传输的同时操作普通DDR数据
4 U. y$ j8 w6 ?) g        temp=i;
7 @# d/ a+ R# c  |0 N5 ^        i++;6 `. I# k+ U5 c2 `. l8 e% i& G
        if(i==1024)
9 v' g# d' g4 l+ j# P% t) [        {
7 ^, |, g& U8 f) ]1 r; d            i=0;1 F* J- T* \7 k
            j++;
( Y- F' e( M6 \' [. S- w1 v& x        }
: }# Y* o2 ?6 m$ y: K: _3 W" t9 B  D        */
0 R9 M- Y7 y5 Y3 s4 H6 ~
$ ^8 [5 {& S# P4 \: Z       asm(" nop");$ }; n3 K8 [  {; D9 ~) a
" E; s9 f) c2 S1 C( ]+ `/ b
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);+ C, M' F4 x; Z3 T4 f% I$ V
    }$ j: S* Y' q2 E+ s0 o

8 t4 G0 d9 A: t3 b, C* K7 K    /*检查UPP传输的数据是否正确 (loopback modes only)*/. a7 i! l+ c9 x6 s' R' Q
    //UARTprintf( "i=%d\n",i);3 b' V  v. m" C4 G
    //UARTprintf( "j=%d\n",j);
% m( |+ x) Y" E: c1 G# V    UARTPuts("Data mismatch in buffers.\n",-2);- p: ?+ Y, t; @, h  p
    if (upp_interrupt_count == 2 && upp_error_count == 0)
( u4 u! g) ?( @& ]    {# H* _0 @6 ]) t7 U; T- j, E
        for (i = 0; i<upp_frame_size; i++)' C3 m+ T% t+ e) d' K) D* ~
        {
2 A# m& b; V9 J3 m% v- y* y            if (upp_buffer_a != upp_buffer_b)% E9 Q) K: n, s
            {4 b, |; w  V7 v& L% y7 W/ F% y' t. w
                upp_error_count++;8 j# j! _: s4 {% ]. i: `" C. R
            }6 F2 T" z: e. D
        }
' R$ i& R7 V8 W/ M) ]0 B    }
! |3 G" v; j, ]$ R! b! P4 b) D. d
    /* 报告通信结果*/
* ^' ^2 S9 ^8 H    if(upp_error_count != 0)  u* d5 P9 b: \6 z% e* B) }
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
( G+ X4 b- W9 J2 U    else
8 F# ]; s, a2 q8 f        UARTPuts("uPP transfers complete!\n",-2);
5 I2 v" ]; B1 t! g& H! y
. f) P- P/ ]) ]" v6 u    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
& c: J7 s% D1 S1 Y) o    UARTGets(ch,2);/ ~. O2 Q# [& F  t/ {6 E# g
    UARTPuts("\n", -2);8 i; w: {- r! p' ~# N- C
" u4 y* |6 ?  K6 q6 t: A3 ]
    if(ch[0] == 'y')3 V% D" j0 g4 J) Q
    {' T8 `# ^+ j2 z3 }' \
        /*打印全部读到的数据*/
+ ~% v$ W8 k5 v9 x7 ?) A: P2 p        for(i=0; i<upp_frame_size; )7 x+ a$ l* r7 W+ P, e$ Y/ S9 t
        {
, Q  C! c" D0 W% Q/ z            for(j=0; j<5; j++)- p, W8 R1 f1 L1 F5 U
            {
& [( L7 S; D1 `: A/ f                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
  @  v( |0 S( E" N                i++;
1 P; n1 l5 t, n" b( W- E$ J. ^0 l                //if(i >= 4096)
. E4 [7 ^* W+ ^( J6 @$ G9 U, v6 t                //    break;% _4 u" h, @7 [2 E% Z5 V

+ \- g" W" d: j8 H4 `            }, P" H9 h/ k0 ?
            UARTPuts("\n",-2);
$ [& o  M! J7 E5 R! }3 w5 C        }
; O- m1 x+ Z, l( `6 h: b) D    }
1 ^0 g! j7 l  {# m# R- @' f
' h  F6 R# d( l& G+ A& E/ h}
' E2 K. V- f; W' u8 e+ _
4 N2 A+ Q& B, D* M

) n# j0 B9 g1 I# t" H) d% T" L1 e
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。+ R6 T1 U' S; m) P$ w

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 T+ x, V7 \+ m$ Q9 {5 ^* j& B2 R




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