嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 g/ f+ w6 O8 D$ {% h  b6 k
Void UPP_TASK(Void)
5 S$ G- ~% S: n( \+ V, Z$ l{
1 g  p5 t; v2 u/ s, L$ _! N5 y* N4 w2 U% X1 V3 f! j+ n( u
    int i,j,k,target_int_count=2;! [5 X0 A, p0 l5 v' u
    char ch[2];
4 @$ c: |) F' ?$ K3 M; k
7 ^9 ~# f7 J0 R2 c: i: t4 ?- [1 l% l: I1 d2 V1 c/ l

" F7 h& t+ ]4 a    upp_interrupt_count  = 0;9 \2 `5 e/ o) K1 i
    upp_error_count = 0;
* ~4 m, C* S, {7 K! W
' E5 @; Q0 u# q) e) T2 p) F# r    UARTPuts("\tResetting uPP buffers...\r\n",-2);1 p* t5 H- R7 x
    // Initialize data buffers. J( R6 w6 |' [0 T6 j) U
    for (i = 0; i < upp_frame_size; i++)
& J5 ^& k5 t, }2 v    {
& N% x5 d2 T$ ]& P7 }" D/ z+ L3 A       upp_buffer_b =i;
3 f1 R5 @. v5 N" u       upp_buffer_a = 0xDEAD;
/ w% P: ]" u- @) ~2 B    }
+ Z9 ]  O! X0 R* f; f6 ?0 C
- G  k2 b! i6 T& i$ M    //for(i=0;i<1024;i++)' H( ?5 g5 z2 S' X
    //    temp=0;4 a1 F+ v; y3 P8 s2 Y7 M
9 v% o/ L( \. L$ S. q, ]0 z, u: t
    //UPPReset();
' q' k1 y3 v4 V    /*启动UPP DMA传输*/) s2 o+ B3 q  b  d
    UARTPuts("upp_prog_dma_i\n",-2);
0 I. R4 I; Y0 ]- K    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
. m+ w& J, `8 M9 ]0 c( F7 x2 y" F. h    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# {1 n/ h3 M; |+ s    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);- o" w& b( O, d( F+ {
& x* G* v" l4 N2 p+ r
    UARTPuts("upp_prog_dma_i\n",-2);
; @: [$ `/ l- m5 o    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;' L: w6 X: R6 i
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ G* Y3 `2 K$ J/ k& [    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" V0 ~  b' W6 C. \7 \
. Q5 q# R2 h) C; P    /*等待UPP传输完毕*/
( D$ d/ `/ }5 B8 s4 H    //i=0;) w7 U! J# S% x3 I
    //j=0;/ R* m; g5 O! ]! t6 c/ R
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
: j& \9 v: W% C3 L/ O0 O8 [5 U! U    {
1 `7 f; n/ D7 T) C$ x  V% p        /*  测试UPP传输的同时操作普通DDR数据
- M. |* j1 I2 P! ^        temp=i;
5 d, V/ P) u' C5 q! ^9 S$ y1 n        i++;$ G# V4 B. E) a' n  I
        if(i==1024)
  W  Y4 B- W# ~/ Y: P4 L        {
, k" ^7 L( q7 f  `            i=0;" q: C5 n# {3 p! B
            j++;) e+ }) ^3 U8 \' D0 U' ?
        }' M" N& u8 m) J1 J8 X8 o$ J
        */
7 o7 a* N6 Y: J5 x9 a7 r) V) v( R
8 c# T7 o0 I" G& N/ c& Y) L# [' H       asm(" nop");5 `; g' k/ K" c+ |
: E% `: O+ p- P" i/ _5 X5 J
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);% A8 {7 I1 f& }/ s' q' R  A( h+ T2 T
    }6 s! I8 e; w, e

7 m9 ^5 U; v' j- t$ ]8 v5 d    /*检查UPP传输的数据是否正确 (loopback modes only)*/" s( n* @* n6 o, [; `
    //UARTprintf( "i=%d\n",i);' {. c" [4 e8 l# k! `, W
    //UARTprintf( "j=%d\n",j);  M% u; I1 @$ S3 y7 F) G* V9 `
    UARTPuts("Data mismatch in buffers.\n",-2);
! }; W) @9 i" ^. x9 z" p" w    if (upp_interrupt_count == 2 && upp_error_count == 0)
; L0 g; e! Q5 d" J3 Y# r5 b  R2 t    {; O8 C5 `0 k) I5 m( a
        for (i = 0; i<upp_frame_size; i++)
7 B/ L/ H. e( I( q        {  g! w( |6 _0 _- R7 F; c
            if (upp_buffer_a != upp_buffer_b)
; f0 Q0 B& h  k% j- n& N  o6 G8 {. N            {
, ~) g# Z3 c" x5 k- W$ |                upp_error_count++;: J1 c9 W5 k* c2 X: g2 m7 _/ H( C6 A
            }! U/ V$ o& z- j* U
        }
  L! l7 j! v9 w3 J3 N: p2 s    }
( N5 m& _: r2 z' ^# @0 y! x5 y, k% i3 {
    /* 报告通信结果*/# }2 p# D) X: C9 K
    if(upp_error_count != 0)
. ~2 N6 n+ @2 T' H2 D        UARTprintf( "upp_error_count=%d\n",upp_error_count);$ ]. y. \4 h3 w. R; M; \2 S
    else) K8 I4 l2 k% y, A  I
        UARTPuts("uPP transfers complete!\n",-2);
3 M. [: q; [' v5 G3 p) i/ ~8 l0 g9 u8 {' F
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
2 K8 F9 W, G% C0 |3 C9 s1 `- N    UARTGets(ch,2);% n9 b/ a- o4 k7 j9 x+ ?( |
    UARTPuts("\n", -2);
3 w) c" L3 [+ \1 n. }. W2 O
; E- D; _* [# f    if(ch[0] == 'y')7 ]/ R' l9 q; _( x! B
    {' G' [% m$ i  E' n/ t, R+ ?' w
        /*打印全部读到的数据*/
$ I; x: X  }" `! v1 _4 C        for(i=0; i<upp_frame_size; )9 @  _" _4 W; H! m# T
        {
! H6 v2 }% R: E# P: V            for(j=0; j<5; j++)6 x3 i2 b) B* h9 K+ u- w4 |+ G+ c
            {
3 ?; z- w! K, c4 H6 w                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);- e+ a& M. {9 c8 p( G/ A
                i++;
* T/ a* q; w" @: {' h& X. X                //if(i >= 4096)
% }) X5 [! V" K. `                //    break;5 |9 S, D( [" W8 l

4 y4 I; J2 u1 e; a6 s  X8 p! L2 G5 y: i            }! {, O5 |1 C0 y$ _
            UARTPuts("\n",-2);
# D# O0 K6 w$ a: J6 J7 T        }
6 F4 w' G& H6 G    }
9 ^, Y( g+ |: y: r: K  @
  m) j6 E  U: ?4 {- b+ ~0 A}

. _' x) X% s6 [, D) k6 h

1 ?; n; F0 w  ^: v2 V
% n$ |( l7 S8 M: c/ |  Y
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。( y5 g) B2 p6 R; s( a* T

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。8 u7 A" ~0 F; ]# F- v; c3 B* |6 p





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