嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
! J" K1 ~9 ]* b/ G0 V9 e" q. P
Void UPP_TASK(Void)
/ j8 ~6 h! P- k% a9 H/ F2 x5 E{/ I% k8 a3 A3 r$ B
( j  }2 G- L# m# \  p" @- v5 [
    int i,j,k,target_int_count=2;3 t5 P9 n( ]) a4 y: P
    char ch[2];+ J$ d" r5 V7 X3 `' C

+ N# t: n) Q  U0 g, H% P  y2 [# Q' w7 M' J9 v

* C3 D2 r) w+ J( \    upp_interrupt_count  = 0;
& O& X$ l- @: u" e* D6 b0 G& v) ]7 O    upp_error_count = 0;
* y2 \  v3 J. ?  _( o, F
2 P* n' q8 d" z) @. J    UARTPuts("\tResetting uPP buffers...\r\n",-2);3 F" u6 m% k8 K4 T+ ^9 y
    // Initialize data buffers
! K  g* U, U% Z$ y4 A$ E    for (i = 0; i < upp_frame_size; i++)
& c1 h8 s4 I8 j7 N' E9 z    {
$ _" P. y3 c7 W. E       upp_buffer_b =i;6 e( g( j( Z6 S
       upp_buffer_a = 0xDEAD;- Q4 K# ]6 J4 ~
    }9 |& q1 Q; @/ D( X; M" G' X2 i
& Q/ e# @6 W8 E7 s" S
    //for(i=0;i<1024;i++)4 r3 f- t8 Y) W9 j# o
    //    temp=0;5 v. x5 u% e5 D5 M2 O0 b# |
9 i1 K# f+ v% b8 C3 @
    //UPPReset();: e. E& j0 E! F; z+ j. }9 ^+ H
    /*启动UPP DMA传输*/" H0 Q- k, r$ o3 k
    UARTPuts("upp_prog_dma_i\n",-2);0 F! R( i7 D6 b5 E
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;2 l  d) O. Z- L' x6 E" p
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);3 \* T6 h9 s$ u
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);5 I4 s; t/ |/ ^9 o  o

3 E1 N+ A2 O8 {6 Q8 S( B* r9 T. x# Y    UARTPuts("upp_prog_dma_i\n",-2);
( _; N4 @  y* H    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;9 E  J. J$ h9 M# l( D+ o
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& c/ p" W7 F$ j# v* V# I* f9 D6 ]" D  P    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
7 k0 P$ X% ]5 u9 K$ Y# R
3 d" R1 R2 [6 T! |" r0 M7 g    /*等待UPP传输完毕*/
5 d% o3 l6 ?0 [+ X* m    //i=0;+ k0 G3 B- A5 ~6 m$ g! c) w5 N' N, F
    //j=0;7 c/ }5 ]4 j, \; o! y
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)8 k, q, b2 o8 B% ~
    {9 ?+ I9 w: ~9 x1 j7 r+ n" g' w
        /*  测试UPP传输的同时操作普通DDR数据
4 x! T1 q6 O! N2 i& m        temp=i;9 H4 R( m3 {5 \* ]/ q6 m( ^1 K
        i++;2 M5 h) r1 ^# P/ _! |0 E, B4 _
        if(i==1024)7 B6 y1 T- b  ^2 {
        {
% n& S6 f: a1 G- ^1 L: c# z            i=0;
, Q/ L( u3 |: r4 O4 ^; g. k+ x            j++;6 j7 B. ?( Z, o% D5 l9 Z
        }+ h, x! _0 s  Z0 e1 D8 X* f% o% H
        */
: ~; i1 B3 t1 N. T# c
" ]6 C3 J0 T7 j$ @; X9 [- c       asm(" nop");! @' ~% K; q5 c) {- @
7 d( o, s% Y$ _3 B$ j6 d; T# ~
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 V% K6 d' i, ]* m! h    }
  z: ]' A; e' _# [: H4 E/ D8 e
' b( n5 O1 D- }4 d" S, i: r1 n    /*检查UPP传输的数据是否正确 (loopback modes only)*/
  u3 A4 T4 u* o& V    //UARTprintf( "i=%d\n",i);
" B6 Q! [* n2 I! _. Y/ F0 _    //UARTprintf( "j=%d\n",j);
& N4 ?# b  P3 C; I  \: v( k! z    UARTPuts("Data mismatch in buffers.\n",-2);9 U7 i0 [8 _3 g# _' h, u# T, l! t1 t
    if (upp_interrupt_count == 2 && upp_error_count == 0)$ c$ i' Z6 V; V0 k
    {' M) N8 C- g2 n  P5 P" h! i1 Y
        for (i = 0; i<upp_frame_size; i++)! G9 j3 \. V' s! c9 k
        {
+ ^9 ^7 N6 C1 |# B& ?            if (upp_buffer_a != upp_buffer_b)7 Z! m% P0 C: N2 X6 e
            {
; N, V3 y2 o, y# `3 M1 V2 P3 d; m                upp_error_count++;1 }* I: \" J2 H7 s& S6 T  {
            }
2 N7 t, E7 ^# X6 ?" |% `6 z        }! x% G. F/ x# _- W* u1 L, x- r
    }
7 C5 e, R0 d( c. s5 b$ y3 ~3 V+ s5 Y& [! E) P  j( {+ d: J/ Z
    /* 报告通信结果*/
/ _$ C5 J& w0 h  C- w  g) u) ]    if(upp_error_count != 0)
- x. \: z  g" V% B  q: j        UARTprintf( "upp_error_count=%d\n",upp_error_count);
) T- H  X1 n: t$ S  n$ p! _% @+ N    else
* U9 U! u7 Z0 V# U/ c; [& }        UARTPuts("uPP transfers complete!\n",-2);
$ y2 M+ n4 j# k' O% D8 ?; M6 k" h" R1 i" g
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);! i* q7 C& p' {( w7 M2 Z
    UARTGets(ch,2);, ~4 d9 k6 T; N
    UARTPuts("\n", -2);4 D, [! S! u  r1 K

1 C' r9 o4 Q/ Y0 y6 \5 r! u, _# Q    if(ch[0] == 'y')
6 F: U$ B0 |+ m3 r) C# {. M    {
) H. `2 [4 |1 F. q        /*打印全部读到的数据*/! K4 h: p; X& R1 [! Q
        for(i=0; i<upp_frame_size; )- _3 ^, |7 C, m2 _  K& M5 l* l* ~, p& R7 `
        {$ s  k) O& G  p
            for(j=0; j<5; j++)8 q0 _: J) h% w" S2 U" M9 c0 L
            {. ]) q8 ^7 |+ T. L2 R( N9 _
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);9 m/ ~5 g3 v5 c) p! L7 O, k
                i++;. C  o# W# d3 n; I8 w, l! S
                //if(i >= 4096)
( u* q; e# `% m6 I+ R! ]& q                //    break;
2 `2 g4 B# G1 p  g) }7 h* w- |$ \. k
            }# Q. A' G: D+ `- b6 d3 d; N( s9 x
            UARTPuts("\n",-2);
" P! p$ |/ ~1 Q" @( g7 \: M        }
0 L8 y; y( L2 o& Q4 e    }+ K7 s# J0 U7 E( y

* M" D% w" c! X$ r2 a}

+ m5 N0 v1 x# ~: n3 r

& C$ F5 M5 }$ @  q' ?/ Z  b9 b7 {$ H* X, [

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。! G/ s# O3 f5 Z& m. h! z' r  m5 ?

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。. [/ L; ~9 Q& M% Z% B





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