嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?0 b- R5 Z6 `2 x/ W( H% B8 J) [
Void UPP_TASK(Void)
3 M" o* |& z* m  R9 k{3 C4 G: I; n3 _  m
$ d1 m8 n) u$ u* R; ~" i% f, J
    int i,j,k,target_int_count=2;9 E; M- f5 C% V$ F! j
    char ch[2];6 P# X  m0 B( `, L7 Y& {3 z7 b
/ s1 t  |5 \6 y# k, @2 i

9 e' ]& U7 b+ ^/ Z& B5 z* g. U( d- P+ C( V  a( O5 x, g& T
    upp_interrupt_count  = 0;: w9 J9 o5 N+ k; Y, D6 A' z( j
    upp_error_count = 0;" J! i8 U1 N( w9 j' Y" k
7 H/ C% r6 q) N& S3 v
    UARTPuts("\tResetting uPP buffers...\r\n",-2);: Q8 m8 a( ?1 m8 _. h/ Y" g: `( Y
    // Initialize data buffers7 n9 D2 k9 l8 ?1 b- Q* r! [+ L9 l0 U
    for (i = 0; i < upp_frame_size; i++)$ J+ z# P7 H) U# Z* t; t, c
    {+ Q+ k- j4 H9 G$ z& I0 t' d& [. e
       upp_buffer_b =i;' V" q9 S' D! D( ]
       upp_buffer_a = 0xDEAD;7 q8 r" P" U) m& O- X  _
    }* T. \9 ^- _2 Q6 E& l

7 N% P% U- f" Q1 o3 ?. ?    //for(i=0;i<1024;i++)) c1 H* p  z( g& v( p1 U' l# L& U
    //    temp=0;2 H! g, E# Z7 V; \: [
  l9 h- {6 k! ?' B- C: s' Y9 ]
    //UPPReset();
! N, [* I* C7 w* w) z    /*启动UPP DMA传输*/
; D1 g$ b5 w+ s8 B    UARTPuts("upp_prog_dma_i\n",-2);$ u; E$ i4 D' z2 ]8 \4 B
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% z1 f/ W! T, z! w! g9 n    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);; e9 }+ U7 K& {, }' w
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);9 V0 J* j( U5 m6 ?& V2 H9 d

3 X  M- ?  r, q* c    UARTPuts("upp_prog_dma_i\n",-2);& D3 e- t- C+ M7 m$ I( C: m5 m
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;* `0 D( l7 @5 x* j
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);( M* u$ K/ d# I
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);% m- \" [) j; I4 T6 Z
" }2 Q' I/ f* y9 y6 J/ F3 s
    /*等待UPP传输完毕*/
( Y! P$ K: k; P* F( \! m  J5 t    //i=0;/ D9 f. Y4 J% f. f
    //j=0;
  h8 g6 x1 k# G, f: \1 L' D    while (upp_interrupt_count < target_int_count && upp_error_count == 0), }% y+ x8 k4 ]3 Z1 |: j
    {; k' j$ q1 Z9 S" t' d
        /*  测试UPP传输的同时操作普通DDR数据) y# O4 j5 h1 ?/ v
        temp=i;  x( `4 V2 {3 w1 n1 s: p( {
        i++;
! T& l1 h+ F5 G6 G0 S0 y        if(i==1024)
6 c, o/ H8 k3 A0 G- V& o; b        {& K+ I: ~1 i/ ^7 ^/ Y2 s  `
            i=0;
6 c' v% }' x* f& W. }, p7 M            j++;
: e9 X2 ]% l) c' i% E- g        }4 P" X; _0 i+ w
        */% N7 ]0 M6 [6 J! V# F

8 i3 U5 L2 @4 p' x, P) H+ C* x       asm(" nop");
0 ]0 T9 m; ~: U/ k$ k, X( ~/ h3 b3 H& h- Y
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ z$ N1 a4 S9 [    }% Z& t* _$ f! A* o  R
, r) x9 h/ z4 B
    /*检查UPP传输的数据是否正确 (loopback modes only)*/  Y; X) m% p& W) Q
    //UARTprintf( "i=%d\n",i);
7 y" G% w  ]! z" s- A5 V    //UARTprintf( "j=%d\n",j);) T0 |+ b" a& ~3 r* u. N
    UARTPuts("Data mismatch in buffers.\n",-2);
! |5 ~# z, X- \- }, {    if (upp_interrupt_count == 2 && upp_error_count == 0)+ `; d- H# r1 q; k) I1 c
    {
0 {' s- G# }5 b: F: x0 s/ D        for (i = 0; i<upp_frame_size; i++), \5 g( L1 Z+ W9 r$ q: w, B7 Z8 }
        {
. x5 c2 U+ }; x% k& ^! N4 y            if (upp_buffer_a != upp_buffer_b)
8 d6 o6 E9 S2 B7 w/ C5 z# e* a            {1 E0 L. e* b5 ]6 G
                upp_error_count++;
) Z8 z7 e% H6 x% ?& I; L            }2 a, r. i: |. b6 N- d8 ~: X
        }
3 u5 ~+ g7 V% Q    }- H# T' A0 h) S- o$ X

& w" u" T! R5 Z5 D! }; V3 W) f    /* 报告通信结果*/7 I3 D) c) X8 Y* q# C' q/ n$ z
    if(upp_error_count != 0)
% P% B3 k* w" Z7 C/ X) t        UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 ?% X! f& h2 z    else8 L$ o4 r/ K# X, y$ F* s% x" M+ l
        UARTPuts("uPP transfers complete!\n",-2);5 ~. N' L  j2 m8 c$ D2 Q
, [' ]4 u0 ?5 ]0 |9 {
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
5 b9 [& s0 [' l4 j9 P) m; G    UARTGets(ch,2);+ L$ C+ N# J2 F; a- Y# Z
    UARTPuts("\n", -2);8 P+ _, \: I  v* J
3 O, j5 z# d, h9 d3 Y
    if(ch[0] == 'y')  d# y- |3 C( g- `4 ]' ^1 O
    {# D7 B9 ?) {7 @
        /*打印全部读到的数据*/
6 d& d; p- f1 d7 q1 V8 W        for(i=0; i<upp_frame_size; )
2 g4 j4 u( n. s) I, @9 k! K" [+ }3 e2 Y        {, X9 D9 m' j* h# e3 ]2 l  D
            for(j=0; j<5; j++)& O# G7 e* _. K8 w& F
            {
. W- \0 Y, Q/ x  S                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);  G- v, x6 y! k! F/ ~
                i++;
+ c' a* L# g# N# I, y                //if(i >= 4096)8 k. e; f" H4 F( ^8 t# @
                //    break;8 {( K" g+ x0 z2 ?; H- ^

0 k- i8 R, s+ F. |6 @- A8 F% c            }2 c: [% K( l9 S: b) r. r9 R- c
            UARTPuts("\n",-2);: Z! r! @) ]4 Q7 Q8 \) K1 C- B
        }
5 r; B+ d  Z: e7 z    }
% n$ A) }) g! A, q# l# L9 ?0 H0 z+ p0 X0 ~" S% l
}
; u' L: e* k* J5 `
/ c; \, G# e8 @% L' A! l

! `3 O+ S6 z% X  P  `$ D) m: t
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* L' f$ B4 i* P1 \
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' ]& b9 c- w' C7 K/ J5 X+ O




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