嵌入式开发者社区

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

作者: tulipyyf    时间: 2014-12-22 14:35
标题: upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?# X$ ~0 H# ]4 @' e% X7 S  E* g
Void UPP_TASK(Void)& |6 [/ n; Z6 `2 X+ X. b
{
* ^6 O# I9 X8 d# K
" h- C* c' S: N6 r- n9 o6 T    int i,j,k,target_int_count=2;
9 I5 g/ S  K$ i- h! o    char ch[2];
+ {) A' H  x& t  n
; {% Y5 h( Q' r! @
* x$ j! s! Q" m5 X# \$ J/ p! w: x0 b) {9 z1 g8 E2 M# R; t4 c3 S# y
    upp_interrupt_count  = 0;
" l( A# n$ d  n. p* C    upp_error_count = 0;
+ R9 N' c! N1 e. N3 n
% U3 Y4 a8 q) Q2 @    UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 B' G' [9 \) N# G3 p( ~    // Initialize data buffers$ k: i- y  _# g5 p
    for (i = 0; i < upp_frame_size; i++)% N- i. s. Y: D- `1 t& Z
    {/ n' o4 v! |! |8 }& E
       upp_buffer_b =i;& W; o6 k# S7 E2 o$ n
       upp_buffer_a = 0xDEAD;
& [. i3 X; g6 a/ B    }7 G" A" f5 I$ N( u: ?( A8 U
0 o# ~% z; A$ Q% J# Q
    //for(i=0;i<1024;i++)
/ N- L# Y- R8 B- B3 a/ B6 o7 L    //    temp=0;
/ |: s% P, t% y' `' Z% Y( h4 S: o( C$ @: o0 |8 K5 P
    //UPPReset();# L. a6 _5 x. c, p& j
    /*启动UPP DMA传输*/
6 v3 B2 t3 Q8 I" ?+ X# j' \    UARTPuts("upp_prog_dma_i\n",-2);2 S" I0 b% M3 P) }
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
. w( Z- i! O# U5 G    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);7 F8 [' ~' h$ t
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 j' x7 s& i1 P, F8 f: J' _2 g$ r" Q( ?% h- `1 H
    UARTPuts("upp_prog_dma_i\n",-2);3 ^4 r% s+ t" }6 @
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
# \' a- R7 X5 P; n9 r. [, ?+ m6 v    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- v0 h3 o3 |- j5 C    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);0 Y9 K0 V6 j4 p0 X3 b

. ]  i0 z) U7 o( Y    /*等待UPP传输完毕*/
0 H; E: J3 C+ _1 x8 T    //i=0;
) D6 W0 v) [- j" L    //j=0;/ v4 B7 }9 n  H, h9 o6 c. ^9 p
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 X9 i2 |5 X9 @. ]( i5 C( |    {+ r* ?* E6 O1 h' ?0 a
        /*  测试UPP传输的同时操作普通DDR数据! t6 ~1 v9 p- c1 v
        temp=i;/ s5 s. D% K2 U' `/ o0 D
        i++;" A' Q0 ^2 ~. k. z, A
        if(i==1024)$ q7 R% R4 u4 [) L
        {; H0 ]/ S  s) T. q% w8 d! J
            i=0;
. N& s9 H$ ~: q$ j3 i' O: `5 b5 _" d            j++;. Z7 b1 |" D2 D$ B/ Z4 \- U
        }
9 H( O9 P8 ?+ C: V; _  X1 O        */4 w0 h+ m6 P  F. a% q
+ l# B2 q5 r, K2 t4 |$ q
       asm(" nop");$ Z6 a. i! e: T7 _& \8 c* C2 E
! j) G3 S) A' b- h4 i) R! z
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
* E8 W& F9 H# I' E: n  i+ T6 e    }4 u: ?; X/ _6 A. W
: @0 u. n2 k3 z" E" e
    /*检查UPP传输的数据是否正确 (loopback modes only)*/# z0 Z' x0 k7 i# _$ Z
    //UARTprintf( "i=%d\n",i);
- X% R2 [8 @; ~7 w7 B, q; i    //UARTprintf( "j=%d\n",j);
" J# I# M! S0 X3 a# x( o9 G    UARTPuts("Data mismatch in buffers.\n",-2);5 K. z5 W+ t3 u- Z9 m
    if (upp_interrupt_count == 2 && upp_error_count == 0)
. s9 t! a2 A+ @! U5 n0 d3 g    {
, M$ }  D! v8 Z        for (i = 0; i<upp_frame_size; i++)6 S" W3 e3 c9 W3 Z: {$ [' t( H
        {
! x" T/ C3 F8 @: ?            if (upp_buffer_a != upp_buffer_b)% {- e/ t, e- ?0 A9 i0 `' S
            {
/ ?$ a% M/ l4 A5 O* q" G, n1 ?                upp_error_count++;& Q; U+ [* l  d% ^( A2 v
            }
0 B+ L7 n  {8 `$ R4 N3 p        }
/ C6 _% h6 \/ F5 v) X8 R* T    }) k3 `! b; U3 f) n; {0 X; A
! J7 q/ J+ D% Z0 ~, w* x9 u, }
    /* 报告通信结果*/
( q' b' w( r3 f+ v, h    if(upp_error_count != 0)# D  U; ~* A& P2 S9 u4 T% Y
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
: @6 C6 n. t# Q, j/ L7 B    else
+ @4 f1 L: V4 y9 z: J6 l        UARTPuts("uPP transfers complete!\n",-2);8 G' i8 u' B& s# n! R2 d
/ u5 V" N$ b5 L5 R
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
5 ~* Q1 d/ S2 w- A5 W9 g4 Z5 Q; C    UARTGets(ch,2);
$ a0 I3 \% i) O( H' z    UARTPuts("\n", -2);! q& g7 b7 a) P+ B+ a% s! f

" R; u6 [, _8 X  c    if(ch[0] == 'y')
+ \8 ~! g" o$ J1 |    {
( \, w/ q5 p5 M- D9 D        /*打印全部读到的数据*/2 x) x0 N$ T6 D; B/ |
        for(i=0; i<upp_frame_size; )  P1 E- ^7 ^( m4 r# g: u
        {
7 A7 d; w7 q- [4 B  T            for(j=0; j<5; j++)9 z( a/ H* I$ p# t
            {$ r8 T# \. v! M5 j/ K# ^) H( n7 b
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
7 N% n! X0 V6 S& K0 u  X3 _8 i                i++;/ I- Y. Q7 U1 U
                //if(i >= 4096). |9 t9 v3 u6 }) T$ D" C4 P. ^
                //    break;
! o7 ]) H& R7 F) B2 K2 ]$ d& x) h6 r% @1 \% X0 O
            }3 G4 A% A3 F3 \
            UARTPuts("\n",-2);. j9 r$ C, S6 e# F+ {
        }
& T; g3 r  J, p% P    }
. f1 h$ V- `- m5 x" f" P9 l
4 `8 A* U* `4 f  O  e* a}
4 C: [( W7 U5 p
) V$ _: i5 ]" A

  O7 I, A6 \8 v1 M
作者: tulipyyf    时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 ~8 O5 u- A) U1 w
作者: Lewis    时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。4 k  H8 x6 g! _: ^6 C





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