嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?+ ^+ Q8 g% a3 J( z$ [
Void UPP_TASK(Void)
3 P7 m  q" d8 V{
2 I' f  ?" p- a# K
5 l+ q" R& t6 z. ~4 I0 R0 u5 N    int i,j,k,target_int_count=2;$ M- b: Y7 J- s2 |& x  p
    char ch[2];
) R2 P" V+ J( Q1 r# k2 C5 k$ l7 q: H5 E' X7 o6 N

6 W7 W7 ^; {8 [
& U; H. u1 t; C8 d$ C5 B& o    upp_interrupt_count  = 0;* S- J$ G4 S3 Q% y# A
    upp_error_count = 0;
' F& d5 q& m3 |# B. e/ H
, M# R! c4 n4 q8 e. f% |    UARTPuts("\tResetting uPP buffers...\r\n",-2);
* m* b  u) _3 Y" E% V9 h# _    // Initialize data buffers
" ?6 l4 g* M. Y7 \    for (i = 0; i < upp_frame_size; i++)
1 Q9 r0 t: D! O6 ~( z  Y# W    {
: |/ G8 N' I0 {1 w4 A+ e8 w+ F       upp_buffer_b =i;0 f' s# i- ^3 c( H  m- `4 }
       upp_buffer_a = 0xDEAD;, ?: b. P9 W4 J( y( v) h
    }+ u8 p, \9 a: H

9 o4 H- M! _. }1 m- w    //for(i=0;i<1024;i++), g/ Z& _( t2 g0 e2 Q+ _
    //    temp=0;* ]% O/ \" c, j6 _# a

' U9 D! e% C4 T3 a$ u9 P    //UPPReset();
1 ~  l; |' K/ n0 ~    /*启动UPP DMA传输*/& n; M3 `+ j7 o% z, p
    UARTPuts("upp_prog_dma_i\n",-2);
9 i; v: E/ k5 H- e# ?- p& z) `    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;. O: V7 }/ T# J% E" Y' c$ e
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 L/ i1 @" \' t    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);' t' v* f, f( w! \" j  p' D
* f. p2 P# d4 Z  `9 X1 j7 n+ e; Q7 K
    UARTPuts("upp_prog_dma_i\n",-2);7 _1 B' C0 ~$ f1 Y9 `9 ?/ W
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( ]2 e" d! f; s( F    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 v+ ^  q4 m* u    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: W& n2 b4 N- w, Z2 F! L9 J8 H0 B! Y8 |# U' Z
    /*等待UPP传输完毕*/
+ M( _- c& ]: ~+ u: H    //i=0;7 ]" R+ ~) E& x& r% f
    //j=0;- N  U$ N! g% Z/ n
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 K2 X, ~8 q) e- B0 s3 E    {
, L% B$ v! b* P! m        /*  测试UPP传输的同时操作普通DDR数据
& f# e5 [6 ~, e/ n+ U6 w        temp=i;6 f  T4 o& [/ _
        i++;$ G6 t7 D% K. Y* b
        if(i==1024)% e8 u/ r: _% y2 j
        {
' ^9 f; |- ?3 b4 k1 E            i=0;& b# d% x- M) g
            j++;
- D- }7 @/ o+ w" C        }
/ J0 I9 u" u1 L        */( W: r9 A* Q; x, B1 v' E

. e/ J6 s" o4 k0 O2 l& @       asm(" nop");
/ g3 ~% X# b# `" n5 J1 Z/ I: Z! `: s5 M5 F; ?% Q
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);; @* [" r3 `- G- p  P1 P
    }, M$ W1 }  F$ n; o3 b/ c

+ B8 N' F4 ]6 O7 A" H    /*检查UPP传输的数据是否正确 (loopback modes only)*/
- U5 D' n) E4 p$ r    //UARTprintf( "i=%d\n",i);8 n, L4 J5 o3 \; j% m" m
    //UARTprintf( "j=%d\n",j);
- }6 c- b% Q* D. S- w# d' a8 o    UARTPuts("Data mismatch in buffers.\n",-2);
4 ?0 {+ X; x6 {# N    if (upp_interrupt_count == 2 && upp_error_count == 0)* S, b# s1 Z/ M% }
    {
) ^: ]3 X1 D  M; q+ f' O        for (i = 0; i<upp_frame_size; i++)
& k: Q* |1 a, F# R9 ^4 q* R        {8 u  m+ V! E# g8 }) u
            if (upp_buffer_a != upp_buffer_b)
5 M, |2 p, G$ c            {$ @5 S6 E& x' s( ?/ ^( v1 C
                upp_error_count++;# [9 `" e8 Z2 B
            }
+ \# C: R1 _6 T0 D0 @& T+ Z) {  _        }( b; y. M9 c# l, m% W
    }
7 R( S5 p2 _2 s* }1 Y* k( t4 l  _9 ?- ^1 w6 f/ n- J" p3 H
    /* 报告通信结果*/
' R- O; J' g1 s* O    if(upp_error_count != 0)
! P& O) `* m, v+ a4 P' {# E        UARTprintf( "upp_error_count=%d\n",upp_error_count);4 e5 F5 E/ f6 f7 w! [7 J
    else+ v( }9 x2 d  i/ |) n
        UARTPuts("uPP transfers complete!\n",-2);% P0 ~3 L- ?0 Y, Z6 B+ z. A
: F+ t8 A" b4 B; }
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);7 ]& g: Q( B* e0 X' w4 }
    UARTGets(ch,2);
$ T2 V( h2 n/ M% \4 s* L9 l    UARTPuts("\n", -2);: G7 {4 k- u% R
" K% s3 z/ ]1 A) L6 E
    if(ch[0] == 'y')
4 @& @+ b, S6 C9 [    {7 U5 u1 S! K; G% m0 m
        /*打印全部读到的数据*/' |! p7 {5 }( i( K) ^* C, t6 S
        for(i=0; i<upp_frame_size; )5 L% G$ J$ b- H) k& B2 d6 n2 e  N4 [
        {
' E0 W1 S) m/ {! e            for(j=0; j<5; j++)! c3 J4 {$ E" k, b
            {
/ p# B! m# v2 Q/ |6 \                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);- K% c( `9 A/ i
                i++;3 O* M! E( u3 M2 j* [
                //if(i >= 4096)3 y: x$ W) P  A, a7 V
                //    break;5 E* ?( _# A# Y' I" E" H* |/ Z
& i* g- F# y3 |" a. @
            }
+ X. g2 p" W1 F+ ?7 \            UARTPuts("\n",-2);6 z% Z) @/ \- X! s
        }
% M: `7 N, J) k2 A$ T    }
' }; `/ V: R% c2 }! ~2 S
- E& i8 }+ ^4 E) P' v. i. M' e1 l}
( D6 j% y: N6 O
) C* w" |, w, u* h8 ~: L

9 \+ e! s) \1 }
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( F" }3 \: o( A0 G4 b: ?6 ^" _4 L( X
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。( f0 a' R: o3 [  W





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