嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 e9 ~/ K3 b' R, Z2 m; g
Void UPP_TASK(Void)
+ e8 g5 n7 H* I& s  \; R{
8 T' ~* |  v4 q' V4 a  O1 ~% K& A( L* W# y
    int i,j,k,target_int_count=2;& w! ^+ A* O# N% @
    char ch[2];
6 D3 V, f- p; _$ B0 y7 g8 ~9 O' o6 e# O

* g- l% `/ Q2 t* _
; Z! U" {% w# j' n3 x/ {5 w% H2 I" a    upp_interrupt_count  = 0;5 e5 h6 l2 S% ?, j9 k! p" r
    upp_error_count = 0;
1 Y0 l  ?& \0 {8 m( N  y
! P$ l. ^& g5 [" u  [" _6 j    UARTPuts("\tResetting uPP buffers...\r\n",-2);: \/ [+ T' J+ D4 v
    // Initialize data buffers
# p# [( n, g+ y    for (i = 0; i < upp_frame_size; i++). _5 ~0 f+ @+ r: Y  U
    {8 P# B# g: A8 a
       upp_buffer_b =i;
4 r3 \- ]" B3 b$ g9 w       upp_buffer_a = 0xDEAD;4 l6 H. c  D. f' A
    }5 H* |1 c3 S' @: R9 f/ P
& m# O9 y+ k7 m: l4 t
    //for(i=0;i<1024;i++)
; P% _: M1 W( [5 r  Z6 r' J    //    temp=0;
5 L% h+ \# e, _5 }4 W! L3 w3 R5 f+ C* C% ~5 d
    //UPPReset();9 f' B6 h0 v. C* \( S' ]& [  C
    /*启动UPP DMA传输*/* D9 b5 B1 S- n" @6 c" ?3 ?5 k
    UARTPuts("upp_prog_dma_i\n",-2);3 O' s2 z+ B) u8 A& l/ A0 p) K
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
; O+ @5 p" @' W& C- p    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 U0 B5 j# D3 E) l    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);2 b; K% t7 D- x' ]& h. Y

' J" \8 }7 l: @5 b2 x3 l    UARTPuts("upp_prog_dma_i\n",-2);
7 I9 `" ]9 B) H# n# A    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;/ E! a/ c2 y. b6 }- Y. W& N9 e4 E
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 l1 [4 U. f* q    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! F) Y7 j* S' _: M
+ f( A2 e" d& [5 a5 u5 R( {    /*等待UPP传输完毕*/2 ^# S. m! _- m% L, Y7 N3 K$ Z
    //i=0;0 D3 ?9 w- M' k; u* N
    //j=0;) e& y" h( k2 s
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
0 k0 W9 ~7 v# E  _% R    {
3 g- ^4 a+ g6 h1 e! A        /*  测试UPP传输的同时操作普通DDR数据& ^; i+ Z- P/ r0 {& O" ~' N
        temp=i;2 }2 ~, F2 ^0 ]2 v
        i++;
- u  ^  M- o, ?8 l) K, V6 v5 W" E3 m        if(i==1024)
! E8 v# ?1 w& O        {
; B! t! e4 a# m            i=0;9 G& T, r2 V3 O/ Y
            j++;
6 c  ^, S+ F  c1 u0 q9 ]        }/ Y7 v7 v- H% h' K4 M2 ?8 v5 A
        */
% B! U  M9 O; v# j) }5 J- q
3 `; Q9 l1 x7 K& a) L( }       asm(" nop");
( {$ M& L7 m) c( s# R
6 x4 F. M, [% ?% @/ M       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);) I+ p. M; I& Q
    }! ^/ H3 }$ o/ h( C1 d

; [7 ]/ x5 X! H    /*检查UPP传输的数据是否正确 (loopback modes only)*/
# m; n: F* S! e. q/ _/ a    //UARTprintf( "i=%d\n",i);7 W* h: a) V# w' v9 E7 b
    //UARTprintf( "j=%d\n",j);7 d" [* D4 x) E
    UARTPuts("Data mismatch in buffers.\n",-2);
) q$ |- P9 m% V: k4 \    if (upp_interrupt_count == 2 && upp_error_count == 0)
9 Z# H" u5 Q8 L; q& W3 Z# Z    {# d3 ]0 Z/ n9 e( m/ W
        for (i = 0; i<upp_frame_size; i++)5 r  N: ^, L0 m+ g& {$ @, p
        {
) P, D/ }! b- I8 {1 Z            if (upp_buffer_a != upp_buffer_b)+ K8 `; o* z9 B8 d) f# ?
            {( E/ j! ^& E. `& L
                upp_error_count++;
3 E5 j6 c- d9 V  D+ s" m            }9 @, X. f; G' @8 ?; v0 G1 c" Y
        }2 e. z6 c: Y! b# X6 _
    }/ D; `/ l# t" q* ]
" y% `* {& Z# @( E* w! W
    /* 报告通信结果*/
7 Y+ f/ o! }3 V9 E$ f    if(upp_error_count != 0)
9 H* R4 l% y& J        UARTprintf( "upp_error_count=%d\n",upp_error_count);( {) I; n% B( ~0 h4 [/ K
    else
9 `) j. g8 d. u5 @: g        UARTPuts("uPP transfers complete!\n",-2);0 F% F, s4 V% b2 \2 F! a
& i' B$ M5 n8 }
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
8 {4 A: W1 e- \. L    UARTGets(ch,2);
. ^% g2 }% q2 f$ P    UARTPuts("\n", -2);
3 ~" [# H. m* T' \& _2 B$ E$ Q, O( f1 H; J
    if(ch[0] == 'y')
1 Z9 h) h: ]. h8 h. s) z+ K    {
4 b) U- [% E. _* h' N; Q        /*打印全部读到的数据*/4 w; o" G) S: L4 n
        for(i=0; i<upp_frame_size; )- U8 \. E  }: \3 h6 w, @
        {8 y$ j. ~& n6 M/ ~/ j. v
            for(j=0; j<5; j++); k& G, a. R. a" t& [
            {  I1 k7 F: H5 x( N
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
3 z! |  Y( r* f. b                i++;8 m  s- x' J" |+ _5 a! D5 j
                //if(i >= 4096)
* K6 H1 \; A6 A+ t" E                //    break;; P3 m; o1 u. [* p4 k, W

: [9 p+ k2 ~3 \9 C( u, w% _            }
8 y+ @& _2 I  |' L6 d1 _            UARTPuts("\n",-2);
, R) v2 {/ n, }3 u/ Q        }
: [/ j0 u, L& v1 \* D2 D    }
( f4 ?9 E4 |9 x
- T* Q  m0 `; M  [) M. Y. ]! Z) N}

* K! C- l9 P2 o( G
2 W) ~. n5 {3 f" K0 W

$ n7 r) ~/ H: \
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。3 R# s$ W, l! i/ U

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 b+ S' O7 i3 R




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