嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?- g2 ]  h; U. H/ p% z7 u
Void UPP_TASK(Void)
/ j! K- b7 u* R+ E) B{
: H0 q, m3 i; S
2 P6 t- G9 z# J! k2 h- `9 [; e    int i,j,k,target_int_count=2;
# h  Y4 F! |& w7 S4 m    char ch[2];5 H3 C: p' q! _* `/ a# ]
+ K$ m& T, y/ S) l* X; `
" ]/ f% a+ _" ~) F( {

7 y& z# \/ _' U6 c  F& k    upp_interrupt_count  = 0;! P) Y7 w0 h7 \/ ?, s
    upp_error_count = 0;8 ]# u# w" z7 F  L

* D7 b$ H! O9 }3 Y    UARTPuts("\tResetting uPP buffers...\r\n",-2);
  C" A: w+ T# e& o$ [" Z    // Initialize data buffers
5 }! x" ?; J& k- N    for (i = 0; i < upp_frame_size; i++)
% K: w2 W. W/ _; j  e5 u    {3 P, U; g$ U5 A3 W
       upp_buffer_b =i;& W0 p: g, k  z
       upp_buffer_a = 0xDEAD;+ C4 v. H! E$ C$ c, L: C
    }4 F1 Q. Q+ \1 Z% O( \3 B8 M6 t
$ o, K# \# J7 c1 T- ^( @( c3 ^
    //for(i=0;i<1024;i++), w3 L- g1 e" h4 \5 z9 [( P
    //    temp=0;  I7 u3 i' a) G) R

* n9 `& `  N- V" T& G& r    //UPPReset();# k; R8 N: m8 ?- E" x2 K/ L
    /*启动UPP DMA传输*/% p. X" [% X) t; @3 V7 ]3 V
    UARTPuts("upp_prog_dma_i\n",-2);  }7 n' f& {; W" l3 f% ^" u
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;( `2 {7 H( V% v. `' A7 o$ g
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: p( s2 U3 i/ j- w1 l* [! L5 }    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
& `/ U* _8 l" [' w/ B& [: Z
" x5 n" z: p) q& ]; e5 t    UARTPuts("upp_prog_dma_i\n",-2);: O) R: N0 ^6 l8 f- x/ z! l
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; V5 m( h% e6 ~- f    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 Y' Q4 |9 E+ q) K$ P+ H; T& ?4 X* \    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);* e0 `( Q- K/ {, h. @
4 n3 Z+ V# f# s% {$ B# l% \
    /*等待UPP传输完毕*/
* k5 F( |/ B! y; T    //i=0;
! a9 b! R4 N' b% r4 A; H8 _7 I( l    //j=0;( E* b: W0 @2 H, L& u4 f
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)9 u: i2 }0 ]* ]* R  T. f0 D
    {
1 x) V' a+ r4 ?1 g- ]        /*  测试UPP传输的同时操作普通DDR数据
$ \: H- _8 ^; {- m        temp=i;) \, V& b4 g; W2 H8 ^" E' J# j/ V1 H2 n
        i++;
# K8 N1 @) R. U9 z; H6 U        if(i==1024)9 \7 e, I: {6 k" Y$ h
        {& w& d, \/ t: }
            i=0;+ H% H7 f" S4 J% [* p* ]( q
            j++;) c& a3 P+ z. n$ @5 A
        }# H5 R- v/ @3 [: }
        */3 v8 t8 U* {% P- @% ^9 V' e& `
8 A  z! y8 J# e- I3 H! O
       asm(" nop");" s8 K  L6 L" @3 L* o) v" m

7 o" A1 v. ?1 w( Q1 `       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);. _" x3 G' {- X7 ?
    }
; c! x1 H% w0 I( K9 L
9 T; ]% I9 v6 b% }    /*检查UPP传输的数据是否正确 (loopback modes only)*/
5 T. ^0 z: {( O! y. ]    //UARTprintf( "i=%d\n",i);
  n& |3 N/ H, C* ^+ S    //UARTprintf( "j=%d\n",j);  w/ L8 W% f+ T3 L+ c% j
    UARTPuts("Data mismatch in buffers.\n",-2);
! {8 C; ~9 }+ g( o' P* c8 L    if (upp_interrupt_count == 2 && upp_error_count == 0)
  u5 a' H: i. Z# T# T: b    {
: W; u6 ?, U: E5 u        for (i = 0; i<upp_frame_size; i++)8 m! T! ?  I0 W' c, F9 v
        {5 Z: p5 k: x5 x
            if (upp_buffer_a != upp_buffer_b)+ V# E% f6 D1 x9 D8 m; A
            {
0 {1 t0 }) A3 b                upp_error_count++;4 y5 J; d# ^+ W2 I, ]0 \
            }( _9 {/ A0 L% L
        }
& q! \0 b$ j8 b! C. g3 K    }* x3 u  t& N: K/ l6 B8 z. A: V

; `5 U, t% f. V+ n& V    /* 报告通信结果*/8 L# Y1 Z+ T% J1 f6 A9 Z7 q) Q
    if(upp_error_count != 0)% B( n  X7 h! b( B
        UARTprintf( "upp_error_count=%d\n",upp_error_count);, q/ X' D% L# p4 d! n: |$ |5 `
    else
) j7 M. F& S  V        UARTPuts("uPP transfers complete!\n",-2);
4 U4 y( |7 `% I. H$ _
( H# A* r" P! p% i; j8 {# Q7 ^5 J    UARTPuts("Do you want to print all the data?(y/n)   ",-2);0 |; z5 ]8 A  S# A4 _7 D$ L( S
    UARTGets(ch,2);
* P1 `; R1 R9 ^    UARTPuts("\n", -2);
5 E' [" \. _. U4 q9 e% J) E0 P& z" I2 M0 s1 X5 G
    if(ch[0] == 'y')
# h" W9 ~% k: T3 A9 D, L' T    {
6 o2 X* T$ M* t) z* d0 e5 @& ?6 P        /*打印全部读到的数据*/+ A( l# s1 Y9 j9 ]
        for(i=0; i<upp_frame_size; )
, P* N+ G9 X9 T5 U" p, w2 o        {- W, n; {) M, D7 e; H
            for(j=0; j<5; j++)
$ s3 `* E5 m5 V$ a/ J  S            {
( Y$ c! \( ~- o                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
: z! P8 {# l: e                i++;
0 }: }4 l- k% v5 [& H  x9 q1 e                //if(i >= 4096)
+ `1 |1 t% K7 N; U* G1 `4 c/ c                //    break;+ l/ @7 w( [- C+ y( x2 ?# x. m
/ W" K' F7 m" Q, J
            }
& L7 o$ m" M; {! m) L            UARTPuts("\n",-2);# g' M7 B# `- u" m8 ~
        }
5 M0 b& L/ X7 e- _' w    }
4 C. V, M5 P# O  [) }) ]; t1 L' V8 N- q+ f
}

/ \7 U2 _: ^% a0 C+ c9 w

& O9 L5 A4 t3 O2 J
1 d# `1 l& ~7 o/ N0 P4 z
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( ]& W+ q0 u# C
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。) U% d- V( T0 N





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