嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
  q) g  K) }' K) b) `4 C% U/ f
Void UPP_TASK(Void)
: N; d6 h  u& y2 d{
7 _1 z+ O1 v; [& P5 I4 H* i) |, {$ R0 Z' a( \5 [1 e' K4 `+ T
    int i,j,k,target_int_count=2;  y2 y3 ^" ~! [
    char ch[2];* o% D+ K+ ~6 b* {( j

4 d% R/ v2 f$ l$ P2 I. d
3 `$ L" `2 `. p6 m2 x7 u4 M. g2 q$ E# T% Y
    upp_interrupt_count  = 0;
7 ~% V, ?/ d8 `& R4 O    upp_error_count = 0;
0 G# T* n' Q" ]: H/ v# U
1 m  h- p$ A# u! E1 z6 d8 L    UARTPuts("\tResetting uPP buffers...\r\n",-2);
; Q8 P8 A9 C' y9 r    // Initialize data buffers+ Z: M; B* ]8 @% o) W
    for (i = 0; i < upp_frame_size; i++)
! q3 t/ v; F8 i, R  J8 z0 |    {4 J% r9 n8 L/ ]/ o& t' @$ |& t
       upp_buffer_b =i;1 R$ u! @0 t- Q( f
       upp_buffer_a = 0xDEAD;8 f7 W  {& R/ s% r
    }$ r( Y  b( T4 K$ H, a2 G
- J  I  F) u# D4 b# d% a9 o& ~
    //for(i=0;i<1024;i++)
) ^; `% j) v& X+ u    //    temp=0;; q" b% Z' Y" c: P$ d1 G- t/ p
$ q  e% j& s3 a3 G; t
    //UPPReset();
" n% O1 s1 Q6 {- A9 U    /*启动UPP DMA传输*/( }  O! c& m' j2 g6 O+ q2 E" C* F
    UARTPuts("upp_prog_dma_i\n",-2);
3 P+ Y: _6 Y$ m9 e4 ~    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;4 }5 Q- K/ c* ~/ E* K# U
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' _3 ~1 V1 g. T. b% b* w" R; ^7 N    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);3 g) s7 D3 D2 m  r8 b) s/ {, B
$ p: L$ p! {' @% S$ A6 {/ |
    UARTPuts("upp_prog_dma_i\n",-2);  X; J+ n, y$ T, ^% U+ q
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;  E' s5 u: W, u+ i* B1 t1 K( }
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
  }1 D" ~( D, b    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
3 i0 `/ ~% k4 Y3 R0 z) V
0 k# |( ~/ J, x0 q4 S1 ^, ]- N( W' {    /*等待UPP传输完毕*/8 n8 R9 A4 Y- d* n8 p
    //i=0;8 q5 U0 @* p, j7 e
    //j=0;
, w0 ]+ n& X: E0 b; e& e! N$ U    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
4 A7 F, d7 s" o+ o/ V    {" |! V/ ?+ _) T- `3 A& ?
        /*  测试UPP传输的同时操作普通DDR数据; ]; K9 \, F/ K* q' N
        temp=i;! n* v+ e9 O" c" I
        i++;% q( _% d! C! J" Y
        if(i==1024)
$ x6 N2 H/ f+ `! _- z, ?' d        {% c; c( ~0 w; P$ T( W+ t3 w
            i=0;
8 ]) Q4 J" y" C% S% K* v            j++;
4 C; |8 @  \1 G5 }& G0 Y8 n  @8 ]        }
+ v$ e" w7 Y* s- v+ A$ b8 I! v        */. T1 F* [7 _8 o8 J- z

* C9 E' A( P9 D+ {       asm(" nop");: o. D8 x* `: o! b2 x7 O* l
4 N) k  h8 b% V5 u( O5 P3 o8 }
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);1 K' ~) A7 t3 P* e3 v2 T' o
    }
8 \5 v" e; H7 V& B$ R3 @& {/ _9 s7 A, d  y4 C& @
    /*检查UPP传输的数据是否正确 (loopback modes only)*/$ c& k- v( Q( b, d4 F" Y  V0 s
    //UARTprintf( "i=%d\n",i);
+ A' [; |. f) s. h. T4 O- P    //UARTprintf( "j=%d\n",j);
& l1 u  {; W# q, W7 y3 y    UARTPuts("Data mismatch in buffers.\n",-2);$ c/ ]5 @! r4 d) L7 q
    if (upp_interrupt_count == 2 && upp_error_count == 0). E5 N4 B' k% l1 q, |9 g
    {
2 f$ @& c; g) `7 h        for (i = 0; i<upp_frame_size; i++)
0 u+ o5 V+ x7 b/ W  s, A        {6 o/ u- r! l9 `$ n# g! [/ F' C' [+ |% y
            if (upp_buffer_a != upp_buffer_b)# I# x8 o) M8 p3 ]& o* W2 t
            {
  C# F0 q" J  ~- k                upp_error_count++;
- w4 n; w2 [- [$ f% c3 G6 Y            }7 D4 l$ ?) l; f! M# H, i% G, x
        }
* a- {( Z9 n/ c8 H2 ]    }
5 S9 |. E, g9 z6 l
/ R4 {( n! b, f& }4 I    /* 报告通信结果*/) _5 g$ ~# w; P3 U. M
    if(upp_error_count != 0)
" r( \) r2 R2 h        UARTprintf( "upp_error_count=%d\n",upp_error_count);2 h/ V6 ~' L4 _$ k6 y; m- m
    else6 t, u3 p" K- V; R5 m$ k
        UARTPuts("uPP transfers complete!\n",-2);6 e3 P; R/ a. s0 s1 u) `" a
. D' d1 L9 @4 O* @% R
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);5 I/ C7 R. s5 q6 D2 R8 ]
    UARTGets(ch,2);
/ K" M  c2 n# C7 |1 C: Z: q9 D    UARTPuts("\n", -2);4 b" O4 Q4 J5 R: m2 o0 M
, r! K/ i$ J& q
    if(ch[0] == 'y')( B% B: L6 x  j9 z# v! u' e
    {
& u( c& N2 }! ^0 }; [        /*打印全部读到的数据*/
6 M4 q2 o7 Y9 P7 G- ^        for(i=0; i<upp_frame_size; )
5 |# }. v1 k$ S        {
2 o% w) M$ W! d! C9 A            for(j=0; j<5; j++): d& l- q2 c6 x) L- \. j, f
            {8 r& {7 \/ _1 q0 V9 K& p
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);$ a, \* O$ C8 @9 e  C) m
                i++;
8 \* f" s1 Y  Y1 t  W9 e8 v* P                //if(i >= 4096), _: M+ ]1 O6 k$ ~* j
                //    break;/ j" ]5 T! Y9 |. p, f8 M" c
0 a) J1 u6 A$ r, B& |1 D9 `2 `7 }
            }# F0 {* _8 A7 R/ a
            UARTPuts("\n",-2);
# Q+ T/ c& F+ w: b        }
( f- ~1 H% p" W( ]5 e    }- [6 h$ h! D: T1 @& V) T7 N* F

5 [6 {2 z& ]& N1 ?) S& p}

$ l" C% L! T6 h; G. T& m, W
# V* I# J8 g, ]

1 y8 u4 W7 A9 q" x* {
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。7 _1 N5 I6 K. E* n0 u7 {

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。( H* H  f9 J* |3 h# H





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