嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 t) s8 o8 l$ N# b# L' j
Void UPP_TASK(Void)
+ Y5 j' K4 [: ?+ a$ h$ X" D  [! Z2 N! e{
6 g# p" m5 U6 Q9 m! Q: ?' @9 @' j, Y: [
    int i,j,k,target_int_count=2;  d6 N; h+ L. [2 q- H1 ~0 s
    char ch[2];
" u- {3 s# H. _6 r) z
( M5 U: M8 y' V' z- c4 Q1 q( t: x- g

/ o; n8 b5 _& I8 D8 {# _    upp_interrupt_count  = 0;) H1 [; v2 k6 b( W
    upp_error_count = 0;% x* D# V7 t0 j

3 b! Y1 i: J6 x% H- E+ Z. N, c    UARTPuts("\tResetting uPP buffers...\r\n",-2);7 v9 |# C; P8 y5 N. c* _
    // Initialize data buffers
! Q; R  x; ~% }9 H; ~    for (i = 0; i < upp_frame_size; i++)
* @7 K% y8 P" N2 B# E/ v& W7 {    {# g& T* J$ n- W9 h
       upp_buffer_b =i;; @2 Z# \* a- a# d+ p% h; }
       upp_buffer_a = 0xDEAD;+ G0 K2 U$ Z2 H0 p
    }5 O- ^' n, X, A2 S  k% s

- l; g! W( q2 P/ ?    //for(i=0;i<1024;i++)/ M' |# f# v2 U6 j* {
    //    temp=0;: N/ n7 y! I5 K; m
) a; \8 f! f  W* R) u7 y
    //UPPReset();% E5 i2 }5 ?' f. f( Q: \# Z
    /*启动UPP DMA传输*/, t6 Q; x5 H8 g1 u# U
    UARTPuts("upp_prog_dma_i\n",-2);. n3 C0 M" x1 @6 U
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;5 o6 H- z1 m9 f
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);  `8 p  m2 }3 [' F' w
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
2 P2 {9 d: P! R( ?) o
# P+ r2 P" x5 M) W    UARTPuts("upp_prog_dma_i\n",-2);
% X; X5 P( j' |/ ]) W/ ]2 {    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; v5 B% P. L8 z  ^. w2 u9 p! D    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! y6 x( Y3 \1 x2 |, d    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* F% n* w7 Z8 P; h% V9 x( q" x: ]' n4 Y1 E+ {( U& p
    /*等待UPP传输完毕*/
, F+ ^6 \' C5 W8 X    //i=0;# m  G! N0 M; Z2 R  k4 N, V& U
    //j=0;  t$ f: Q& i! y
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% z' F( q0 ?/ `+ P0 G( Q3 D    {) W+ ?6 a/ M" N' ?
        /*  测试UPP传输的同时操作普通DDR数据9 V4 Z: I. i5 q1 A# _/ l
        temp=i;
$ r/ q4 _, N9 ?/ v% k        i++;7 r4 D' G! q1 @/ l3 {+ ~9 k
        if(i==1024)5 S( H4 K& [1 W
        {2 l# @  S4 G3 u! Z5 @# v# M. a. t
            i=0;
& T5 J1 ~; p+ r0 \( ?) [* U5 ^3 G            j++;
+ @% l/ F& @$ Q* U+ E0 v        }7 H, n/ i) a/ V7 z5 a
        */
5 p9 F7 F8 }9 O- D. n# d7 Q# f* B9 d8 e
       asm(" nop");
2 J) Q# v5 m( r$ B
- z1 A. y9 Q$ Y( f2 Q6 _       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! a% }9 ^8 I$ `. X# e    }
& N' w  L6 \! u) o& t, n* [, P9 h- a) T9 n
    /*检查UPP传输的数据是否正确 (loopback modes only)*/5 J- t5 f# ~6 V/ V. \+ s( u
    //UARTprintf( "i=%d\n",i);
3 h( \' v- @$ n5 g    //UARTprintf( "j=%d\n",j);
" F; Y. C$ _' v" E4 G% L2 }    UARTPuts("Data mismatch in buffers.\n",-2);. l4 t3 x3 ^3 U6 @" e4 ~
    if (upp_interrupt_count == 2 && upp_error_count == 0)
1 W) |& Q* u; ^3 H    {1 I. u+ L, v6 `7 \
        for (i = 0; i<upp_frame_size; i++)" O6 ~9 X0 v2 P4 P& d
        {; d- F  u% w- x1 q8 A3 K
            if (upp_buffer_a != upp_buffer_b)
# g. p# B4 }1 p4 Y3 N* J            {
  e" g. P5 A% x) _! g* c                upp_error_count++;
% A! C  I* v* c% R& d* `$ P            }* x" M8 R" ^# t" a2 n" q) \
        }
8 b2 I) m* s, k9 d    }2 Q7 W6 x# t+ c$ y5 |8 n1 M! O0 C

2 s+ j, ?) v' g2 {0 F9 m    /* 报告通信结果*/0 w6 K# _. n9 Y+ n
    if(upp_error_count != 0)
! C* e; x6 `8 B        UARTprintf( "upp_error_count=%d\n",upp_error_count);
( l, i8 \% N& f$ @    else
) Y. r4 m3 w1 `5 y8 y        UARTPuts("uPP transfers complete!\n",-2);
% [. l+ o: A( @/ a
/ H3 R% l: `% ]8 n    UARTPuts("Do you want to print all the data?(y/n)   ",-2);2 f. O- ^$ I- v# E% |4 j
    UARTGets(ch,2);2 j: T4 w/ @  W5 P( Z
    UARTPuts("\n", -2);
1 b- {4 i) H7 G4 Q0 P
! K2 i9 w1 q5 R( i; T6 ~    if(ch[0] == 'y')
0 }% Z- x! O. p2 c    {
& a3 Y' p% Z- P* z( m3 t        /*打印全部读到的数据*/
* N5 T( p8 @. c2 D* q& H        for(i=0; i<upp_frame_size; )( Y: r) X2 w0 x8 d6 h3 h* z
        {
! o7 r4 {" [8 W/ H) d; X5 |" n            for(j=0; j<5; j++)
8 s+ \1 ^2 _2 c# C4 S' w4 c: N( j            {
! V; G! j% N8 N" l( ?, ]: e0 e                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);+ t/ f* k" h8 c: R1 ?
                i++;) Z" f3 {6 c& {  o
                //if(i >= 4096)( ]; l$ P! d: d
                //    break;1 A* S( U& s+ j( v5 v
( U+ o/ }! g$ \2 s
            }
. Z7 v3 `# O% E* E/ v9 p            UARTPuts("\n",-2);
) c7 u) c9 p8 t2 M: x        }
$ P8 U& F0 d8 B; B    }$ s" J  X6 M3 X

9 ~. e# s) I" f; ?/ _6 {% x}

" Z8 T' d/ f  p! s

9 r5 K0 e8 H' u& C" v/ h+ N% J3 i! e1 u3 w  b+ B# s

作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。" [6 n" }) @  B( P

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 z  e/ T1 I3 o9 a$ @




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