嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ T* y" k8 V4 k, B- U9 Y
Void UPP_TASK(Void)
- a1 J2 G3 _* T4 d2 Q2 k& n{
" D) O. a6 j% Y( }8 |* w9 l% X6 Z/ |  B% m
    int i,j,k,target_int_count=2;" N: q3 x  Z  m
    char ch[2];: F( f: j% b3 [1 c
2 S- A8 l3 q1 g4 o$ A
/ u. e- s" ~# D: f5 G9 ]
6 Z3 _/ ^7 H" K
    upp_interrupt_count  = 0;
! G, W& }: q2 p8 t$ ^' L    upp_error_count = 0;
# b5 v5 V0 B! Y9 O) C) ~- Y2 b( z! F" L9 Q- ?
    UARTPuts("\tResetting uPP buffers...\r\n",-2);9 I# s% l- u) ^! o
    // Initialize data buffers
6 l3 r9 N& C* Y; T; m* b' a    for (i = 0; i < upp_frame_size; i++)9 i3 ^  E5 }" X9 W4 a
    {( A' j* M& F6 R0 R
       upp_buffer_b =i;. I* p1 @) t; a* A7 S9 d
       upp_buffer_a = 0xDEAD;8 {3 e1 d' c$ c+ a! R- l
    }
! t% \0 D8 }  M! x. L+ a5 b
/ Q( J- r+ H' F. r    //for(i=0;i<1024;i++)
) o1 @& B! k. J( h) U    //    temp=0;
% E  _: X. G1 }4 K+ H3 Y7 D
- Q) P6 I- f1 F3 q2 w    //UPPReset();
6 C; {4 A/ b* T9 B+ r    /*启动UPP DMA传输*/( Q- y; ?8 P: v0 i
    UARTPuts("upp_prog_dma_i\n",-2);
; h# i: o4 y$ M. S& d. R    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;) P7 x4 K+ Y2 b/ e5 }, ~
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);9 t( O5 a" y9 N) D2 h/ L9 H
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 u1 W4 r. @2 B# Q5 X: z
3 y2 q8 X7 V: u& Z2 _4 U- E9 O    UARTPuts("upp_prog_dma_i\n",-2);
3 m0 A8 D' k/ I( v    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
  O6 i& h: n- \' N7 ~) I    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);4 V4 v! j+ q: d# w
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);  N8 f! k( L! J

+ v3 W9 h" {; V; Y    /*等待UPP传输完毕*/
) b. v- j7 {$ \, |  k; a0 a  z    //i=0;
# @; W1 e: [, h) m    //j=0;8 a% d( H7 C7 A% q7 u( ?5 @6 W
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# {9 r3 N( J8 p! m& x8 _    {
4 @9 o3 r( G  W/ P5 R, i  W        /*  测试UPP传输的同时操作普通DDR数据, X- Q+ @- p1 Q( P+ V+ M1 E' L
        temp=i;6 b5 [+ W. J' _* r( \! t
        i++;6 s7 f3 K6 J5 ~0 \
        if(i==1024)1 \/ \4 N5 J: G+ K
        {
& w6 ]& n4 d- y, i0 R- f+ J4 C0 Q            i=0;
, Y. q  j2 h+ Y) Q; E9 O, U            j++;: ~. n! W4 f7 `2 J, s" v% Q7 R- H8 ]
        }) \% c) F# L; W+ M6 Y% Q
        */
  B; k  X  l; j9 a9 \4 Y: @
. o3 [  t+ K+ l( Y" X: G, a( Q; W5 n       asm(" nop");
2 j5 B- e% f! N# R# y: V6 C. {1 T$ [3 D7 y9 d# ?
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
% t  Y4 A2 ]! p, U- k    }
3 o6 f7 W2 L( N+ ~+ F9 h, M
  Q8 v- j( ]* a& m/ d( J    /*检查UPP传输的数据是否正确 (loopback modes only)*/
$ o* i, ~4 a  k7 g7 \" X9 g    //UARTprintf( "i=%d\n",i);
6 d$ D  V7 J1 \! x) P2 U4 o    //UARTprintf( "j=%d\n",j);
' M5 ?4 C( m! {0 \8 Y# r    UARTPuts("Data mismatch in buffers.\n",-2);3 a* U# i' d/ ], K
    if (upp_interrupt_count == 2 && upp_error_count == 0)7 ?/ t2 V6 W5 }9 f* k  S
    {9 |- m3 w" Y) `" Y) _- F5 {  d
        for (i = 0; i<upp_frame_size; i++)
, [1 p5 U2 F4 z# B7 T, ~& C        {
. E; e5 Z2 {2 ~  U- V) P" D            if (upp_buffer_a != upp_buffer_b)
+ x. G# t0 g" s* Q1 k  {) g8 n            {: k8 h; {' ^- i8 H' G; H) M
                upp_error_count++;
. {0 Z( W/ t7 ~. v/ k" S# w. a1 x            }
$ c$ z7 C- s2 h/ ~' P% H        }5 s+ u( i% B* j/ C
    }1 ^( J, q) c& A5 `9 ?
) i$ o9 B  d* h9 ?& d
    /* 报告通信结果*/
; O( D2 s' N! V" n- d, P    if(upp_error_count != 0)
# ?) ?+ s4 t3 @        UARTprintf( "upp_error_count=%d\n",upp_error_count);
, z  v* z- |4 Z$ {% Z+ g' i0 K    else/ a3 T( z" Z$ s
        UARTPuts("uPP transfers complete!\n",-2);$ _) ]; Y8 D; v9 h6 ^- s8 G
4 e( ?# K2 H8 K
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
, F9 P+ G1 ?; n6 R/ i2 Q, z: T$ {8 H; F    UARTGets(ch,2);$ ?5 o2 W( M0 x( Q$ W6 O" l+ H; ]  v
    UARTPuts("\n", -2);
' d6 T7 |; Y5 S+ t/ w' r: m# [8 T4 q# c( k- j# K8 g- `: F
    if(ch[0] == 'y'): w" j9 h2 [6 R7 v% Y
    {2 v: Y/ S" |& ~
        /*打印全部读到的数据*/
8 l' ]6 c% M" Q8 S( `: d# P: R        for(i=0; i<upp_frame_size; )
2 u$ u9 H3 ]+ s        {
- }/ `- Z- T' p9 M            for(j=0; j<5; j++)- w& G3 }  V; H+ g
            {
% W( X% i- s9 |, Z  [8 C                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);- H7 }. u6 E/ w6 @/ j: x
                i++;: r" A6 S6 p0 l, u) R
                //if(i >= 4096)  N9 P- O; A, I0 o- c$ B5 W
                //    break;2 v) h  H1 Z; a. x2 D$ y: j: ^
- Q7 g  j# U2 J! Q) T& |
            }
- M6 G% x; A, j  r: L            UARTPuts("\n",-2);
. F* i# |$ S5 Z9 L        }
( d% ~  n5 l( c  l- r    }
* T1 F% c% T1 z; O& \6 ~' w+ O7 {' c- ~8 b0 v$ O
}
  N( ~3 j6 Z- J+ X3 L

$ P; N5 j9 H" i- j5 ?7 c+ [" h* V' [- s2 L

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。) {2 Q! A, F5 {" m  l9 B* Q

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。4 k4 l/ f/ C; F8 B5 B





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