嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?$ i3 A- Z8 ]8 ~& E6 |# t0 T1 O
Void UPP_TASK(Void)- V1 t% e2 c2 ]: O" O
{
' v+ @! E9 {) N- {# u* _
. r& t- b& C" g6 U2 G    int i,j,k,target_int_count=2;7 T9 L" f; o; c+ f4 e
    char ch[2];
$ i# O  R/ J2 C. W; u/ O9 Z( j% b8 Y6 M) W) e/ y
: T' ^3 o5 b, v' a' `$ J
5 F+ d8 H5 g. B* _* P* T
    upp_interrupt_count  = 0;
" ?7 U5 \: O2 O: Q8 t    upp_error_count = 0;
# z  o2 X5 `1 e
$ O& t* R5 T1 V" W. O    UARTPuts("\tResetting uPP buffers...\r\n",-2);
" Y! H4 `0 D5 F4 c- F8 f    // Initialize data buffers
5 U/ U, B5 F( s: N# I! a    for (i = 0; i < upp_frame_size; i++)
% f5 R; a& u& \0 ^# P2 d    {1 X5 q0 H/ T9 L) _- S
       upp_buffer_b =i;0 P6 n4 s2 M2 Z0 X. p
       upp_buffer_a = 0xDEAD;
5 s2 ~7 `; V3 B  F. o    }- G8 e/ F/ a- e' L
& c2 ]$ }6 n; A, r2 V, q2 Y$ j2 h
    //for(i=0;i<1024;i++)! C. X; r: r  h% \, D
    //    temp=0;# r* E% Q8 {7 w5 l& a( o

8 a) I: h5 j; p+ g    //UPPReset();
8 W4 `4 f9 K, q7 u    /*启动UPP DMA传输*/& ?0 S4 H/ s2 [4 M  R( d! Q
    UARTPuts("upp_prog_dma_i\n",-2);
1 G9 F7 d/ x9 M+ G    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;- }% u1 M5 R, y% I* g% T
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 Z; y! D+ J" T5 H6 r& t9 i    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% G7 k" A9 Y, _! j# [7 J* m4 i& i5 E; |7 S
    UARTPuts("upp_prog_dma_i\n",-2);
$ e& A# Z7 |# h    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;/ m9 x/ y8 W! \6 v7 u! ~
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 z: S! m4 g  t3 E% x    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);( w1 N5 `2 a4 a8 B( K

+ a* z) B3 \$ o    /*等待UPP传输完毕*/, I- C" e9 ?6 ?% m1 v: P, j
    //i=0;
; O! J/ s5 }. s9 a' y3 X7 J    //j=0;, D% H( }8 N& j6 ]
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
4 y$ ^' d& X/ V2 M# l    {
) |6 W% R( Y9 Y! ~        /*  测试UPP传输的同时操作普通DDR数据
. c% u, D6 _7 h8 G6 _6 |        temp=i;
0 p4 R+ D+ A; j# c! r4 p% i        i++;
1 k% ]! P2 H- K* ~  A        if(i==1024)
1 B: a; W. |7 k4 J        {1 H4 }# g5 D" Q/ ]
            i=0;7 r3 v0 V7 Z5 ^
            j++;7 E5 ?. n$ z# \5 R( D! X0 e
        }9 `9 f, v6 R* _" O+ [  B
        */
2 X# F) q1 l1 E; C! {2 m, ]  c7 ]/ Y7 b% y
       asm(" nop");
7 u* P; u$ v, y, q- X3 r7 a8 n4 t
( {& z6 J& e3 h* F9 Q& K$ T0 u       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
2 s5 W$ j1 |7 g  F    }$ i  G3 q) q, s! F- @$ u
7 I. l. B( ^: o1 q% {2 J- w
    /*检查UPP传输的数据是否正确 (loopback modes only)*/* i6 M, [, S7 x, {# s
    //UARTprintf( "i=%d\n",i);( x% |. E- ^+ ~2 g7 _2 }- a% K
    //UARTprintf( "j=%d\n",j);
7 [' Q: X& k) R" P5 e    UARTPuts("Data mismatch in buffers.\n",-2);" @- c2 r( ?; |
    if (upp_interrupt_count == 2 && upp_error_count == 0)
) b" P; b4 @$ H# g    {
: R  P; E6 z0 Y3 c" `- m        for (i = 0; i<upp_frame_size; i++)0 ]/ A! X* C' g% }. T& @
        {- c/ V  R6 i0 x( ^2 K& z
            if (upp_buffer_a != upp_buffer_b)& c+ j9 Z9 U4 T* x: j5 E
            {1 u0 u" E: f1 D$ y8 q& z) y
                upp_error_count++;
& `9 Q( E' H' {            }
, G* }, h/ @" Q4 V4 Z        }" |! Y/ H- \$ p- ^* J: Q; h; e1 W
    }" i2 c: X* L2 \) k7 ]

4 O+ u+ O. K1 M    /* 报告通信结果*/
, C' P, U: R6 ]" a    if(upp_error_count != 0)
) a$ ~& }. w, P6 X        UARTprintf( "upp_error_count=%d\n",upp_error_count);- x* w- g9 e+ M
    else  ]- v8 S  b) m+ h; f, ~
        UARTPuts("uPP transfers complete!\n",-2);
8 C! O0 p! j$ o+ n  n. O( K8 @' ^1 K
; i- {$ p# q" m  y2 o& a' i) k) K    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
: a$ H, b* t# E+ Q) ~    UARTGets(ch,2);
4 y- U9 h5 d: o$ P+ s$ G' L5 S: O    UARTPuts("\n", -2);
' d, d9 l# E( B( }' E
' m8 X( Z% {2 ?& [: B    if(ch[0] == 'y')1 }% c- e1 f" t, h# {& w% F: [
    {
9 z$ E5 o1 {) l" ?' D( ^; `. }        /*打印全部读到的数据*/
9 G% Y. R% a  \. A: F4 C        for(i=0; i<upp_frame_size; )' Y8 j* _" z1 B/ B. v* X' q
        {
; o) K; n+ d$ x/ r            for(j=0; j<5; j++)
$ e* C% {& I: \# t! S4 D            {
" u# x5 u: R5 O' ^( V5 @                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);, x! g9 ?( E7 g2 @, i+ {8 H+ H
                i++;
9 h4 N5 O; }3 ~                //if(i >= 4096)
8 `2 b1 t( h  f* z                //    break;! d. t* m# s! h% d8 p

, I  f8 A& K6 _( x            }
. W3 `5 Y) l$ T% `4 L8 j9 ?            UARTPuts("\n",-2);
+ C$ r, o: |3 H; i$ ^% l        }
& _& \$ G+ a8 u, K  C. O    }1 W, Z5 ~; H( F1 P- s' O

  _8 I1 F5 ~( d}

" t8 G6 d3 d+ z8 p$ S
* q& C' j9 A3 d: Z

6 H( w2 |* f- \+ }" [- H
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。5 ]: ]% `% H0 T, n" Z& ^. d% N

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 y# E) v2 `, h, [, q$ Y& S




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