嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 @+ e3 I5 ]. }5 C6 {
Void UPP_TASK(Void)- s  W+ ?. a) q8 Z1 U2 W1 w7 Y
{' U. F. L4 x- d

1 l5 Q1 N5 R9 [+ o+ v    int i,j,k,target_int_count=2;! [" |% R. U- D0 ]4 A7 d
    char ch[2];
5 X! c" A/ K1 }! V  |; V& t& {
$ p6 R: A6 i2 n- ~# ~  D7 F- m6 w# ^9 E% j4 S9 h
, }1 G: O" l+ Y; ~/ Q
    upp_interrupt_count  = 0;
; B( t+ j# e4 r* S    upp_error_count = 0;; k  K6 M. u( h& f0 R

- k' Z; I8 k, G" F9 j! Q& ]$ E! \    UARTPuts("\tResetting uPP buffers...\r\n",-2);6 Z  s* n: F: D! q( u
    // Initialize data buffers2 |( r3 m$ C: @3 K/ K
    for (i = 0; i < upp_frame_size; i++)
- L; \& A8 r1 D8 S# V$ C2 m6 C+ s    {
# i, D+ c& J$ H7 [! |/ S* f       upp_buffer_b =i;, @# M1 H* R( \+ l: m
       upp_buffer_a = 0xDEAD;
3 O5 n8 Z+ D2 [. m2 c$ l! X    }
; ~. h6 g- k/ {# x( z7 M% o
" b% h) O% q2 f1 s    //for(i=0;i<1024;i++)
$ s$ ?3 V3 g" n  r    //    temp=0;6 v; a6 ?1 ^  c9 Q# n8 ]) O
% G5 _+ t/ Y1 h* u$ p3 W
    //UPPReset();
& ^/ j- t1 q* J* i( p4 b, _    /*启动UPP DMA传输*/
% M$ p8 ^, ?2 e5 b# W    UARTPuts("upp_prog_dma_i\n",-2);
0 k9 K. S; `' \    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 P4 a' w: m" `3 p- q5 I$ q: y    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& C0 p5 I& i7 X3 d/ Q    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);5 l5 m8 {/ \" G

2 [2 n* ~% P& M3 m' x    UARTPuts("upp_prog_dma_i\n",-2);
/ _, _; u( o( r* k7 C    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;5 q% v  f: y* `+ G
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# z( N+ A; q$ b: U    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
  F! s! H# @( }! H. v3 C
5 o) `/ I" N3 L# E    /*等待UPP传输完毕*/6 B4 T5 W- {" Z) D6 J8 R- ^
    //i=0;( V6 E, S5 a3 \3 F" N
    //j=0;
. S. l/ L% G5 O# |& r$ X    while (upp_interrupt_count < target_int_count && upp_error_count == 0)- L3 |$ t1 Q# O7 n
    {6 n5 f0 e$ u" l9 I1 J1 D% ]9 v
        /*  测试UPP传输的同时操作普通DDR数据
& i1 R2 Z4 e) q+ ]! f" D1 o        temp=i;
# \8 [% N' R, w& T        i++;
! `1 l0 S% r* m        if(i==1024)
& S4 p9 u5 w1 R: ^& G5 n1 g  i# Y        {7 }: l% p. z2 R  }
            i=0;3 O1 k4 S7 M5 i' ^) v# v
            j++;" \1 l7 l- ~( `9 r2 x0 n* Q: ?
        }" K! _! L0 z2 Y; c, a3 Z
        */
& X/ _$ Q! h  A0 J  o5 @" d" O; N6 H- \7 u
       asm(" nop");
/ o: k( Z2 \$ G$ d6 m
- K' x; d! D# X( o6 T, P2 {  D       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);+ Y; x# m. M* q; ?0 b
    }1 ~8 s  B# C) u

2 a7 F8 B# @1 ]# k: D3 _    /*检查UPP传输的数据是否正确 (loopback modes only)*/
- E' n9 |) C1 o! j  c    //UARTprintf( "i=%d\n",i);
* O/ a5 L1 L" Y- R& N: ?- D+ S    //UARTprintf( "j=%d\n",j);& p% E4 a- j8 {3 w, {
    UARTPuts("Data mismatch in buffers.\n",-2);4 A; J, j' x% H1 M0 V
    if (upp_interrupt_count == 2 && upp_error_count == 0)4 }: k/ n' L8 D2 Y8 ]) I3 h
    {/ _) `5 |2 f. q& s: O2 W5 v
        for (i = 0; i<upp_frame_size; i++), q6 L( Y! |$ M
        {
8 N" B; z2 D+ I9 W" y/ I, u            if (upp_buffer_a != upp_buffer_b)! X# {  _2 ~+ x# |5 y# s: N& A1 t
            {
/ T# d- O6 j" W. d& B) v/ [                upp_error_count++;; [- `/ w9 [$ E' |: B' |, a/ f0 f
            }: W: y0 E) F  O6 C* N9 Q
        }- \4 P& T4 R6 I! U& {2 d
    }
- |" G& V) U& ^- |7 G. X9 r
0 T* N" C' B$ U    /* 报告通信结果*/4 x0 H0 `8 s- E3 D
    if(upp_error_count != 0)
2 c7 a) V5 D+ W" S: j        UARTprintf( "upp_error_count=%d\n",upp_error_count);
2 h" i' \" M- k; f    else
1 K) c- ]  n) Z1 s  |, D1 N- V        UARTPuts("uPP transfers complete!\n",-2);
% n) t  L- A/ N# I$ v8 O) c4 z6 }+ ^5 `/ P3 w
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);3 r2 M) ~/ e+ ~% m+ s  O
    UARTGets(ch,2);
  w6 @2 P  ^& T& U, q    UARTPuts("\n", -2);
% M6 a# p% L' `& Z) J2 [% A0 m0 h. w" S1 I
    if(ch[0] == 'y')
% w2 [! C' Z3 x4 I6 D    {
# A6 G% T) L7 n+ Z5 H& ^; X        /*打印全部读到的数据*/
- S6 ]; J' s; y8 I) L% Y8 }! U2 E        for(i=0; i<upp_frame_size; )7 w- F& g; b, G8 @
        {
1 t) g% z. r0 L6 [& D            for(j=0; j<5; j++)3 c3 a+ Y9 y1 c- G
            {% W6 h3 A" L, m- Q
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);0 h9 l' r. _. u: v, A! f5 G4 k
                i++;
; k" o( L6 t6 `  L                //if(i >= 4096)2 Q" d4 r) c! g6 r4 i  h
                //    break;
! s# V. C+ x9 O/ D. x; o0 G) |9 x6 w1 y  G
            }
9 k; L/ B4 }5 j2 [4 j            UARTPuts("\n",-2);
, s6 O1 [$ i7 C, Y        }& P# E. x6 w% s$ n9 Y/ @7 N8 v
    }
1 t- R% n+ J# G' \* B) j
- S5 B3 n1 o0 D; J9 J4 i4 f}

% b4 a0 H6 U" a: A, O! u
9 ?7 f& N  n' r- R

" c* a, ^7 E/ K' Q4 W; ]* g
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。* n4 |2 U* p2 G' q0 Q

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" s2 E# V4 x: {




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