嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% Y; s# w/ F# \/ m/ i- p3 n4 E6 U, L
Void UPP_TASK(Void)* K% j5 p% T5 ^7 U' G3 B
{/ ~3 Y) @4 x- B6 e8 h; H/ ?, D

. d4 G: `' {% U; H' l4 _) N/ L! X    int i,j,k,target_int_count=2;) p  r. _; M# M: f! ^4 }; H
    char ch[2];8 L2 f- [( H$ L1 P3 U6 Z

2 M- T, p) D' \  ]
/ Q  b0 ^' p6 L$ @# ^; v$ d7 P+ ?% h) c) @( z- a& I' M
    upp_interrupt_count  = 0;" L( b) P$ u" ~- G4 i4 ^3 P5 h
    upp_error_count = 0;1 `4 j& D- n3 ~' t/ |2 y

" f) A/ d% Y2 g- T! i& I$ a    UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ A; X6 Q4 Z% Y* |. b. A/ `) ~    // Initialize data buffers; v+ ?! {% t2 Y6 {
    for (i = 0; i < upp_frame_size; i++)  J5 e% n% n- f5 l  N# e  L/ p
    {
2 o: F4 I: j+ a7 v5 l3 M. p       upp_buffer_b =i;
. q* G  n( S: ~' A       upp_buffer_a = 0xDEAD;
# {3 Q& u$ y/ V$ M0 L8 \& |% t    }- K  B; W8 Y7 `- F
/ Z0 @1 ^  x2 b7 Y
    //for(i=0;i<1024;i++)* O+ E6 {. r& _1 W3 k6 e3 P8 Z
    //    temp=0;) T! b& d) L' j) M8 H/ p
0 B- H, e) y  J% f% O4 @
    //UPPReset();: p: i) m$ o, a( V: n9 Q4 N$ K1 V
    /*启动UPP DMA传输*/
1 i! ]& ~, M! @    UARTPuts("upp_prog_dma_i\n",-2);. T) @: z8 K2 c& m  j" @7 x
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;9 f/ N( a- s. P  A
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& ]) C/ a3 g2 {6 D0 F    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
4 c2 o8 w# g% F0 ^# X6 T
& G5 U" T5 E- v* ^# D    UARTPuts("upp_prog_dma_i\n",-2);
5 T/ e6 b: ]9 ~5 J! U6 W    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 D' L: [& v0 C, z    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);/ Z  y. G+ g' H* f$ N: ~6 M. q
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
2 n4 G: V/ @6 V0 o0 U' ~/ G; J7 j, R) K; S+ u
    /*等待UPP传输完毕*/" N7 e+ m2 H9 ~( Q9 Y
    //i=0;
) M+ j0 a+ X/ @3 X# ]6 @' ]6 h2 Z5 \    //j=0;
' y' _2 b- s& y( y8 l, |4 f" ?    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
: t' W9 u$ y* s' K    {& w9 O3 @" {# @/ T
        /*  测试UPP传输的同时操作普通DDR数据# a% E5 }2 R3 I& e
        temp=i;- Z4 G" K. |$ Q, J2 ?4 j" T
        i++;
5 m0 \! t2 G9 o0 a7 \; K# ]        if(i==1024)/ t6 F0 i' [2 u. R) o
        {7 m# h# O+ K, H* }  L
            i=0;
, \' D) H, Q+ n4 w" p2 a' F- [            j++;* u3 g3 A) \5 |; q
        }: W: X, Y3 w/ H# P& i7 F3 u
        */
6 P2 i  C: ^$ ?; q
" w8 J% |+ Q6 ~' u; c* J       asm(" nop");
8 l8 S$ B, J3 Q
! s9 C* h5 |) g! S: K0 ~       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);' ^2 `" }  T* ]7 h: a
    }: g: Z: R4 B2 q7 V0 G

1 s/ L1 Y$ W1 y1 k, N: n    /*检查UPP传输的数据是否正确 (loopback modes only)*/
/ g& h+ K( J7 P+ W- z: }8 ^9 u- G- G3 g    //UARTprintf( "i=%d\n",i);
* H1 p  a! m$ X    //UARTprintf( "j=%d\n",j);
, E, w/ |2 A8 Z  \) M    UARTPuts("Data mismatch in buffers.\n",-2);
( {* s( i3 m  i$ g& r7 W7 E5 I    if (upp_interrupt_count == 2 && upp_error_count == 0). _  U# Z" W0 z, T, D4 V+ q! o
    {. V- z: x1 R# h- Z( d5 J7 c3 a
        for (i = 0; i<upp_frame_size; i++)$ a( P" Z) @$ H
        {8 w( p% Q8 |. P: v/ S3 E' [
            if (upp_buffer_a != upp_buffer_b)
( ~5 v/ W2 e# p3 {+ l+ _            {4 Y& z% U1 p: |! H: t, r! s
                upp_error_count++;2 L5 h3 K3 ?5 T8 o4 ]' G
            }. O/ i& d& X/ I4 _/ Z; O
        }
/ E& }( y9 V$ ?: ?    }
4 n: `( y2 H4 k" @: n0 A& z" ^+ s% q4 t8 E1 p2 U
    /* 报告通信结果*/9 C% \9 p$ C& y$ k; ~- O) Q
    if(upp_error_count != 0)9 }2 c$ \/ C5 a" n- R
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
' S; t& ^/ W$ x3 m, M5 J" L    else
$ N' Y% h/ X0 W0 s        UARTPuts("uPP transfers complete!\n",-2);
7 d* V. N6 x) u% s# x3 S5 o) w& z) q
5 W5 _6 y% p4 k- {$ A! f5 X( A! G    UARTPuts("Do you want to print all the data?(y/n)   ",-2);# e6 ~# @* M" ^: k2 k+ [* r. x; T
    UARTGets(ch,2);* u! M1 b4 i* p$ z# f+ s
    UARTPuts("\n", -2);
* I' D- ~2 w7 ^( N5 H4 Q5 K0 r1 W# l! w9 L
    if(ch[0] == 'y')9 `8 m. w* y$ L! ?+ B  U- u
    {
1 n2 J) |% t& ]/ k, E        /*打印全部读到的数据*/5 {" }; B  \+ F; ~6 c
        for(i=0; i<upp_frame_size; )
! {0 ~' G) z* M- r/ O        {7 \7 B* f" W1 p- n
            for(j=0; j<5; j++)( Y6 @) q, h3 k3 X0 k7 J+ ?' ]
            {4 t2 e/ R7 j" d. k# {
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
; p- ~) i5 m$ j7 w& d) Q                i++;; U2 D- X& q* J8 ~2 v( `. v* g7 O
                //if(i >= 4096)  r! |, }7 Y; M. ^0 K% [# m/ y, D5 c
                //    break;
* y3 W* @- S! _& ]2 Z8 Z' l( ~/ y  v; M& U
            }
# x3 _6 t+ }1 A/ `( V            UARTPuts("\n",-2);
+ B( J+ P8 o/ g( L7 f        }
( a" J' R  _& \, j, R$ f. k    }' Z: R) y9 E# ]/ m; I- [8 S

2 D; e( Z0 e  U" Z0 q}

5 k* D4 m* v; [

. v2 }7 K/ v$ C3 r' ^+ Q. f- C& f4 q5 s0 r+ j* I

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。" W6 e- [( i8 \8 ]+ b, S2 X

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。( X7 X; p! O* f6 {, B) ]7 Y+ _





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