嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?: k7 W! J/ D2 n9 r/ T: f+ |, p
Void UPP_TASK(Void)3 Z, ?4 a, q8 B) z+ l
{" Y/ V+ E5 G' x; N6 `

6 A# z8 N0 ]/ I+ K; ~% K9 L; B    int i,j,k,target_int_count=2;+ T$ l3 y9 ^% {  m# c
    char ch[2];
  R$ F1 h' q) m2 U) x+ e1 U" b  d' i* M$ z* a* Q% n2 m8 K- E7 i% B
/ t8 |5 ]4 b+ a* ]/ N
1 M+ T* P* q! E" {
    upp_interrupt_count  = 0;; [  x% D2 R1 Y# U5 W
    upp_error_count = 0;
' h3 T) A/ `7 R) G) X% b3 l# r( H' h4 g
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
. [4 `8 B, V5 w8 j. Z7 p/ v, L) C1 K    // Initialize data buffers
! \" G7 i1 A3 S5 z3 }9 T9 A$ G4 f' Z& Y    for (i = 0; i < upp_frame_size; i++)
3 V* _) t& L: U  w5 ?( p    {
- k9 W( s, C1 F( V0 g$ G       upp_buffer_b =i;
( j& t- w/ E4 C4 q0 B' c       upp_buffer_a = 0xDEAD;0 g  Y6 r$ Z3 r7 y; e4 u4 T
    }
4 f" O: l" p5 x) T& D9 Q( r7 p" u, `( L
    //for(i=0;i<1024;i++)! \' D' ~6 c3 K8 L* w4 d( x: a
    //    temp=0;
7 c$ i6 K# F- T" d0 i  _7 P% u
+ V, B2 T& S: i' q4 w5 D0 D    //UPPReset();' X2 W# P8 [* \, [% N/ W
    /*启动UPP DMA传输*/
# w5 E# f$ N. h% M4 K0 R  [) l    UARTPuts("upp_prog_dma_i\n",-2);
0 ?7 Z3 F+ c9 E5 R, H# K& L7 t    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;7 Q$ {- n. d, Q! }( @
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);, P9 t7 j  c/ E: K: ^8 [, l
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: o+ r; ^4 R# @9 L0 D
; K5 }, E0 w0 }9 y) I    UARTPuts("upp_prog_dma_i\n",-2);
) g! A1 I- i& F0 o    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;: q$ x+ ^2 D8 e5 n) i7 f+ J! n$ ~. N
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);+ S) P7 L2 M+ J9 Z
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);. }. a+ K0 E: |: c' k. Q

$ N$ \* Q# j  V. L' \' v    /*等待UPP传输完毕*/# Q) E2 s5 w. _
    //i=0;
# z7 p( E, x, i& t$ {    //j=0;4 O3 h( v, Z  n. B
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)" l( H/ y, z. r( p$ i5 S. J
    {( `1 C# A! e! @2 N% E0 d- j. _  F2 C2 e
        /*  测试UPP传输的同时操作普通DDR数据
$ N* I& u4 L2 p; Q" Z        temp=i;5 B8 B' N. e+ V4 i% R
        i++;6 C  k2 m0 t/ w" b2 Y" e4 @8 Z
        if(i==1024)0 z' `4 E  O; x5 o/ y
        {
7 b( f5 S  X2 ?6 ~            i=0;
8 @" b2 c1 }7 ]7 r5 Z            j++;
; Q0 T; s) z9 b0 p$ u8 d; U        }
: }5 T# P" A0 Q        */
; d9 ~3 z# l# I' T9 \
" d7 \3 E+ g2 Y7 c7 L1 D- I0 O" h       asm(" nop");# N. o' ]0 t& F( A$ [8 r4 n: p2 m

, D. k% O, ^$ d       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);3 v/ I3 S2 a  C! g
    }  C! [3 Q3 K8 D/ c. }% N) H1 p
: N% C) O$ U" r0 P, I. [
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
' r0 n! X. W- r8 d# K    //UARTprintf( "i=%d\n",i);
4 i2 ~5 k% D7 ^    //UARTprintf( "j=%d\n",j);
5 w  Z! b7 @& M/ f1 D    UARTPuts("Data mismatch in buffers.\n",-2);
5 B7 f' i; t4 _; J  o- f* j    if (upp_interrupt_count == 2 && upp_error_count == 0)
3 L$ N7 r7 C! N5 W$ o2 o    {) Y: W5 ~9 q( a* r2 `
        for (i = 0; i<upp_frame_size; i++)2 o# p' v; ~" ^, y' ^
        {
7 N6 v* j& Y. `1 i; ^5 R5 M, m8 z            if (upp_buffer_a != upp_buffer_b)" v6 q3 _! `1 k4 C: V9 T8 q7 J. F
            {
: I  ]7 C6 l( y0 D* O. p. l5 J                upp_error_count++;; q' B* ^/ J/ _# J1 }
            }
9 c7 d9 b2 s; {5 T1 p        }/ q- A$ ]% K' X& z7 t3 A2 o
    }
0 w, I% ?5 y( Z: F( F+ d1 X
7 t3 ?3 p7 F/ s" @$ h: F    /* 报告通信结果*/
" b3 ]" h6 Q/ [+ U    if(upp_error_count != 0)
# h% b8 K3 S1 w7 ?        UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 z, V/ a+ f8 X, a. D- y    else
1 v/ ^1 L2 n; e+ }5 M* C        UARTPuts("uPP transfers complete!\n",-2);
' S+ |  X' g1 ^
2 \9 d5 X6 D, F$ C    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
0 r8 ^) {: W% T, {    UARTGets(ch,2);5 Q3 w( H, A9 A6 E
    UARTPuts("\n", -2);
& f% u. B3 H: H" J- p# m; k
8 u/ k* H3 S/ \1 \/ E' |    if(ch[0] == 'y')
" N9 A6 V6 b% S' E    {0 U$ [2 C7 L$ Z2 _; _4 `7 `; @
        /*打印全部读到的数据*/
5 E% B6 W& N. U3 r9 R) |* t        for(i=0; i<upp_frame_size; )* d- m% q' d4 m# E* C) t; O5 t
        {8 s. c# v! P6 x# F
            for(j=0; j<5; j++)' F! P9 H  E7 J2 M3 s
            {# Z& D0 b+ p; w3 ^. }) M" n
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
3 H; @0 @$ A8 l: w9 A0 W) I                i++;5 N3 c0 y3 _7 j! D) c) B' d
                //if(i >= 4096)) A; H) a& i$ C, D. ^
                //    break;
6 I, Q" {# \, ~8 c' J
1 y8 N9 w* w# D            }. D) P" m; K9 u  C! R; g# f  G
            UARTPuts("\n",-2);1 E2 \8 X  q6 d. u" `# {, f8 s
        }
- d/ R+ A7 ]0 ~7 E3 o  b- j! l& E9 G    }
  [$ F$ T6 X( ?8 o% Z0 z. @
5 A5 T3 F8 o% T6 E' e}
+ W# O$ h% i1 a3 x2 \2 y1 H8 a

/ W8 L  P$ i. b! x% X% Z7 {
" A1 E* {/ {/ E, \0 c& p- }5 Q  F
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。, J# v% g1 s8 f6 c2 t

作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。/ L: H7 B7 K5 O6 d. S" D# b4 ]2 y6 v





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