嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 S( Y1 ^5 p! ^! F4 Q7 D% Y
Void UPP_TASK(Void)
+ R" {* `( y+ H5 c# ^0 _; d! W{# d6 v  }$ P$ x) n- |
6 z2 t7 o& U( s. v5 @0 W" S# u1 Y- E
    int i,j,k,target_int_count=2;# J; r' S: y8 @4 U2 v8 u
    char ch[2];
( ]5 j/ Y4 j/ k* \) R
; f6 `$ [$ Z" A- Y
6 v' a9 ~7 V" {' r( O1 z& `7 P. U8 u# j0 m  t
    upp_interrupt_count  = 0;
+ }' z/ n# Q6 R( R& i* ?& m. W4 o    upp_error_count = 0;% `. k; u/ [. S7 \. Y

* V/ f5 \/ m* U- |9 ?' x0 k: ~- G    UARTPuts("\tResetting uPP buffers...\r\n",-2);
" q  K' |8 @: u9 a7 l& H    // Initialize data buffers2 h- G- c6 M7 X; ~9 b  v0 G* t
    for (i = 0; i < upp_frame_size; i++)
1 `. N0 Z. b$ w6 }; y    {  Z0 S1 t! R* |6 F) ~& E3 w( \& a
       upp_buffer_b =i;/ w0 h9 Y( k: ?4 w& F
       upp_buffer_a = 0xDEAD;
& j# m9 B/ F% |& h/ ?    }4 w# `) x$ @! I% ~/ D: O, t, A

4 F( b$ l2 i0 W8 S; v# B" h0 _    //for(i=0;i<1024;i++)
: N; E, S: _) }9 i4 Z3 h( H) Y    //    temp=0;
( B8 [3 s& z4 D5 ~5 l3 o
# o/ K" N$ M5 y# g    //UPPReset();5 Z: N7 R9 G5 b0 {+ f
    /*启动UPP DMA传输*/
: w$ l0 a# w0 ^    UARTPuts("upp_prog_dma_i\n",-2);
+ p  N4 j/ z, i# ]6 r# s$ V! u    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
8 @* c0 b2 J" g' `    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);+ f1 y. L" x$ l; F# o2 Z
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( B& p8 o- m& y* ~
  _4 `0 e& o$ q* \# v: J    UARTPuts("upp_prog_dma_i\n",-2);
, p/ _1 w( k0 Q3 u5 b" e    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;& W! Y  S+ c8 Q$ [
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);, D( o" g2 q; X* G9 E
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);! z8 z8 L4 P* q, E# r9 p
( A6 _( a# h  b
    /*等待UPP传输完毕*/6 c5 G4 W8 @+ _3 }% n0 u2 T# a
    //i=0;8 O, V; H& S- r
    //j=0;/ G6 S, A4 @% d& `# n3 r
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
. ]- `+ p- I% y4 J    {
5 c$ \1 j3 C' o% d$ C/ c        /*  测试UPP传输的同时操作普通DDR数据. d8 g+ g; h# [
        temp=i;
' I/ z1 z6 t  @0 w        i++;) V2 v) U+ B$ N: {$ J! [
        if(i==1024)
+ N7 E2 [1 U5 x2 J4 d        {* x# H9 t9 |, K1 L- _' {( A
            i=0;
9 P# ~4 I) ?; ~/ z+ V) u            j++;. |0 u: {5 y" K; }
        }
, o- ~" T/ E# ^9 K        */1 y' i/ z) {, |

0 m% \" ]' [7 M) u9 `% [" V: o9 I$ o       asm(" nop");$ m. A4 }( Z4 o' c8 \
/ S- L' z3 X+ Z% a6 K, v! G
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);6 q4 K2 O) `" e. M5 ?$ e3 O
    }* v/ V; G; U" p+ ]# }0 C* m# z" w+ O
5 X/ D" Z1 Z) f6 y& e3 Z
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
0 P0 e6 j  D1 v    //UARTprintf( "i=%d\n",i);- l3 U* z& m& T& g- n  Q
    //UARTprintf( "j=%d\n",j);
! c! [9 x( r: N5 |, j  v    UARTPuts("Data mismatch in buffers.\n",-2);
3 s; A% c& N: o1 @5 T# \' U& P1 ~    if (upp_interrupt_count == 2 && upp_error_count == 0)  V6 H6 P9 S+ \3 g; @, \3 w# A$ p
    {2 |, |' |1 l$ o# I. N7 g
        for (i = 0; i<upp_frame_size; i++)3 [; x# I8 B, S+ d: ]
        {
* V9 l* p( k) s            if (upp_buffer_a != upp_buffer_b)
& g; g" p( [: J- t: U. h6 O            {3 y' G8 \2 y; d+ D
                upp_error_count++;5 [5 C+ [& O( @7 D
            }5 m" N- Z% F8 J8 B0 u
        }
8 i: L) F. ~" m$ H" u, b    }
4 {! }1 P: ~0 w7 n3 q# Z3 i  ~6 N3 Z8 ?$ ~
    /* 报告通信结果*/
* N: @% t. P/ q* d4 c    if(upp_error_count != 0): z6 r8 p8 K* c5 |- x0 M
        UARTprintf( "upp_error_count=%d\n",upp_error_count);! x. N; l7 }& d' s# {! X
    else
9 h. |1 _& B& H9 G9 V        UARTPuts("uPP transfers complete!\n",-2);
* z4 P6 [- n$ ]0 D% X8 G5 Y% X- A9 K/ q
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);7 K4 I4 e6 ^2 C8 I3 C% i$ m+ B
    UARTGets(ch,2);
+ n3 ~# _* j) E0 i1 H    UARTPuts("\n", -2);! H' F* e+ r9 f  K1 F, I9 P
1 J, [$ {- D, S; w8 B* T8 v; ^3 W
    if(ch[0] == 'y')0 \( D* e2 {: [/ p! q+ q+ g
    {4 G# z+ y8 \; h3 k
        /*打印全部读到的数据*/+ L- K1 m: t8 n3 T! }
        for(i=0; i<upp_frame_size; )
$ R" `: R5 z' n" z- x        {
, {4 _' t9 I; W4 h2 h6 p( q7 h            for(j=0; j<5; j++)
8 u5 r4 c2 C( G* a1 t) [            {
) w$ z1 z& ?; G9 w! Y& e, j+ }                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
: V0 |5 u; ^: o8 I! d. V                i++;9 h: w- W6 s( l1 M9 Z, S; z9 q& F2 p
                //if(i >= 4096); ~# y9 \! P3 ?8 h) F
                //    break;; B9 J) Y% ]" r% R% u, O
8 e- u8 m4 O) S
            }& A9 V! ~+ X' Z- i$ \( }
            UARTPuts("\n",-2);
' S; x- l; V8 {( t" v8 u        }, A1 h; |' _1 e) S3 R9 {
    }
& u- v. B: W) ]' N; U" V; u' ~4 b. v6 Y& U' J+ s8 l& L
}
2 H* ]# _: J! i+ {& ]

+ w. \! _, y, y, x
" L  S5 v: {+ C. v3 m
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
, L4 q) W! R) P; n9 e  i
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' M4 o  w. q: U0 \$ \9 r" w




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