嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
6 E. U$ y  G6 P. v" q
Void UPP_TASK(Void)
, z$ Z1 A* C* I2 H" V+ l# f" ^; m{
- v* r- _% C! r' H8 m3 `8 K2 {6 ]) k% r5 {
    int i,j,k,target_int_count=2;0 k5 P0 B1 ]8 N/ f8 H% Z- v8 E
    char ch[2];( Q+ L3 d- ~  [$ y5 F, H

7 y# L- V2 G6 n; m0 X
; E1 E; K; Q2 J1 x5 r; o0 ^2 ^2 r7 F& M& W$ ^  f: O" }& ~3 o/ v
    upp_interrupt_count  = 0;
* Z7 I. x: U9 \8 j$ u' q* {    upp_error_count = 0;+ t( l0 c" U+ B( G
2 P8 ?) N& e9 o: q" ^
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
# u! K+ R% T( I! S$ I2 w    // Initialize data buffers3 D- e8 i7 Z  j& `: }" w: _% V
    for (i = 0; i < upp_frame_size; i++)
0 \$ t' D; C6 U9 {& A/ k7 F    {+ x. r9 J- }" o7 Q5 [  m
       upp_buffer_b =i;
- _1 x5 f+ I+ Z" m' b! e9 v0 \       upp_buffer_a = 0xDEAD;, T% h' _% H0 k7 q* n% m
    }
, g2 s# o. O9 |& l! X* F
% z* Z  J; ?3 E    //for(i=0;i<1024;i++)% I& [/ [- d% u% m' h3 d. d
    //    temp=0;/ |4 k9 r4 \3 J# z& s

7 Q! s) _( \# u/ |* j- D    //UPPReset();
5 V% D+ ?7 R) o6 O# e4 P* i    /*启动UPP DMA传输*/. B+ S6 F: Q5 g+ [; ~4 X4 [% _
    UARTPuts("upp_prog_dma_i\n",-2);
1 |) b/ X9 R5 R    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;& }; s- [+ O$ `. z  X; _' T- ~
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);" e3 _! f* a& G$ U
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);6 a% Z+ a( u: ^8 S
3 h4 q8 n6 w7 J% x7 \+ }8 F
    UARTPuts("upp_prog_dma_i\n",-2);' A2 Y/ B0 l+ q$ \
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;  r5 I9 g; e$ X
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# k5 ]9 U( e" C. ]    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);" u+ @& E: ^4 u3 O
2 d: g6 E" Y  r1 K0 b6 Z
    /*等待UPP传输完毕*/& F1 d4 u+ n$ Y: ~( \
    //i=0;/ j4 o4 A1 @( K: B1 g9 o% R+ I9 r
    //j=0;
4 a! z/ X5 W# o, Y, {0 Z    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
6 a1 O' {2 i0 n+ M! ~0 r. X- s    {
; L4 z$ c, S, h( Q8 v; K        /*  测试UPP传输的同时操作普通DDR数据
1 n9 h  H1 u* K' T# S# N        temp=i;% E/ h% r4 ]9 P( T$ N
        i++;
$ O' k; d. z3 ]5 G  ?0 R; k- o+ L) h        if(i==1024)
5 V. B  q- K; I1 p( R* {        {# ], o" o: V$ k# f0 ^! N
            i=0;
6 _) o9 {+ [* t$ F( y" }) P            j++;
* b: q: Q5 w; P* b/ n7 _        }
: H6 R$ r5 D/ k  q, h3 t! |        */, o# V. s  ~6 w) y% J1 K% P- w
" q5 d" \* Z2 }
       asm(" nop");
9 c0 K9 T( M+ A4 g. D2 c8 a. V+ }7 \! o" N4 ~! y
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);) v0 g3 {  z* ]- Z4 F
    }
) o, ^$ t. f, ~' [9 L5 J  O/ i, T' m. O# ?7 r0 T) s1 R
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
9 K6 M, U' x# @    //UARTprintf( "i=%d\n",i);( ?! D0 V0 d" P% p; t
    //UARTprintf( "j=%d\n",j);
1 y: y( L8 L' q$ ?, i    UARTPuts("Data mismatch in buffers.\n",-2);
' }  y( }! [- _. B    if (upp_interrupt_count == 2 && upp_error_count == 0)
% O0 B# [; z6 B/ {1 k0 ^    {: m# J& {4 T- {( z9 V4 V8 c
        for (i = 0; i<upp_frame_size; i++)+ `3 W! a7 T" K+ {9 H5 ]
        {
9 L* e; H$ \( ^; p' D6 o$ }$ w            if (upp_buffer_a != upp_buffer_b)  }  o7 I+ M- v
            {: l$ A7 S8 u) ~( ~5 s9 }( y3 U
                upp_error_count++;! X- H) {0 T! q- @+ a2 v' t
            }
* o! \3 G& Y3 R' x$ Q        }+ m' K7 j7 r3 |+ c, H
    }+ H( c; c1 P4 H  W
1 C" y' c- x4 j( F
    /* 报告通信结果*/6 @: @( t- K* u6 K+ w& o9 q
    if(upp_error_count != 0)
  H- Z" u- N" l( {; s. |( P        UARTprintf( "upp_error_count=%d\n",upp_error_count);4 M1 n; r# [" k0 f5 Q: `7 t9 m7 ]
    else! W( a0 ]" b! j5 c+ X
        UARTPuts("uPP transfers complete!\n",-2);
  d5 ~6 z+ c( M0 W
& k  N6 A$ Y& b, b+ F' `    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
1 f& w& z9 |1 X% C  B    UARTGets(ch,2);
. w! U) h. d8 M' _! H0 F9 w    UARTPuts("\n", -2);
' X# X' T& X! U- x7 L- L  W& Q2 p  Q1 S
    if(ch[0] == 'y')# d3 z" f$ Y& X5 m
    {, `4 P" x0 H. a; ^2 a+ i8 o
        /*打印全部读到的数据*/
; E0 A- ^1 y, n        for(i=0; i<upp_frame_size; )
1 V5 o+ t$ r5 _7 e        {( k& y1 C/ o% K* {' w
            for(j=0; j<5; j++)+ B2 O' `0 c# ?" E
            {9 K2 |0 b) C* V
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);/ I  E1 d  O( s8 B0 w, M5 W$ B7 J
                i++;/ k0 K2 ^# \4 H1 }  H
                //if(i >= 4096)
) ?  X* X3 z# r$ l9 {5 V0 R                //    break;/ y4 I6 e, S+ ]2 V/ A

( M9 M0 m; l! L6 u, x            }
6 B# q/ k3 Q7 L8 ^  ~& x& j            UARTPuts("\n",-2);
- [9 T8 B% u- S; l        }* {/ }0 m2 x, {' H7 p0 ]. {
    }
- Q$ W9 T* p- [& _$ e
" R" f0 R1 F+ t$ f' ]1 h+ w}
/ j3 x5 L3 n3 j* [; U

, b# ~0 l0 @1 u/ d9 D3 P9 r" T& W" p3 U% c/ N' N

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
' x8 h  c) J, ~' e- H0 ^7 m
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。% F( Q5 b3 @4 P, h





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