嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
* L1 _" z3 ?4 t) }7 J- H
Void UPP_TASK(Void)
4 [4 A; R; E( z7 Y* V$ u
{
4 O) b& [- h+ \$ i$ T- b
9 @. N; D7 Z$ {- A
int i,j,k,target_int_count=2;
0 t* b1 I; R: J) R- o: H
char ch[2];
- `. ?8 { x& L& I3 I6 ?9 h
+ r4 {5 G8 P+ y ?1 ]8 u; I9 r
8 f j2 x" ? s7 s0 I8 w$ b
- h, c% o) s9 ^; J
upp_interrupt_count = 0;
- ^4 L+ |( U5 \5 ^# Z* O) G8 j
upp_error_count = 0;
3 F2 C+ }/ t2 t( T! ` E( u5 L
: O: F7 u0 M& A8 C. n' E0 k& o
UARTPuts("\tResetting uPP buffers...\r\n",-2);
* `, R1 D! O7 X7 G
// Initialize data buffers
2 V. M. c6 J- R# H
for (i = 0; i < upp_frame_size; i++)
+ M/ b2 v& K7 m* T3 ~" M0 K! ]
{
$ j. J- G' @8 |. t h' p, T7 k
upp_buffer_b
=i;
! M B0 t9 C# r
upp_buffer_a
= 0xDEAD;
1 z2 x( E. v ^- }. K
}
5 F+ B$ e. z, x) z6 x6 }
# K' Z8 B. s& t& \$ f
//for(i=0;i<1024;i++)
: D- G7 \( F9 `+ K
// temp
=0;
4 O. E, ?# r( G x; \1 C1 F
4 }) m- `" e5 w0 J+ Z6 s4 E7 o4 z
//UPPReset();
& J# U' e; k& U
/*启动UPP DMA传输*/
: u1 Q" r- e8 Z! U2 u6 h6 l0 d
UARTPuts("upp_prog_dma_i\n",-2);
$ ^# L' D8 ?% s4 a* R: f, `
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
! B7 a( A+ Z5 q% l/ R
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 y# A0 H; K7 w+ J0 c4 `
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% J2 p+ Q0 i8 i5 }
2 z$ p ]0 W# O6 `) z+ v
UARTPuts("upp_prog_dma_i\n",-2);
7 o) q2 H3 k* C6 |( K
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 {+ F# T* o& `" h
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 N( c u+ c! Y* w. r' E
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 j% [! |9 S- |8 }5 j2 Z
8 s% v0 a" R2 y) Q j
/*等待UPP传输完毕*/
" d3 _# y+ u' z# k' H' D T
//i=0;
6 {; L4 T! {0 T9 }8 J1 z
//j=0;
& w# Y3 E" V8 l! G0 q1 V1 E% Z; h
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
0 R: U1 e3 R/ B
{
- m. S1 v5 G+ i
/* 测试UPP传输的同时操作普通DDR数据
: W% r9 G% X$ f9 H7 @
temp
=i;
G% w- j8 B; G; [% L& r
i++;
8 U$ {7 B) ^. G8 m$ P! f2 k
if(i==1024)
2 l) z$ e# B6 V) J, e
{
W3 W) C( _9 w% n
i=0;
8 D, p% v# H( u' I9 d
j++;
8 Z$ P( U% `2 X
}
' z& t7 V5 Q @! N- t- D
*/
; \4 ?( L x( Y0 k% u' e
& o3 j: D9 `8 y/ Z: c( R( q8 i4 W
asm(" nop");
) ]2 r/ f# C4 X/ M2 j9 x
; J1 R9 f' q" \3 g5 t, Q) K
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 |/ Y. ?+ D' w; _. I9 |2 F
}
' @+ `4 [0 N. t; ]6 I5 x
& }4 p+ c( p! }7 Q
/*检查UPP传输的数据是否正确 (loopback modes only)*/
$ E2 [9 Z4 W; {4 [: ?2 ?6 I- E! b
//UARTprintf( "i=%d\n",i);
7 [0 O9 |2 E1 }# c+ ^
//UARTprintf( "j=%d\n",j);
" i5 E& g' Q& N3 H0 P4 b( n3 O
UARTPuts("Data mismatch in buffers.\n",-2);
# S( ^0 y2 F0 f( R( I
if (upp_interrupt_count == 2 && upp_error_count == 0)
- O' V8 v6 `% J( b% h( t: Q
{
. P! f+ V! M9 {5 W% a( N4 R E
for (i = 0; i<upp_frame_size; i++)
, A; o& g2 [$ i% s/ O3 _3 w
{
( L' j! i4 q& d
if (upp_buffer_a
!= upp_buffer_b
)
6 T, w5 y( o( Q- N7 n. n. o
{
& o" K7 D3 g5 d+ i, s8 z
upp_error_count++;
: y6 f7 Z, [: z+ T
}
: E7 _% R1 v7 U7 R) j
}
$ w1 ~/ u6 x" y3 ~
}
9 m/ Y' w- Y7 S0 [! N1 O: N' o N2 ^
; {+ E6 K; _* K3 L/ r# v
/* 报告通信结果*/
Z1 L0 F5 g9 y, G. i0 X: ~
if(upp_error_count != 0)
" |) K" c: e; S
UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 ^5 b, J& R% U/ [" c: y% t. V5 L
else
6 b! `" [1 \) V' F; g
UARTPuts("uPP transfers complete!\n",-2);
% d8 y+ h' h% @' V* p$ s
4 G" n9 ^* v% H
UARTPuts("Do you want to print all the data?(y/n) ",-2);
( r- O/ L# |. f) d [, @4 h6 f: j
UARTGets(ch,2);
, o8 h: T# y9 ~
UARTPuts("\n", -2);
! j! W. h3 o9 ^2 @
$ E+ c1 l: \* k9 s" D* `! z
if(ch[0] == 'y')
0 C1 Y' v0 K" a4 C- Q
{
3 }7 g j6 ~) Z7 ~9 E
/*打印全部读到的数据*/
# |4 i7 P+ U; P3 f7 F! P
for(i=0; i<upp_frame_size; )
" V# H! @' [! J. [5 V* S( h
{
( I5 m! z2 ?6 G2 ?2 Y1 V! h0 x# d" P8 t
for(j=0; j<5; j++)
5 T0 E4 V" K$ t9 Z$ U1 s7 J
{
) W9 L9 s0 U! c# r& @) z
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
) d: X% [6 e' G4 E( h+ H$ c
i++;
$ m2 t" Z/ Q# ]. }
//if(i >= 4096)
. v2 ~* W- f$ F. a+ V
// break;
# r) j, m+ }+ Q5 G1 _+ B. f) D- M
: ~1 A j% {$ W/ B" g
}
" v* f$ ?. b6 `: _" J0 K$ N
UARTPuts("\n",-2);
9 p( ?+ w# J' O+ X' M8 W0 |! e
}
+ N5 L" k/ o; k) @1 t3 j' j
}
$ a0 @6 N4 j# S$ T# q' R* X
u7 N% t' C% m: K: U
}
+ l: q8 |8 e' _$ O/ y: V& M
: J n. T" _: Z$ L7 B: {( }
0 t8 D1 s4 d/ F1 C2 q
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
p! [: q& c6 A1 I
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
2 E3 F' i. X( `) ?; F( n% I
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4