嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 D5 Q+ F, [% E: o9 q! m# t8 x
Void UPP_TASK(Void)
7 f  o8 h* a( |& S{% c  _6 l6 i, e7 `. k: I4 k) P6 n
( u1 l& }# Q, \4 ^8 h
    int i,j,k,target_int_count=2;5 ?% h) I& y7 ?3 ?9 y+ P4 r/ n* T3 o; y
    char ch[2];
+ H! U1 b& V  X: v) D% L' z# r1 }& ^8 w4 B$ p

6 j- _; |2 {- `1 q3 J4 M" D$ c0 A- d1 x# Z0 Z; \" F$ r2 i
    upp_interrupt_count  = 0;
0 ^6 P/ @: H" j7 \+ ]" z- B: ?    upp_error_count = 0;
, a, z& _& @# D0 \( k$ r- f& D# n; O0 ?( y
    UARTPuts("\tResetting uPP buffers...\r\n",-2);- d$ r! e; }6 O2 ^
    // Initialize data buffers
. d& G' n& M9 C    for (i = 0; i < upp_frame_size; i++)3 w! G4 y, [8 h, v, R. o! j
    {
- n  [2 N8 z/ z8 t       upp_buffer_b =i;8 M; k; C. _. A+ _9 P# W
       upp_buffer_a = 0xDEAD;9 |6 j% A6 _* F! e) U
    }
2 A; \. l( d4 u" Q4 E) z- V
+ X2 a, ?3 s: P    //for(i=0;i<1024;i++). ]# r+ U- V3 D& I! n/ |! t
    //    temp=0;
8 O! E/ y( y$ o  ]) ?+ v) X( k
    //UPPReset();+ h4 D) n2 ^/ \/ i* ]( y
    /*启动UPP DMA传输*/
3 t8 e  s6 M5 W; Y    UARTPuts("upp_prog_dma_i\n",-2);/ u6 ~% _4 O6 E& w
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;7 j" o' u4 t! r, G& ?
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 Z( C. C4 R, n  v    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);. ~6 G" F/ Q0 p: q: f7 m
7 M& A# _4 L. O8 F
    UARTPuts("upp_prog_dma_i\n",-2);
5 |- K! _- n5 E5 @, h3 O    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
6 e* c& H0 {  ^0 ~    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);: q  y. I  F) L( f
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);0 k/ I; S2 i& M  V# Z. n* q4 a
) ^  c1 k/ b. B( r9 w  d; K( p
    /*等待UPP传输完毕*/. o& x6 k8 J3 X+ e( O0 p. Q0 x! i& W- g
    //i=0;
! ]9 c$ O* g$ }; T    //j=0;  A* W9 e* X7 K, L1 R
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% _7 |* G* ]% U* _' x    {# `* H: E+ V7 \6 b6 ]
        /*  测试UPP传输的同时操作普通DDR数据! s# I  A" [) k
        temp=i;
' @! N- N3 h1 z        i++;
# @, x$ J) l) r$ X        if(i==1024)
* O- Y( m+ T6 F- A% ]        {
7 Z1 X4 k( R  m+ B' `* B' G# o            i=0;: e) {/ f& |) [- X% C3 s
            j++;
, y9 ?, g6 `+ g( k! l        }
0 f+ x8 }6 C) G3 U, s- f        */8 e1 s2 s; d/ i9 f: f2 D! M& Y
' I. |' X: {* M6 q) Y
       asm(" nop");. Q% f$ K4 f( Z

8 g+ l1 U' }3 o       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);% \0 u8 A/ T: q7 V  }
    }
& j. Y" K+ y- a3 t* s2 K" m; q) F. ?
    /*检查UPP传输的数据是否正确 (loopback modes only)*/6 ~# X! ~# C0 j3 _. K" \* n" b
    //UARTprintf( "i=%d\n",i);
! B8 ?- O+ Q; e9 r1 A    //UARTprintf( "j=%d\n",j);$ g  g" P4 h3 r; e
    UARTPuts("Data mismatch in buffers.\n",-2);. o3 ?" W2 s$ h% C
    if (upp_interrupt_count == 2 && upp_error_count == 0)
7 Q3 X5 V9 ^1 P) W, `0 C8 G3 u    {3 n* H+ U0 g  d  s) T) l8 v8 M# F1 \
        for (i = 0; i<upp_frame_size; i++)
) B/ M  z/ j1 F5 |' ^6 c+ L        {3 e/ q2 G( D8 E! G6 C
            if (upp_buffer_a != upp_buffer_b)
2 Y. s) x7 k+ v            {
3 z: z! I4 K4 q2 P' r0 S" K3 I( E                upp_error_count++;) R3 l# ^- {; ~$ J
            }: {$ |4 f. k& L0 _" U
        }3 R& f: E) w' `) g" k1 y5 [
    }
+ K" _  y: B4 `' B% z# m
4 S. y6 M4 g& `8 G* T" ]    /* 报告通信结果*/' Y, G. d' ~* s: y# W, p0 h
    if(upp_error_count != 0)0 X- `9 m8 X6 T4 n) I) Z
        UARTprintf( "upp_error_count=%d\n",upp_error_count);3 N. d( ?. H1 N  @/ g8 {) X
    else3 H. {7 V: `: j
        UARTPuts("uPP transfers complete!\n",-2);
1 j& W/ `4 u$ d& H" e) P. t2 ~) \! p8 y% O
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);' d% M8 f  ?/ t( I4 A3 O  D
    UARTGets(ch,2);
% |% P" q4 ~9 z    UARTPuts("\n", -2);
5 L) a: T6 E( N" R' N$ L8 g1 X
# i5 h+ y5 B2 P. T% ?    if(ch[0] == 'y')4 ?) Q( X$ V6 F: a4 A
    {5 @. z' ^. m  _. V9 L4 ~  o( l
        /*打印全部读到的数据*/
" I7 _8 v3 t* \7 V: N' L        for(i=0; i<upp_frame_size; )8 |( k- v; b# Z8 V
        {
  @1 o0 w8 P2 @' q( q* y7 ~            for(j=0; j<5; j++)
3 T0 L& P/ B3 `& S) x            {
' G) w# B0 }9 H0 L5 `9 C+ `9 d: M                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);" {9 X, ?! [; {- F" r" a! ?5 E
                i++;
6 e2 ]/ |6 w6 |0 }& N                //if(i >= 4096)
2 |' B; H+ g1 W: q; R                //    break;
' j" ^. Q1 `9 N1 l0 d
% C% y, ~. F: p            }
) |, J$ R  P8 Z$ W' I4 l5 G9 \; H            UARTPuts("\n",-2);# L8 y0 s5 _* F
        }
# O* r; {$ a& [, D6 Y% f    }. A( h7 S+ U* J# D  c! e
+ }6 g/ N$ t) g" k& H3 K; j2 b7 k
}
+ ~& [$ j: X2 X  U
/ D5 F# o# r; ^$ U$ K+ p' `
  `; _8 n6 Y* u; X5 v: I0 E/ ?, }- S

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。: k! ]' ]" a2 G5 n4 _1 S3 j

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' F! ^5 ^! }- e/ X




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