嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?) o: Z" \' A1 @4 s
Void UPP_TASK(Void)% j2 p% c  h# G& Q4 j1 _
{6 {+ L$ q5 \0 X! y# s# ^% C

" W3 i+ f. r4 }    int i,j,k,target_int_count=2;) l7 e& K1 h6 }2 x
    char ch[2];' a0 ?- X, ~! l/ [  Y
  X, y, U8 k! ?  p1 l

4 q4 J/ w# Q3 G* V$ }8 O( _' M7 z5 V5 L, w
    upp_interrupt_count  = 0;! w  A  F3 x7 \4 s% P8 C
    upp_error_count = 0;8 u& \* o5 l$ m: @0 g
2 L% U7 R' n" a# ^# d; F
    UARTPuts("\tResetting uPP buffers...\r\n",-2);) R" p* L. J) i6 G4 Y8 j" G
    // Initialize data buffers
7 Z3 u) v, a% E1 m+ F9 r( ^  V    for (i = 0; i < upp_frame_size; i++)
  [- b3 c, A) t5 ?; V. N    {
: F3 R4 S- Q. @9 t       upp_buffer_b =i;+ @' R  x- h. S$ M  D* o- j/ Y
       upp_buffer_a = 0xDEAD;
; a! t! ?5 H: {% ^    }$ E2 R: x! `+ n9 n/ i$ t: @4 G

& B1 x: _6 u* Z. c+ [, z    //for(i=0;i<1024;i++)
2 x0 J8 v6 w2 g/ d( U" A( w- [4 ?    //    temp=0;) D: z& p% Z/ [+ |7 c  O

+ N, Q# H/ T1 g- `! J! }    //UPPReset();
# d+ B8 r8 i& O/ Y+ A    /*启动UPP DMA传输*/
" o6 F( q$ y& ~3 a: S& V    UARTPuts("upp_prog_dma_i\n",-2);5 x: D6 e& w% g1 x3 F
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;1 |7 e4 B$ t5 C$ `
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 C0 H: \+ I1 z0 c3 i    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. C. Z4 a: K1 w5 t% p% N8 C" S/ o1 R3 ^+ x3 U0 q3 i
    UARTPuts("upp_prog_dma_i\n",-2);
: ]0 e/ e. F. c5 ~5 M3 [+ `    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 O; e# e* \9 Q2 k3 g' S    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% G+ {5 M: t  ^7 R# t  ?    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);3 f  K& W7 \( p0 C6 Z4 S" U
8 N4 B  e1 |# A, W
    /*等待UPP传输完毕*/9 V* j( [, U- X- x4 P, m
    //i=0;
: D0 d, c6 c  ^& Q' K2 v    //j=0;
4 S* B; J3 c# F+ _! d" C    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
3 }/ M5 }) _. a+ J3 a    {
2 r& {  Z; y! j& ~; d        /*  测试UPP传输的同时操作普通DDR数据! S- d9 B, Y9 \, \: V$ |
        temp=i;
* ~2 m% o3 m& `/ s) y8 F        i++;- Q+ r$ Y. m# i$ p/ f
        if(i==1024)
- ^, ?/ z6 z1 _( c! X' Z! C        {/ ]1 x. ?1 f) g3 |9 w* Q% T
            i=0;3 j1 m( I; d. m0 q
            j++;  J0 X; R- b' V; R/ y
        }
( z4 z. ~* O3 z; l4 ^2 h% u8 u4 u        */
. a8 }. a% ~6 z: P& E' n
4 v1 y! q! R3 n- |# K1 r       asm(" nop");( C5 f( v& |+ h
  J% |) ]4 l1 e( S
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);, t' w7 H, @5 R4 w7 N
    }" O, n( X& G( C/ J, K% ?9 ^+ f+ ?
! a8 L/ G! g4 N7 o1 @) g
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
0 C# q, m0 Y1 B+ S* _  a# y    //UARTprintf( "i=%d\n",i);( q) U$ s$ n' E' g! |
    //UARTprintf( "j=%d\n",j);
7 V- \4 U, }; E' }2 w    UARTPuts("Data mismatch in buffers.\n",-2);
8 E( p8 d0 U: z( j9 C6 w0 R5 B2 h    if (upp_interrupt_count == 2 && upp_error_count == 0)
  u/ L8 X. e4 N! p/ u+ `! e0 x. q    {9 n/ t) J/ _4 s
        for (i = 0; i<upp_frame_size; i++)
, `; M# s, w5 E1 s! ]/ y  @        {" b7 N2 V- c( o; d7 |
            if (upp_buffer_a != upp_buffer_b)
/ f! X6 @+ ?! B: A            {& F' e; j0 g$ C$ q
                upp_error_count++;' n* u% [( [5 r: Z5 s4 k1 a
            }$ K$ t" I  G5 ~( a# W: |
        }
+ F5 k" u4 v  D( {    }" j7 c  X+ ^3 s; N7 m0 P5 s( D

) g( p4 @5 ~/ }7 `' _+ x+ x    /* 报告通信结果*/; r; X( q1 H: z( S- x, \+ V
    if(upp_error_count != 0)
0 p* h* k7 q5 B* q7 f0 n        UARTprintf( "upp_error_count=%d\n",upp_error_count);5 U- E$ n/ }8 l3 ~. b# {
    else
  Z+ {+ _6 c) T: d: @1 c        UARTPuts("uPP transfers complete!\n",-2);$ t& b2 S/ F" M2 I  j7 P/ r

! q4 E" ]8 ?6 P' q5 p0 k    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
0 }: i, M# m, T    UARTGets(ch,2);: ^! W5 ^2 @$ r* c
    UARTPuts("\n", -2);% O8 S7 y) W1 g" m6 y
/ K4 p$ \' ]. T7 O
    if(ch[0] == 'y')
& k( t. I) [; ^- e2 c    {
& i2 ~2 Z0 v. w* I1 v  u: x        /*打印全部读到的数据*/2 l; f/ Q4 n! [; I8 j$ j/ J
        for(i=0; i<upp_frame_size; )9 T& x( Q+ p/ ~" ?
        {
, D$ Z5 G! S6 L2 Y1 e            for(j=0; j<5; j++)% f7 ^+ f* {( p8 n( G
            {1 {' s# E  L" P9 ?  `9 p; D' `
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);& H( s* U5 f2 }
                i++;
8 q$ m2 O9 W, H                //if(i >= 4096)
: L# s  U  n/ M5 F( Q/ u) ^                //    break;
8 _3 W- W" X, a+ w" s
& h* ^4 y+ v, W6 |9 b2 v. r- ^            }
8 p& E8 r9 A+ f4 X- w- K$ b            UARTPuts("\n",-2);
  t+ I( e! V( h( o( L4 }        }+ b5 M# d2 N0 v: G' }- M
    }
% O1 ]' b) [1 B7 K; ^1 ?3 z5 K4 E) p% p% r, {4 Z
}

$ @/ m; q% B: @2 ~
0 X% d+ B% w# ]5 t- T# b. J, T

3 ~0 }* R# J1 V' E) O0 A  I
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
  O; j: A2 m' V5 @: m
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 I$ y+ X1 n4 O6 {# W/ W# a2 \




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