嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?8 M) Y6 b* H  N  ~% N
Void UPP_TASK(Void)8 M% @' A9 n/ w
{! k: U8 \3 d: d9 H2 w
/ v2 i$ d& D8 s
    int i,j,k,target_int_count=2;( P9 b: u  v- _0 t0 S
    char ch[2];
  N( T2 u: r4 O* D7 C+ t5 t& e& h! Q. g8 X

; |6 f" T4 k/ c$ Y( [9 y; o( o3 m' F6 c
    upp_interrupt_count  = 0;' w5 _+ S. i) c6 Y
    upp_error_count = 0;9 F0 A, K% i. ^' R, v7 b" m

. l! \1 v5 `2 R  x2 \- h4 X    UARTPuts("\tResetting uPP buffers...\r\n",-2);
4 E6 f' I& [7 C% l+ Y3 \    // Initialize data buffers
6 N% f$ I: l) h% y    for (i = 0; i < upp_frame_size; i++)
: b* r3 C9 W- m% H" z. T    {) Y+ p' r, w, N+ x+ j1 g4 L
       upp_buffer_b =i;5 B' S7 o4 X5 X. L1 \& g3 \' [9 y
       upp_buffer_a = 0xDEAD;
6 Y0 X/ c7 S+ [6 x( z5 Z    }: i$ r% k5 X7 E3 o: s
' l/ P! b2 X. ^- A: a3 M5 m
    //for(i=0;i<1024;i++)
# t* j" J) V, v3 L    //    temp=0;" B( L6 I& e2 M- v8 D; `" Y1 K
6 ^& T8 N1 H2 r* n( l
    //UPPReset();
! {) M) N) w# Q% o5 }( b4 [6 ^    /*启动UPP DMA传输*/8 J* V0 C8 q7 n% ?, Y
    UARTPuts("upp_prog_dma_i\n",-2);" C6 n  N+ y6 z6 w( V+ k2 g
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;/ K- \3 P& T6 A' J1 ^$ V. X
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( c6 |% {( K( U& X    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' J; H# h& y2 B& x( _' @9 Z3 E! U
. z4 b6 v6 T$ k+ u    UARTPuts("upp_prog_dma_i\n",-2);
: L5 ?, h- c1 h( Z; ~, ~& o    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;& p7 [9 X( Q2 m
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);+ Z+ U1 s+ x  f# f" b, m
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 @+ g6 [# H) V" a# [% E# Q5 m6 h6 }2 L. p* f# d: p7 d
    /*等待UPP传输完毕*/' D* X- G( n4 L; w" J; ~
    //i=0;
1 L8 O' t8 M' c& b: ~; I    //j=0;/ k: n' U$ ^" q, `) P3 d0 y9 k
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
: M' D& y& X3 X0 G. U! g: z. W( k    {9 U# x8 E3 D% H( K
        /*  测试UPP传输的同时操作普通DDR数据( \5 V3 \3 E6 R: x
        temp=i;' r7 K) S( K5 [) J- _: h6 v
        i++;
% `1 ]; B) w( q0 N: ]# o! R5 B        if(i==1024): x& e1 o# e! }* U3 U. U
        {
' a3 i% ], j3 y* s/ S9 `* d            i=0;' u+ ?1 I8 ^8 A9 L  I
            j++;2 Y# d* v4 z  L6 d2 ?1 V: Y! Z
        }; r5 z7 l' E' Z  Q3 h2 |
        */3 j( W* F2 T: ?4 Z+ t
+ F  m! ?" [: k7 p3 ~
       asm(" nop");
5 N' L0 Z2 h3 w# r1 u) n3 |
# C0 A! `0 y5 P: l6 y1 x( K5 C       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);% d. ?, J  f2 z( ^- R3 P* }+ a
    }
; f, f" o1 j4 J& t" P- Z& c4 K& B, ]2 H
    /*检查UPP传输的数据是否正确 (loopback modes only)*/- H* [* _4 X# A" _1 P$ o" \! l' N
    //UARTprintf( "i=%d\n",i);
3 `: ]4 n" D: B* _' U    //UARTprintf( "j=%d\n",j);
9 H/ [9 F( L) ]! G    UARTPuts("Data mismatch in buffers.\n",-2);; r3 N7 s5 K$ K6 l) f; Y
    if (upp_interrupt_count == 2 && upp_error_count == 0); p8 h+ t$ x1 ]: ^
    {
; e; y! X  X$ v1 p8 I8 K        for (i = 0; i<upp_frame_size; i++)9 m, b6 p  h% Y& D: |. a
        {, _# \- W  |( {6 X, [
            if (upp_buffer_a != upp_buffer_b)# P5 G$ }/ D$ z1 ~+ v. d" I/ \
            {3 V+ W9 V* n  z; [1 F0 R) U
                upp_error_count++;
- ?1 `) J1 v# I9 N7 @1 J            }5 g  s$ j% f, A2 X9 f1 `
        }
. s- Q  W. A( W5 a, `    }
* W& f4 W: J7 Z  c0 u+ H7 v9 W$ i& m+ I3 b
    /* 报告通信结果*/
: n) N0 r( z5 U. a) U    if(upp_error_count != 0)) j7 H' n* P- S1 ~; ~8 Z
        UARTprintf( "upp_error_count=%d\n",upp_error_count);! E9 r) d5 u+ M$ f+ @% F6 T
    else
! B" Q* Y( r& t5 M$ R* c' z+ v        UARTPuts("uPP transfers complete!\n",-2);5 @+ Q+ K% z$ U5 f& |( Z* ]  K

6 x# n7 w+ ]/ `7 \    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
( i- {. y% t+ b    UARTGets(ch,2);- x( _2 m. g0 T3 x
    UARTPuts("\n", -2);/ \( e" t1 h, y

4 J: N4 {0 p* p    if(ch[0] == 'y')! j( j/ g! h6 e% y  }
    {
9 V" C2 ^1 m$ v' X6 G7 ?) r        /*打印全部读到的数据*/+ U( G2 Z: m6 k1 b
        for(i=0; i<upp_frame_size; )
6 \1 t/ ^; I( ?- M7 t        {
2 o! g+ j* ~! d8 E0 }            for(j=0; j<5; j++)2 v, {) |  Y* ~8 F! ]% I
            {
1 Z. B9 o  L+ \( |                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);- J3 Z4 ?2 ~  o" _9 b
                i++;
1 C% V4 V4 l# r) r: w                //if(i >= 4096)5 z: E  l# ?2 }
                //    break;
' K0 o3 {( `/ Z3 @4 J0 o
2 k3 S& D7 [9 E; L            }# y3 z& p# M, U: \. h) F- x0 f4 k4 K. ?
            UARTPuts("\n",-2);
3 S$ K! H6 g+ o  @6 J  [+ ?% T7 k/ a        }! y9 ?5 p5 e8 s# `+ t' ?
    }
0 q! ]+ h' v$ ?
+ r/ G. z$ \. ]3 z/ G! Z}
' A8 M9 G, m1 v  G% f( Q

  t; y; n/ I# Q$ I( c
) n  v/ d( g5 u) u" Y
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。) S+ `/ f0 H% l- v+ O* ]

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
+ e' O0 k' z2 m, j




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