嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?7 E% Y* w+ H! v3 X* S; S
Void UPP_TASK(Void)  e; T8 T" Z: D: u/ }- S) z
{5 |+ Y4 {1 E* Q2 n' C
" |) v6 Z% L5 \7 X8 p
    int i,j,k,target_int_count=2;
& U8 [* v* G6 z    char ch[2];3 x- F4 A$ O; \- `1 y7 }* h: Q% q
; u5 k; v. j# g7 u  N

/ u; r' e3 f2 C
9 ^6 M: `! @) Z* G7 P( c    upp_interrupt_count  = 0;
( C( G8 ]+ A5 X1 T8 N    upp_error_count = 0;
' L% \# r, p8 }) K  `' Y5 [2 D: Y& V1 N4 P  c2 {8 I: v- X
    UARTPuts("\tResetting uPP buffers...\r\n",-2);% H: {7 E; Y: e
    // Initialize data buffers
, i; H. w) J( P( Q4 e. E" O    for (i = 0; i < upp_frame_size; i++)3 B7 G5 o+ I) m4 f  K& K- k+ E3 x
    {
1 j# U6 ~3 c$ _8 v& R       upp_buffer_b =i;
4 J' P# ?4 M' j/ O       upp_buffer_a = 0xDEAD;
/ _# D, d3 o% L9 I1 o* d* M    }# {. S  b4 J% l, S

" l5 q7 }1 @- I6 w    //for(i=0;i<1024;i++)0 w+ k5 t8 N2 q- D* p7 r6 v8 o5 X
    //    temp=0;! ?* w! C1 B  t$ G. ?, b
4 }! V3 L1 T: X4 R
    //UPPReset();
% |& ^: v4 K6 }, u    /*启动UPP DMA传输*/  j0 x" b) P+ `9 w' j
    UARTPuts("upp_prog_dma_i\n",-2);$ O2 @2 I+ U& ]! s
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;& r) G" S" B- z& o
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ q5 E6 D6 s/ Y6 E* f' X/ U% c7 g    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);5 K1 k2 f* l- R7 n8 p; H% ]+ t
- {" `+ e# V7 G% m
    UARTPuts("upp_prog_dma_i\n",-2);( z: G' y/ j0 j# B+ y$ G
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 m+ e& j$ G7 q5 n    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( a! u9 S  ~. V5 q
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
3 a. }3 ~  `* |$ U
& D: Y) I9 y, L, f- g; A    /*等待UPP传输完毕*/
* d  o6 J/ k+ E$ _  J4 Y% u    //i=0;
7 T+ ?# `/ ^) Q+ l7 |* h* ~    //j=0;: E/ T2 H% C" n) Z9 W( R5 ~
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)$ S  Y: T( C# I% G: ?% F- }0 m
    {3 K) z! l: l0 V
        /*  测试UPP传输的同时操作普通DDR数据
! H* Y6 G, I4 R0 D. V7 q) d        temp=i;
: a2 R* ?3 h- \' [1 @' _% S        i++;& Q! O. U0 L3 k3 f7 k
        if(i==1024)
; v3 o2 ?( B  C        {: }; ^: ?5 v' ]' s( @. [
            i=0;9 L' P* S+ P4 I
            j++;6 X( C5 w) y6 D, f. a3 _
        }3 [) n  f6 b9 {& C( E4 Z
        */
+ o7 E" z$ ~6 Z% A3 Q( Q* C! _! T; j; f# }& T: U3 i
       asm(" nop");( X, j+ s( j; i
, `  ^# w0 `% F( M  F3 F
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);1 \* V3 b7 @0 [* u" o* m
    }
6 b, g. M% x' L0 _
7 p7 d- L0 c8 q, a- J; g! M    /*检查UPP传输的数据是否正确 (loopback modes only)*/
- M0 M8 ]: l; o7 S# a8 p    //UARTprintf( "i=%d\n",i);
6 T' O3 ^* i* h) j0 ~% `+ j    //UARTprintf( "j=%d\n",j);
  _$ _2 t3 S; Y% d4 }$ v( s( b    UARTPuts("Data mismatch in buffers.\n",-2);
5 z, W2 S# o2 \    if (upp_interrupt_count == 2 && upp_error_count == 0)
2 |- V1 Z* f2 k* h; D" V* H3 r& ]    {7 j7 M, W4 o/ Y
        for (i = 0; i<upp_frame_size; i++): B' [3 Z4 G9 A6 A3 i
        {
" O6 Q4 v2 G: _0 f% K$ E            if (upp_buffer_a != upp_buffer_b)! j8 B6 O! b2 ]5 L) @; V
            {& q, Z/ l. j9 Z. ]# D" |
                upp_error_count++;
' d& F5 K4 N0 ~  [9 w2 H: y            }
8 O5 i( E$ }4 F! T        }
3 ~" u( i3 `8 |& @3 Z4 X# ]    }
: P, J& b3 k  K: x
9 `& _& `  s- y    /* 报告通信结果*// t4 [; D8 h6 u& s1 P* t
    if(upp_error_count != 0)
1 Q- P7 u0 |2 D7 s        UARTprintf( "upp_error_count=%d\n",upp_error_count);/ g- R1 Z4 e9 J
    else) r  F4 P4 v8 x5 {7 r* a: ~; N
        UARTPuts("uPP transfers complete!\n",-2);& S- g- C" d$ k

* {* E4 d3 e$ m: B6 z# K4 k    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
9 b/ q7 u: n) k& x9 E$ c( s3 y    UARTGets(ch,2);# F) s8 X6 e9 y, J, z9 T
    UARTPuts("\n", -2);
/ u7 {7 B5 V& h9 `- l# x, g: B7 K% G9 E- t  n& O
    if(ch[0] == 'y')
" ?) ~" y" ], L    {& T" I1 N% p" O: a9 `+ j: Y- G
        /*打印全部读到的数据*/
0 J$ F: ?7 n3 I* q0 k        for(i=0; i<upp_frame_size; )
' y% e# P8 F+ x9 m        {
1 q8 L* @  o4 V5 m( R            for(j=0; j<5; j++)
+ r3 g( P  O$ a% E9 e- J% I            {
  o3 `$ |% n- q. {* s) G                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
4 Y4 |$ W6 S' n  ^: U2 j& O                i++;
# @9 Z% e. L+ h7 M! c" Q                //if(i >= 4096)
1 G9 D/ V6 L8 s7 ^' ^8 r6 H                //    break;
& W5 p9 W( a. a: A9 M) \& l3 s0 q" r5 J6 u
            }
/ E  |5 y- F8 v* B            UARTPuts("\n",-2);
* P& U4 W5 p; y' _        }
+ y# B- w! Z7 h2 z5 i    }" w+ f! c# I: [( u# B. Z- P

. v/ a9 H4 Z; I4 ]9 ]4 p. Y0 I# u}

( z! X, i3 k; Q* u5 L

2 I, S/ g, x" P# R4 z
0 {! W! W2 \  Q! X2 l) u2 Y
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
  s( B8 ]$ p$ _# A' e
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& ~4 T8 I, B8 i6 Y2 J




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