嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 J: K8 O, F- B  e
Void UPP_TASK(Void)+ y! ^) R) P! Q- L6 B: e/ N& ?
{8 Q) `; G6 X! Z

- Y" k: `+ k( g2 k/ W) O    int i,j,k,target_int_count=2;: b% U, m/ ]% g" ?" z! z9 \
    char ch[2];
# z* r/ W* W& b8 ~% [$ a7 d
  N7 F2 l* e1 t! P* a6 o5 j! `! t' b
6 o: L+ z0 Q- F' {# a! N! t0 e. ], W0 E
    upp_interrupt_count  = 0;
* X3 u3 _1 c' S    upp_error_count = 0;
2 I: z1 g) l) ~* M0 u& w0 Y$ v6 k0 c) v* ]5 x
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 F- N, [5 K8 S5 ~* @% s8 d) n; \    // Initialize data buffers/ M/ Z& y5 i+ O  ^0 x# Z+ N% d% U0 g9 Q
    for (i = 0; i < upp_frame_size; i++)  l8 c6 R4 S6 H. p9 E4 G# p* f
    {
% n7 g9 U) P" w* ^7 V& k+ I6 u       upp_buffer_b =i;
4 d6 U  Q' g" |2 O7 S       upp_buffer_a = 0xDEAD;. f5 j) b: q1 C3 h* F
    }' o  s9 W2 L  f

, G  L6 c* i% Y+ F0 @    //for(i=0;i<1024;i++)
3 {8 F' d7 x* }- V( F, N    //    temp=0;5 z: I1 a" i( d% |5 R
( J; @: Y0 N( x+ T2 j
    //UPPReset();
" C8 `0 `( u2 ]8 z/ x    /*启动UPP DMA传输*/9 e% q2 j' S# U8 D: ^) s
    UARTPuts("upp_prog_dma_i\n",-2);
# U& B# N* ~4 j    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;  P) Y0 K$ I. u( W; J, Z
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: T; B1 I8 M1 y: L' k    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);" N; c0 ]& ~( _( z- R

9 Y6 d; z4 E- V! ~2 J    UARTPuts("upp_prog_dma_i\n",-2);( U3 c0 ~6 f" U0 ]2 v$ C' t8 Z+ m/ j
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;7 G: |& @2 Q/ ?; N; o$ V8 s" [, M
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ Z: I5 J9 l4 R3 _5 S5 r* s" {6 t9 K    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);6 Q: ]" g: E3 Z- \, ~4 V5 C

+ X  m7 e+ Z4 m# r" c( A% O* t: g: @    /*等待UPP传输完毕*/: z8 g8 Z0 I4 S5 D+ _" e! E
    //i=0;
$ Y& _+ f+ F2 l3 k' s% B# K    //j=0;: N5 O) N, |9 H
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)" v& F$ p2 D4 |7 {8 }
    {
  I& h4 [2 M8 ]8 i+ q0 J, Q        /*  测试UPP传输的同时操作普通DDR数据
9 |, V( O8 }2 K        temp=i;3 e1 }$ @4 i" h2 _1 n! m& n* ]6 U
        i++;+ Z5 {1 p- Q6 [! C$ F* I. j& i/ ~
        if(i==1024)
6 J- U2 c% ^: ?% C        {# N8 P5 T4 B6 O# z& Z% z
            i=0;
* e, \" Q- G1 ]            j++;5 ]1 C8 W* P) C
        }
: `7 r+ q4 k/ j. [5 R9 r        */
, l# k" c# U. V8 G' t. c/ W2 S5 |# [6 [
       asm(" nop");7 k' g2 B- V+ }5 v$ Q" i

. A/ G% z$ m. Y) y% Z1 F2 Z       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);8 d0 f2 Z* Y* X) I$ Y% X
    }
' K! @& p, ?; h: d( G
! `' t! B; _2 C6 T: D) l! L    /*检查UPP传输的数据是否正确 (loopback modes only)*/
! f+ r+ }% m" J& J6 n/ g2 ]3 y" b: ~    //UARTprintf( "i=%d\n",i);; H% h. u4 W, ~- d' z6 b
    //UARTprintf( "j=%d\n",j);
) ^1 {. ?6 C# R7 I    UARTPuts("Data mismatch in buffers.\n",-2);
9 R% w) W8 h4 q& @# B) f/ j% D    if (upp_interrupt_count == 2 && upp_error_count == 0)
' K2 t( ~" J2 X/ _    {
0 [- Q. `4 G7 R1 C# E* k        for (i = 0; i<upp_frame_size; i++)( N& U: m: d" c6 I0 ]5 s
        {% I2 M2 }/ U/ V6 x. s% R% \9 ^
            if (upp_buffer_a != upp_buffer_b)  B- w6 C% w5 l4 M: c
            {
; Z: o6 X) I7 S7 q+ b                upp_error_count++;
  y1 x5 Z' |; p3 Q! b0 \& B            }1 w" s3 N8 d" a: p
        }
3 b: L/ Z: e7 @/ e    }
4 |2 D* i- N* f' S' C+ ^8 R
2 H& m4 X+ K4 ?/ F% O    /* 报告通信结果*/: R% U. K- b6 ^
    if(upp_error_count != 0)2 W# v5 R& w5 d# @- X
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
0 {) N9 U' |. b    else; ^5 g  ?; I& q% Q* M( |* J
        UARTPuts("uPP transfers complete!\n",-2);) Q* ~. X4 C% |. H  z# q+ O, y
0 ]9 s$ j8 y' }9 O  k( w
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);8 c5 k2 M, d% G, t8 Z/ q* ]
    UARTGets(ch,2);7 j* C& I# t& U+ Y0 F
    UARTPuts("\n", -2);
1 X" M' X8 \( a& l: z: M# Z! O: W+ o; Q) H
    if(ch[0] == 'y')- b3 _) b7 c# n. ]  Z5 ~/ [* [4 A
    {6 l  {9 N8 n! |, j6 {
        /*打印全部读到的数据*/7 Y* `  O. d3 {- M: A8 R
        for(i=0; i<upp_frame_size; )
7 n* `/ X2 I6 ^' w$ N        {$ m7 z. T5 c- ?1 D1 \
            for(j=0; j<5; j++)
1 |+ @- `- o  B1 s% u            {5 g5 O0 M2 w9 D% ]# g( d& A. x
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
/ k  s% M5 Z& q4 J                i++;8 i; U4 B5 f1 k1 `
                //if(i >= 4096)/ z3 K  k/ G; R9 X! `1 N( v0 b1 ~% i
                //    break;
) _- o7 j$ K' k) W  k$ G. ]# G3 o8 Z9 N7 z9 A  Q8 _: B
            }
/ l$ t! @' V! x0 i" {7 [  M1 T            UARTPuts("\n",-2);: _6 C; n1 O- A9 o& K
        }
4 I; c4 \% t  T7 N% E5 V9 i    }
0 a& e( V/ x$ {+ r6 {' v. k
$ J0 K) V/ a& P}
: [: E) ]& r( {4 l' q" g. c. C0 c

2 n0 e6 a$ H& K, c& T; N: p
  H# R# z# a6 i  d
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" C5 k9 y7 I* Y& N' N1 a/ b
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& Z, D' a/ I" u' f! x: t& G




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