嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- _, B1 s% h3 Z) Y7 L# I
Void UPP_TASK(Void)1 b! L  X" Z7 s
{
  |9 H( r/ ^" H. [3 [6 r( c" E' ?" P( F; Y+ G! C7 `% Z
    int i,j,k,target_int_count=2;
( J& }, j% H) z6 Z    char ch[2];
- g, m$ ?' G/ \6 {. r  n7 N5 B. w1 A6 m* i9 T
9 p0 w* ?. _$ `% X/ f

" P. n& Q& B6 {. e, |( f8 E; _    upp_interrupt_count  = 0;
) t/ H; e+ g2 {    upp_error_count = 0;6 t" v3 [. S8 G
  j# i* t/ z7 g$ P' T' v4 J
    UARTPuts("\tResetting uPP buffers...\r\n",-2);9 k! L' C4 N1 l) x6 c
    // Initialize data buffers
8 |7 s1 F8 `5 b. B1 `0 d    for (i = 0; i < upp_frame_size; i++)- H/ P, a1 b0 c4 B6 b6 }
    {
; w6 I, [  J2 k, l, n& P       upp_buffer_b =i;2 V& Q% H# l5 P* X+ M. I: i: s4 z
       upp_buffer_a = 0xDEAD;
% m' C; e5 R/ `# O6 y/ F    }
" Z7 f" n! J) ^! k+ \& f/ \# o8 _+ Z/ i  m& V6 |1 T4 x3 J% P
    //for(i=0;i<1024;i++)
! c- K5 z8 G, k4 M$ b5 y    //    temp=0;4 p) ~# Y. a% p, A

2 o0 d2 @. V+ C% g1 p, m    //UPPReset();
' c  {1 @! o( c  S$ q" Y+ ?) }    /*启动UPP DMA传输*/
& C# m+ p3 x% i$ P+ C; s6 K5 s: v    UARTPuts("upp_prog_dma_i\n",-2);" p( ]" r, {. e. z" ^2 L6 V/ T
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
2 v) @8 `6 w/ N; {4 r4 h    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: d) C- A/ C- ]( y# @' I' O; O6 ]# s    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);& I" Y+ M7 K/ H

$ K% X0 `% W0 u6 }1 I! R. y" o: w    UARTPuts("upp_prog_dma_i\n",-2);4 D+ L& v5 j$ |, _9 w
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' r( a$ B0 o0 V6 P( I( h, I3 s! A    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) p1 I0 ?# a3 s    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);8 t( P( ?6 C, i* E

+ K) i6 }  `! k" _2 w9 P    /*等待UPP传输完毕*/
+ q3 K% o4 ?, h& n! b% e/ u# s- F    //i=0;
3 a* r+ C5 L; @6 O    //j=0;7 U7 Y  U: \; h- c, Y$ C0 B
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)8 M1 q, u, C' ~6 C9 c! Z% B
    {7 Z% G* X+ z: A" b+ Y" r& T( U1 Z. U( M
        /*  测试UPP传输的同时操作普通DDR数据  g0 N1 v" m  N, h
        temp=i;  Y2 I/ Z# B/ Z
        i++;
6 W# W# x5 T  j        if(i==1024)
; h" P" o4 J5 |2 Y        {
7 Y- j8 [+ }# C! U, d            i=0;2 r7 i, K7 H1 x6 i) _
            j++;2 z+ f% i. @! h' y$ ~  B: t
        }4 T. {+ }  l' {6 g& d
        */
, o% u' X+ ]/ z0 H
+ F' p: I$ {7 h9 i: i+ _       asm(" nop");; g( K, u3 i- q" K- V. i

& ]( H; |" C( {# n% I, J% l       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);2 T1 F+ p/ }. ~9 Q6 N# L
    }& N2 ~- g2 T% K" S, n9 E4 P

5 C) ^* B/ h$ y7 ]1 Q1 j    /*检查UPP传输的数据是否正确 (loopback modes only)*/
9 K4 O1 f& e, P    //UARTprintf( "i=%d\n",i);
$ r4 O  Q; a: h* j) _7 i    //UARTprintf( "j=%d\n",j);
- z7 S2 V# t5 l. K" v  S7 y# U    UARTPuts("Data mismatch in buffers.\n",-2);4 ~& B8 b9 a  C/ E
    if (upp_interrupt_count == 2 && upp_error_count == 0)
: k6 H5 m: z9 {! X& Y+ u    {# ?& m+ R$ I- \( g
        for (i = 0; i<upp_frame_size; i++)9 e3 g' o. J  ~* O3 i; Q( p
        {
, l9 d6 q% D9 h& p            if (upp_buffer_a != upp_buffer_b)
' Q* S' P" l& [            {
' O% C) q) b- h4 [0 J                upp_error_count++;
5 h9 D' M  h# p            }6 A3 @1 a6 _% |8 F9 }# `  c- H
        }
0 \, I8 |9 I) K4 f( V, `    }) c$ z0 h; o0 W6 W* y
! |  f5 k- H4 R& j# P
    /* 报告通信结果*/
0 w1 L. ?2 J8 F' L- O, D    if(upp_error_count != 0)
0 J# U" I( ]9 j$ p6 p6 ^        UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ m; V4 y# ^5 y3 {/ H    else! t' y+ ^4 D$ k5 w5 N; V
        UARTPuts("uPP transfers complete!\n",-2);
% x- x! X! D1 }7 _
# J2 u' V! }4 T2 j7 d    UARTPuts("Do you want to print all the data?(y/n)   ",-2);8 l3 d& E# f' q7 x* t
    UARTGets(ch,2);, _8 W2 p0 m. z1 r4 o+ ^
    UARTPuts("\n", -2);0 c5 ?+ {/ q3 t3 V" `
' J0 ?8 b& F* Y. V7 _. I
    if(ch[0] == 'y'); Z, f/ l2 x, H7 S7 Z& [! y
    {
( u# ]9 [7 e( m5 c- ~/ J  n        /*打印全部读到的数据*/
$ E6 b+ s" k: }        for(i=0; i<upp_frame_size; )% Y' O% |. {/ X5 c) G/ o. x* D
        {) z/ k# b5 }- a2 g% t& E
            for(j=0; j<5; j++)
- a0 q3 m! ]+ N, E1 I/ U7 M            {- {1 v& w) {4 c, Q
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);+ `8 b. h0 M5 P  z' d" r% S
                i++;4 C, ^6 s5 z  L$ ?) |5 x9 E3 T
                //if(i >= 4096)
+ S1 L8 m6 ~1 k3 h5 B, q/ g, m# H7 Z                //    break;4 A% p% y, \+ u9 m  W3 I( m

$ k& k& M! m4 K  `& K" `            }; F# R: q: z5 |% j$ Q
            UARTPuts("\n",-2);  x5 \; S8 Z3 Z4 P
        }+ B8 g5 `! n/ ?  V! U- Q
    }5 e# `$ B5 b' I  \

/ A2 D: _' W# V: B}

" D3 \/ q+ j4 d$ @5 Z3 Z8 L( ]
# p& k; |5 k8 s

2 p# j5 C$ q" l' N4 \2 v
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 v/ m1 d7 q2 E3 ~
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
5 O: C0 E5 v( m9 b8 K




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