嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?8 L8 X' l4 B- U$ i' {* d8 g8 q9 [1 V
Void UPP_TASK(Void)  t7 F5 W1 u0 t( d
{
1 S, t2 i: P5 K6 e% D( G
+ c/ f; @! K$ v( N# g& }0 n    int i,j,k,target_int_count=2;
  C; S; B; X+ r& N0 ^7 `    char ch[2];
! H$ r; ]( R  A& o) \& H( ?1 z8 Q
; j/ f; {$ Z0 @" ^" s) r  b- ~' r6 ]" W, C

9 V0 E8 {8 X  }' o' c; N    upp_interrupt_count  = 0;
& I! ^9 x/ L& z8 ^; `+ y# p6 L    upp_error_count = 0;
. n, V- J2 i+ r- [; ]
0 m, C2 `. v* d. f3 [6 S    UARTPuts("\tResetting uPP buffers...\r\n",-2);. L) s& w  I/ \* z) Y: ?. U
    // Initialize data buffers
' b  K2 `3 T; d9 x& g    for (i = 0; i < upp_frame_size; i++)" O& T: k- H- e4 l# J# Q
    {. b; K" p6 U/ v4 i# i' S
       upp_buffer_b =i;2 b& j2 f8 _- i
       upp_buffer_a = 0xDEAD;
* I  Y) ^$ z  K2 Z! ~  q0 k2 T    }
7 R4 ?' ]! W4 C4 j6 ]2 z9 [- a5 r4 D
    //for(i=0;i<1024;i++)/ E+ P; C( w0 |# Y. k  P- \
    //    temp=0;4 ^! ]- Q; l6 z9 M4 P, u  `+ J
) e% B  L& ~. ~$ }
    //UPPReset();! m% `3 ~' K  `
    /*启动UPP DMA传输*/
# P9 l3 H7 o, A7 @    UARTPuts("upp_prog_dma_i\n",-2);
1 E2 q3 M$ Y0 P! E- d/ A; Y! x6 O    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' h% L) y/ [  t' G% j. Y  L% |    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ U7 Z& R, R3 ~6 C  R" c- {    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
2 {: Q2 z, x0 x" O: Y# M
1 c( h, H# |6 c; }6 n) o    UARTPuts("upp_prog_dma_i\n",-2);( n0 y3 y- p! t6 Z; J
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ b+ [( v; z5 R; [0 Y    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. s! O0 F  D/ W* c+ C7 ?    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 Z) Z9 N. W9 H; K* K+ ^% F" Q) t5 }
# }- f- J1 f2 Q# v! x    /*等待UPP传输完毕*/8 i5 y. ^& c% {0 i- R  g" h
    //i=0;8 A! G) L" d4 [( `5 a% B  K
    //j=0;
( A0 A" L8 ]. m/ s8 R    while (upp_interrupt_count < target_int_count && upp_error_count == 0)8 {* j- @" |$ o! S- w- `
    {
7 K7 t9 ?& p  w* g9 H9 _        /*  测试UPP传输的同时操作普通DDR数据
+ k5 ~1 r2 {' A6 Y" H9 I! J, L+ W/ K        temp=i;
# G* R" d. a, W( Y1 Z; ?% Q* l        i++;
9 B1 @; y% x) Q/ g$ W# Z) a# \        if(i==1024)- x2 q' q& z: D7 a8 P4 U4 |
        {: j" {* j& O% g) I
            i=0;( c# t5 I* w7 N! \* c$ Z  B: u+ l
            j++;3 I% k% ^  W6 n# @9 b
        }) O6 K# ]  ~8 C
        */( x. F$ O4 N( j6 w
& ~. Y) _1 K* z' ~6 Q5 d* p
       asm(" nop");
* D" r& G# q1 t7 k3 x) u/ \% G
, J# F" R4 J) L( I       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) ]% L% Q. x" \7 ]' L6 B; x    }' }2 G7 f6 a1 w) P  T

8 A/ e0 h. F2 c" v3 ?1 T( c    /*检查UPP传输的数据是否正确 (loopback modes only)*/
1 x" R. d8 y, R2 {' y, j    //UARTprintf( "i=%d\n",i);9 S$ G8 U! B( P. ?5 T* h
    //UARTprintf( "j=%d\n",j);
: m4 ]  f8 j3 X. f; f! I1 L( V    UARTPuts("Data mismatch in buffers.\n",-2);5 f" Y! a' v5 O8 j
    if (upp_interrupt_count == 2 && upp_error_count == 0)
! m9 G* R: i  }# o6 x4 a% I9 ^$ `, w    {
5 m8 \( Y  J" |& s8 Q" [        for (i = 0; i<upp_frame_size; i++)
, H- Z% n+ `; Q6 k5 {- H1 x$ V5 {, d4 W        {1 c- Y3 O# U0 u5 u3 u
            if (upp_buffer_a != upp_buffer_b)9 Y; j3 v6 m6 u' s
            {
* D# G+ M4 j4 {' E& u) [                upp_error_count++;
( Y1 V* k3 ?4 [7 X: j! F, s/ K( l            }
1 {  J  R# p" P4 `- K7 O. i; Y        }* ?3 x0 T% Q& {5 \. l2 M* _
    }" E  V& l- Z9 R* }6 W

! \- e- V/ j( h' |9 p+ d    /* 报告通信结果*/
( R/ B1 g% y' B! T7 E. }    if(upp_error_count != 0)
3 A3 U5 m2 R3 m9 Z3 I        UARTprintf( "upp_error_count=%d\n",upp_error_count);: y  O# o5 Y% W) }. n+ M2 S
    else6 l8 P; v$ O& z- x# Q* K
        UARTPuts("uPP transfers complete!\n",-2);5 t, I- Q' R- Z2 I3 ?- A) f2 z; {6 G

7 U; V  N2 w6 O" h! y    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
0 X9 z1 b9 j* p6 x/ R4 B1 y7 K, ^0 E    UARTGets(ch,2);& Q- ~( v/ J' [1 M3 i, Q5 R
    UARTPuts("\n", -2);& ~# C( @3 }+ x/ ~/ @" _

9 X4 S( U& Z6 k; ?; T: @) z    if(ch[0] == 'y')! ?! J( n! ~  b
    {& D7 X, m& D3 b, o& n9 j
        /*打印全部读到的数据*/
3 K; U# _7 f& k" D6 m6 c        for(i=0; i<upp_frame_size; )- z6 ]$ B" M9 i8 J: w
        {
* ^* S4 F* M; v" L4 o            for(j=0; j<5; j++)1 S! z$ g# ^5 I4 p
            {
* w1 f5 i/ R6 ?+ M9 E. y) O! T  j1 Y                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);9 z: p; L4 ^  V$ H* K
                i++;
" y" i' [( h0 r7 |; x. c, g                //if(i >= 4096)4 K1 @% ~8 u! p+ F" b  d5 E' {
                //    break;
* L& U6 b0 i6 r  I  c; `$ Q" D: |/ [1 E! L; K; |) B. G
            }
( C% ]. `9 {% Y2 ?4 Z! r; x            UARTPuts("\n",-2);
, ^5 Y3 t4 \- O/ A* z0 D        }8 K. I* p3 Y- i6 {% @" v
    }" U' l7 A9 @/ X. {* [
" {, a. W7 M6 u7 L( n/ J
}

+ q; w4 z1 s! {* R6 m  r* C) |

5 z8 A- o1 u3 m0 ?# @
% m% N$ Q1 q% U  `: Y; k
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。4 R* n' D# K9 P4 I

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
# {0 N! ^8 ~! A  m& f; J




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