嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?8 [& n* z9 R/ w
Void UPP_TASK(Void)
' r7 O; F( R7 g" }% n3 _{
' T* _, f# y1 [9 B6 @5 J4 f  |: M, Y& U( q, ?7 \
    int i,j,k,target_int_count=2;  v5 g3 ~9 N( \/ w: e7 g
    char ch[2];  g: G9 U2 M& I: T, C6 P# l& f
# T3 s2 b$ e5 V1 m$ G( Q2 ~' e
0 L5 e8 Y% z# L) {  t! }% G

1 D" D% r1 u/ {    upp_interrupt_count  = 0;8 p5 m& g& J5 u* I% W0 }
    upp_error_count = 0;
( X7 d' E+ J1 P6 V
8 q, e# h- H; J7 j    UARTPuts("\tResetting uPP buffers...\r\n",-2);
2 x+ X1 G3 {4 Y% l3 M3 {    // Initialize data buffers( A; k1 e$ G/ \( C( E
    for (i = 0; i < upp_frame_size; i++)7 [, U. Y$ p/ G2 h; F& {& `
    {
$ c1 E4 Z( A* j" y- f       upp_buffer_b =i;7 K  c9 {5 |$ C, d, j, N
       upp_buffer_a = 0xDEAD;
5 v' ?% W( @/ A    }3 F5 j! R) a6 R* Y9 l+ {9 l
5 o+ Q$ ^# Z+ j# o6 t
    //for(i=0;i<1024;i++)+ I0 h" \" N, a" @
    //    temp=0;- K& Q; x0 o$ H2 B
; {; B1 Y4 ^6 e
    //UPPReset();
. T( ~8 f9 \+ m$ A3 h/ P    /*启动UPP DMA传输*/
% G$ l# W$ \$ w3 v+ d% w& g9 o2 e    UARTPuts("upp_prog_dma_i\n",-2);
4 h! Q. R; V* r( f! }/ x    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
4 y; [. b6 Y! e, a  o4 E    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
  _9 T6 _; p) F" T& R$ y    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);8 B" u7 m' ], M0 [) d( G% _
  u& k8 s; a; b. n$ i
    UARTPuts("upp_prog_dma_i\n",-2);
# m+ A9 S6 N  z, C  w% O    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;* B& U6 v' I2 W& G0 ]
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);: R+ U" f0 P. _5 k- O& @! \
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" N1 [) T! M9 ~3 K! i, Z# u! l* V/ u9 C
    /*等待UPP传输完毕*/7 ~1 i# L/ Z% B% U6 e- D$ V
    //i=0;; Z$ U7 |6 z0 h  K4 F- x# c* `1 O( x; G
    //j=0;
4 a, k0 I+ F( ^3 E1 ^    while (upp_interrupt_count < target_int_count && upp_error_count == 0)* `# X9 A5 T6 Z0 n/ _
    {
  j. S. {9 b/ G6 l* h. G        /*  测试UPP传输的同时操作普通DDR数据
6 [3 |9 a  |* A/ B9 Q6 j# k) W        temp=i;, S. M. W. I) o+ i. U3 M
        i++;* l4 i. i. M; D9 H% `9 B' {
        if(i==1024)
0 V  f8 a2 |* Z9 ~. e        {/ L" |: N! K( j0 H, @$ b
            i=0;
- x% o+ ?3 h$ ]3 q/ F            j++;
: Q! h7 C8 e& I# B        }
7 H- C$ a& H" Z: `3 @& W5 p        */7 z: \+ D( q/ w1 Q) v

3 i" b6 F# p+ F7 A       asm(" nop");  G- Z! E9 t1 A! ?& C3 S
( `2 |6 `* c3 _6 ~8 R
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
& Y" ?3 q8 \0 j" p    }
8 C, l. q. Q5 s# J0 d6 d4 `! Z5 {2 k$ {; R, X3 K; t. r
    /*检查UPP传输的数据是否正确 (loopback modes only)*/& l, J6 `) [4 `0 E1 j" G6 l+ W; ~
    //UARTprintf( "i=%d\n",i);
3 g; [, w, @( Q) L8 f    //UARTprintf( "j=%d\n",j);  V4 A+ S  S& _5 L5 I/ e
    UARTPuts("Data mismatch in buffers.\n",-2);& x- A8 E/ n. Q( p' h; d
    if (upp_interrupt_count == 2 && upp_error_count == 0)
7 C. C1 {- p* s  n8 \" ~" q; U    {0 f4 w) m# H, F' P. u
        for (i = 0; i<upp_frame_size; i++). u* u- d3 n, {. O* c+ q
        {/ `! I" S9 [! G1 @& s
            if (upp_buffer_a != upp_buffer_b)- s; N0 Q) r5 d' r# e' ~- t
            {
4 X0 @0 y6 i8 y                upp_error_count++;! v# j! J( G4 J5 l$ A: V
            }
. S2 s( R& S8 e' H  U( M6 c' x0 P        }0 [7 e# t. F: d1 n5 A( C; d) X
    }/ a! z) Q0 x7 q+ q* y8 H1 L
* T; e% q% ~4 Z2 d# t6 v( A
    /* 报告通信结果*/
5 O, f. y; P; ^5 [! n    if(upp_error_count != 0)
- c3 c; ]8 S8 C- Y0 s9 t        UARTprintf( "upp_error_count=%d\n",upp_error_count);
# }1 b2 H7 }+ u: g    else0 |. G- e1 Y" A# N: X# O
        UARTPuts("uPP transfers complete!\n",-2);
1 N( P, R9 d& P2 {) \$ U) z- q5 R: D& a/ h3 N- x9 Z6 U
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
( R4 M; ^, y5 a5 ]% r    UARTGets(ch,2);
: X* W! x3 p* M. J' w$ e    UARTPuts("\n", -2);
/ F( ]# e! L& x# |* J4 r% _9 `
; ?0 Q5 O* L' x/ a2 B    if(ch[0] == 'y')
* y4 p: [  e7 `9 l    {! M7 p; {1 z2 I* M/ I& C* B
        /*打印全部读到的数据*/4 v+ a, w% ^' Z& `. {) d7 y
        for(i=0; i<upp_frame_size; )- w7 D$ V; [- _. N* ]3 w, F
        {& v/ P2 i# S9 S' j
            for(j=0; j<5; j++)+ }+ I7 d8 @9 X; F( h/ ~
            {+ Q" b. O+ G, J% v
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
/ d0 C) r/ d4 q3 s; g$ q% `) c( Z3 r                i++;% J! Y- T, m3 r' _, |1 E0 t
                //if(i >= 4096)% q& z) d# `; W3 V4 ?& V. ?
                //    break;
* \% a$ q& v0 O8 O  v
0 a9 g9 U' |9 S! S8 E9 Q            }; {7 f! _* U; @
            UARTPuts("\n",-2);+ `2 U5 j& L+ l  O8 c) |6 x' M; v
        }
1 V! R% v4 s- m    }
( E; u% |9 k' E! Q" K8 V, G, Q
4 a% K2 R2 O. D1 A+ o3 F1 e2 E; N}

3 O: D" C- u# [. i$ |
$ W8 H& R" i# s( s5 [
7 l0 W+ ^# f- \  p# @9 J! `2 ~% B5 e

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" C- |- z7 L1 U* a
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 d0 s( B# s. `+ {# V5 ?




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