嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?: G5 f. z# }" T6 @1 Y
Void UPP_TASK(Void)
& q0 Y4 V' V# k( k{8 R# c' k/ o3 R2 a* g+ T9 a" i# g

5 y( f6 {# n# `' D0 c2 m$ c    int i,j,k,target_int_count=2;. Y5 ~/ _5 V, R7 W7 n
    char ch[2];
8 S& y, \2 @, |5 h
$ y& z, w/ D7 R6 o: s) U( \; ~% ^0 c$ o, N: U# o: H

; f7 n5 T; ~" U    upp_interrupt_count  = 0;' R. s/ j. P4 W, v3 e
    upp_error_count = 0;
  @$ a9 K8 [5 {  S/ T
+ _2 U3 R8 x0 o3 E+ q$ K; Y, s+ f    UARTPuts("\tResetting uPP buffers...\r\n",-2);. {1 p2 H# Q* O, I( m/ n1 e2 S
    // Initialize data buffers
0 v7 u' q2 |" \0 `    for (i = 0; i < upp_frame_size; i++)
0 i9 J1 H& |8 R2 R! d    {2 A: @% B/ O! y' [9 ^$ N
       upp_buffer_b =i;, h7 s- v. d) ?) m) D4 @
       upp_buffer_a = 0xDEAD;3 k9 @2 d0 V: w2 C* _/ I
    }
5 v5 |: c. L# ^8 _2 F! Z  n9 k
- V$ }* d9 }( J$ k5 W7 J! }6 Y' A    //for(i=0;i<1024;i++)$ X  v5 _  T. s7 S
    //    temp=0;
+ l; t+ B  l% H! j6 ^& {. V- `- }
) \, q- `# ^5 n    //UPPReset();8 t6 W# _) O( d/ o+ D, l# f1 s
    /*启动UPP DMA传输*/
" P5 w( h7 ~& G: A* }: H    UARTPuts("upp_prog_dma_i\n",-2);
( S9 K; E8 X% W, z0 K0 g  F    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;' F5 s+ D! N0 a, F
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ V6 M$ b  Z( b1 S0 k    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);( u' [4 u3 k4 r; t- T
4 C1 ^; i  R- o
    UARTPuts("upp_prog_dma_i\n",-2);
4 \" u5 o+ p. @' x) H& K    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;/ C% X3 i0 q$ _  h
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);2 R  _$ h7 Z8 f
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);) u4 N. i5 T# V; S: w" C

2 v8 y* d$ e$ s    /*等待UPP传输完毕*/
% Z! @+ X  B5 K& h7 [% K    //i=0;
7 \. K6 {  U) S" [# _    //j=0;
7 V. J* t1 m+ Q% R( G    while (upp_interrupt_count < target_int_count && upp_error_count == 0)8 z( b1 [5 \% Z7 h# p3 Q
    {9 {, j1 C+ v  S6 Y! R
        /*  测试UPP传输的同时操作普通DDR数据! e9 H( |- e7 O" I9 O& R
        temp=i;' n; g. ~: m3 X; Z: m# s; E; e
        i++;
% Y% Z$ ?- g3 b* r, C        if(i==1024)1 u. Y5 k8 S0 t
        {
7 S/ j, Y3 p; J  ]  V4 M; z, m            i=0;
0 d+ Z% Q* Z6 A% p( ~9 F            j++;
, C/ W4 R1 ]7 d( m% r5 K6 r/ V        }
9 q# I; o3 G1 L# p        */* o* m# v/ l- @. o
( }1 t' H5 h/ b* M2 V0 e+ Q
       asm(" nop");+ Z5 ]2 @8 ]4 r
4 U) |; ^" k; L% Q$ `; C
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);/ _) r2 ]( n1 T2 A7 \# W: t- M! {
    }$ C# N: _; F) I
$ p/ J! p4 W) V# }
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
  y: L/ p: \9 O; `    //UARTprintf( "i=%d\n",i);( H* m# y* O* l; _9 g$ R6 `
    //UARTprintf( "j=%d\n",j);& R0 J% S* t: Q5 [
    UARTPuts("Data mismatch in buffers.\n",-2);, b' s. H% N5 u( |
    if (upp_interrupt_count == 2 && upp_error_count == 0)
- J9 ?' n7 A3 s  x  F* r% m    {
; ~3 A  M+ m* T" l  {. B) ]        for (i = 0; i<upp_frame_size; i++)
$ o- I1 N$ }! e9 N        {0 [# k7 z4 ~# c
            if (upp_buffer_a != upp_buffer_b)
$ B6 |0 ~8 H+ p' F1 ^. I6 S1 e            {8 ?( J* [/ ?9 `( @2 a% B
                upp_error_count++;2 n9 ]) N2 ]5 B# {- h8 \
            }, N' Q) a5 P6 t$ j
        }' ?6 t5 X9 q: a7 j2 k
    }* ]0 k9 e, l# F5 f+ a

' j2 s2 L7 {" u1 `- c! J( L" E% i; o$ R    /* 报告通信结果*/  v* M! H4 e( }5 I$ U7 g! N5 f, E7 ~
    if(upp_error_count != 0)
) y) T2 ~2 q3 W8 ]        UARTprintf( "upp_error_count=%d\n",upp_error_count);+ w' e5 w5 N4 [* v# i  v( t
    else# r$ u* h& [6 G
        UARTPuts("uPP transfers complete!\n",-2);
% @( M' ?' E: ?, i3 \9 l1 b4 S" y+ @1 A& c( {+ Y% p; Y
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);9 B, q3 {; G0 I3 H( @
    UARTGets(ch,2);1 H+ {  V. d% z* K
    UARTPuts("\n", -2);0 c& U% ^- g- b6 M* g8 ^6 q
% |9 y  _* @' L; j( `
    if(ch[0] == 'y')
& i$ r" e; v8 e& C$ ]' ^    {
, W0 q/ j# D9 ?" H: r9 D- b        /*打印全部读到的数据*/0 _, M% s* v* r- M% p3 E  y2 ^1 \
        for(i=0; i<upp_frame_size; )7 e9 E/ l( U' [! e
        {
" g& s2 W& C# v) M            for(j=0; j<5; j++)
  }7 O5 V' O. n3 r5 F- k! l+ t            {1 q- O& |. H2 U) x
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
6 K  N5 T' I# P1 ]6 |                i++;& ^! K- m: Y! x7 ~- T
                //if(i >= 4096)
+ @, M4 q% S$ C+ }; T- A' V                //    break;+ r. ~9 D% o( o* G
8 l! }5 \5 L8 O6 _$ y- l
            }; p8 H- t0 m8 M9 H8 x! x% h
            UARTPuts("\n",-2);( w& b# [% Z; L) L- y
        }% |5 {% F0 A  v4 C# c
    }# {8 a& o7 |. Y" |: R5 j$ N4 A

8 A' ]/ g4 e2 r}

0 [1 K: d) [3 `8 d& N) h

7 m# q" e. U6 ]7 N+ `
0 h! ~8 i8 \2 c3 l, E
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
' a1 T- Y! W) Z: x- e2 x. p
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
# Q: u. u1 h% R0 l" D1 k




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