嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?0 ]4 W4 E/ Q2 Y; f2 R/ R  g
Void UPP_TASK(Void)* Z% P4 r% T3 Q; Y0 R+ N
{' c$ }6 b% W+ I6 Z* T7 a$ [/ |

1 d. V6 @4 e( w9 k    int i,j,k,target_int_count=2;
/ P0 M; S/ n& G# ~: I    char ch[2];: Z: M9 B: r7 P1 Q0 X
9 M! d, ?) @( l3 _2 a

6 H7 p7 k" K! q" R% ?; u+ o( \5 ?5 r  A
    upp_interrupt_count  = 0;
) V- ]( u% B; C5 H' U9 X, y    upp_error_count = 0;4 Q8 F) g9 x' u9 z7 L+ t
% l3 \$ _( Z/ L8 S5 X
    UARTPuts("\tResetting uPP buffers...\r\n",-2);8 I, W1 |- C* e: t8 |; ^0 m9 @, Z0 Y
    // Initialize data buffers8 c; }/ K, O: }, {' q) {' g2 w3 H5 o( ^5 `
    for (i = 0; i < upp_frame_size; i++)
+ g6 j6 ]# Y0 k$ w6 a& q    {
* [. L: M" h7 \# p) Y6 T/ T1 B( [: X       upp_buffer_b =i;
7 v4 w7 m( M, O+ `       upp_buffer_a = 0xDEAD;
. }% Q: x* S, J; B2 T    }& J# `6 Q$ E( m- J3 A: E3 {& n

% y8 m* x, X1 I5 f- ]3 [    //for(i=0;i<1024;i++)
6 \: u' y9 S  ^/ c    //    temp=0;
' M4 H5 C  F4 [/ z, u* f
" z9 O1 ~, m9 K. B. |) j! |    //UPPReset();
$ N- V2 `& V, L; T( P    /*启动UPP DMA传输*/. F3 K4 ~! g8 r
    UARTPuts("upp_prog_dma_i\n",-2);; A8 `7 _* E; t) E1 x
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 V7 @$ [7 @: x6 B    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);# E) x" @% q: F- h! y3 u
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- ~5 p! ~. n* M' V- e; F" v$ l: }) G& j9 ~# S: J% M
    UARTPuts("upp_prog_dma_i\n",-2);3 O! [7 O: `" Y( H
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 i( ?+ o5 r/ n    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);6 s# C) l+ D  w- p
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
3 ~: a& f. Q, m+ n. V  n5 U0 ~4 e" k# o, Z1 k: A, _# L
    /*等待UPP传输完毕*/
" J: `( O( t: k9 H    //i=0;! |" y1 x. ^  e; o+ |$ P- w
    //j=0;
" l( z9 }3 j6 G    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* R7 g) y+ H9 Q. V8 H- l    {8 l/ Z; o& d, T$ }  K" O
        /*  测试UPP传输的同时操作普通DDR数据6 Z! L& x* I4 O( M- ~3 x
        temp=i;- e# S& z8 [' w6 S6 R  j4 L
        i++;+ y/ t( a" r2 E5 X# ~. s) D
        if(i==1024)
; w5 j" }0 Q6 m) U        {
' O" A9 h1 n2 ?, l6 A! b. x            i=0;
! l" i& c1 |) Q" n# R' R2 N            j++;
1 Y- U7 R; g; J+ P  _5 Q        }5 X. x+ C/ Q& o3 y4 R# w: K( D
        */
: `) n( V' W; c; V$ c$ }6 y  u$ w3 `8 W& r! _0 w' }
       asm(" nop");
3 Q. T1 ^( M- J* I
& `# I' S1 C' v% h( M/ J       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);, |0 p5 D4 M  s6 q) H2 ^, a
    }
+ [) e, D3 m0 a  u' I+ Z4 [. F7 ?; k- r9 o! P- u" {* s7 _
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
' z6 {0 _- u. w5 O    //UARTprintf( "i=%d\n",i);
6 q( {: ?, R7 d0 V  Q    //UARTprintf( "j=%d\n",j);4 i3 I" ]# s' ]  t9 ~
    UARTPuts("Data mismatch in buffers.\n",-2);5 H1 q+ K" N/ W+ z; U* }! f
    if (upp_interrupt_count == 2 && upp_error_count == 0)8 c6 i) c) |7 [3 G" e! j( a( J
    {
& g, G- y5 |3 S0 M3 O) \* E, H4 H        for (i = 0; i<upp_frame_size; i++)
  K6 p) m# T( @, J/ L        {
! ?3 \+ [7 d3 ^            if (upp_buffer_a != upp_buffer_b)
7 p- Q! m8 }4 \            {+ g- x1 g& _! \% k* N
                upp_error_count++;
' |3 F- z" j4 z0 y( W- X3 H2 f            }
7 H0 S  H" x( }4 ~' m  v& o        }
. X3 b$ s  h& J4 @    }! o0 q6 ?2 m3 H

+ {9 }3 J3 D5 Q4 ^" s    /* 报告通信结果*/
' l0 B" T) o: ?    if(upp_error_count != 0)
" E+ d: V6 p! h/ q4 L        UARTprintf( "upp_error_count=%d\n",upp_error_count);
  h) i6 L3 l, Z; K# Z* c6 q& e    else/ g# U" o, w- z2 D6 o7 M
        UARTPuts("uPP transfers complete!\n",-2);% d! F$ |* A" c0 [
; I! |' J# Q5 f4 G
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
' d2 Z4 e% g2 _" Y$ o! \    UARTGets(ch,2);- l/ y& m* H% C+ o! J
    UARTPuts("\n", -2);
; A0 i1 a/ B1 z9 w- [0 ~0 T" r5 b/ p: t6 f( ~$ |; G7 j
    if(ch[0] == 'y')
, S$ _% q: E0 g% F9 S3 s/ F    {0 ~. G# s$ h& F) d
        /*打印全部读到的数据*/7 P7 t6 ?  a0 [. X5 A  c
        for(i=0; i<upp_frame_size; )
% T$ h: S6 K/ K$ ]% ^: m        {
/ x1 N9 C9 r6 `1 X+ D            for(j=0; j<5; j++)
) K4 `7 G- C# O            {
( i2 i6 z' A6 Q4 _                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
% h( Y3 M, W0 ^; L9 A( s: D: M                i++;6 M! [, n( O! F; t! K, Y
                //if(i >= 4096)3 ?5 g/ e5 {  z# L9 A: M: f
                //    break;
0 Z& J; ~- C0 f/ V3 A/ W3 x5 I+ N; v5 x% N
            }
5 j+ b: z  E: Z5 N3 M( ^9 N  C            UARTPuts("\n",-2);7 \* N2 O4 \% f8 m, r
        }' p% K" t7 K/ J5 i$ O
    }0 p6 @! m: e1 e) g& c+ H$ q

5 {, ]% R/ u( A# q}

5 a# ~+ ]2 M9 ?! I

1 l$ B& d. x" l6 |
: b- j( I0 z7 B: Y! T
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
7 M; {! Q% s- Y" A. s% G) D* [
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
! t% C9 t8 T% T8 P8 U/ H% z




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