嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 j4 @5 B" V9 D4 |
Void UPP_TASK(Void)
. q4 R* ~4 A9 ]& Z7 U' U4 l0 ^% @
{
4 i$ I) A, f- a* y. W
6 l) u! _+ P* }3 Z R+ m" O
int i,j,k,target_int_count=2;
) Z( c# ?: p$ _" r8 u/ Z
char ch[2];
- z# h% f5 o( T( e9 g8 N8 @
0 n$ h+ @/ L: ?. U5 r0 N
( g$ k0 M# `0 y" n" r x6 W7 e
* v% F$ _- H7 e' Q* p9 T6 m
upp_interrupt_count = 0;
6 F3 e/ P- A; Z% m# o' J) Z
upp_error_count = 0;
+ h* W6 u4 J( ]+ z4 V: v
6 h! Y( y1 p' g3 g1 V9 F
UARTPuts("\tResetting uPP buffers...\r\n",-2);
. J3 D0 S, o, s$ R2 u/ E
// Initialize data buffers
: H5 h- f. Y$ e# R6 B2 J
for (i = 0; i < upp_frame_size; i++)
5 _' F" V; p# S/ v1 U5 T
{
! i! a1 X9 @7 t! f! y( J# q
upp_buffer_b
=i;
s+ ~; O Z$ }7 V" P$ V: T
upp_buffer_a
= 0xDEAD;
& ^6 _2 g4 P8 Y, B9 t+ i8 Y" i
}
+ a% B* n& }: k/ X; s: D% j! z* E
7 H e0 N* k* Y' c5 r
//for(i=0;i<1024;i++)
; T! [4 M% S& K5 ] r1 q
// temp
=0;
* t" c/ u* w% C- b) h2 `9 N, |/ h
( M" G. m. \+ L$ C2 |
//UPPReset();
3 k1 I1 x. f( r9 j4 u! V& F
/*启动UPP DMA传输*/
) I7 @1 a8 z4 h1 ?& v7 A: g
UARTPuts("upp_prog_dma_i\n",-2);
! t( s& q" }6 \! x
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# U) P- R' Z+ M* }) k
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) ~ |, l5 i5 `6 E/ a
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 T X2 T4 d; y" M; d8 A: e/ w
) b7 y$ |/ X4 ?; z
UARTPuts("upp_prog_dma_i\n",-2);
; e, D0 P& j1 l# m# V
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ f \ j4 D( m. f* r
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- x. l# ?8 }7 e C3 G8 O* d2 K8 v
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
- T. |' ~: j! V* ?4 ~3 C& @6 E4 \
+ ?8 s4 ]" j c( A5 s; _* q
/*等待UPP传输完毕*/
8 S. }* K; f& J7 I
//i=0;
1 H' N r0 k& w( Y8 F
//j=0;
: m4 q" O$ G8 s$ a
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
" d- p" W O, B' s! I( {
{
5 u" d. w4 R! F- U' d5 J' [. b% I3 K
/* 测试UPP传输的同时操作普通DDR数据
+ T S9 R4 N9 B. e1 [* @2 ?3 e
temp
=i;
1 _. Y3 i. e9 h3 l( V) b& T
i++;
% w2 x j. o! w, d
if(i==1024)
- I; h2 K5 \: N/ N/ ~5 d; f
{
; `& U, c0 z' t! P( D3 @ p: E6 R+ k
i=0;
( _8 ^* d k1 d4 R, I
j++;
& T- d$ Y/ C" \9 v( y* I
}
7 t( L* C) W! u% l8 u* G% X' h
*/
+ y! H3 b e% m* h8 C V
' T9 a7 a- `- R* {1 u$ E# U ]3 u5 Q/ ^
asm(" nop");
# u7 b: X7 i% v4 m! ~( }+ v% y, A
# H$ a) d; g7 q
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 r* q7 ]3 l. _
}
) ?$ {+ a2 e1 t9 G! g* M
/ @* E8 f1 t& W8 r9 o
/*检查UPP传输的数据是否正确 (loopback modes only)*/
2 `, H! x( c; E, X5 F+ H" \
//UARTprintf( "i=%d\n",i);
# K; ^9 {7 Q# k3 K
//UARTprintf( "j=%d\n",j);
' C+ v) {+ j$ _! f% V7 J( y
UARTPuts("Data mismatch in buffers.\n",-2);
- @0 r6 Z! h1 [3 k4 v! T
if (upp_interrupt_count == 2 && upp_error_count == 0)
# \1 y/ y7 p- |$ L6 O
{
% j2 X! f2 X2 u2 z
for (i = 0; i<upp_frame_size; i++)
4 D1 M# H" o$ z1 l; L
{
9 s) c% m' @6 v3 S) N. i
if (upp_buffer_a
!= upp_buffer_b
)
9 @& R, P( t! {0 K0 Q1 S! _
{
/ M' O2 b8 @" E5 i3 M4 R: A O9 L
upp_error_count++;
) G7 f+ V* I i& R+ f- ?9 Y
}
+ t+ X6 W/ Q0 ?9 \5 ^
}
- o% t0 I" j. f# {8 [2 o
}
8 {# [8 `, E# P/ Q
+ L% i/ f: a# y7 d; u0 f/ C, R
/* 报告通信结果*/
' c9 w# |: q+ K P" |3 s
if(upp_error_count != 0)
# E. F4 Z+ s( n9 g" c/ q5 A
UARTprintf( "upp_error_count=%d\n",upp_error_count);
) Y) U# R* r3 I/ a* y3 j5 G7 M' n
else
; u# S) R- P- v) ?6 \8 t. h
UARTPuts("uPP transfers complete!\n",-2);
- f5 E' J2 Q. Y4 j1 @: l7 x
( ?) k# F9 _. D3 `
UARTPuts("Do you want to print all the data?(y/n) ",-2);
7 V+ i! I- N/ X1 P, A8 x' b" F
UARTGets(ch,2);
* c3 d) K2 [1 V! Z
UARTPuts("\n", -2);
8 Y7 r) L2 U: r4 ^5 j9 }
; f7 w; D6 v2 S! ?& L
if(ch[0] == 'y')
3 W$ J7 [/ F. ~2 ~5 F
{
& X0 W7 H5 }$ G9 m! Q
/*打印全部读到的数据*/
/ R$ P8 G& B! r2 o) r, Q" B
for(i=0; i<upp_frame_size; )
. [2 G: f( L6 w& L7 l. K% |
{
+ c, o$ Z4 F( d! D, p# m
for(j=0; j<5; j++)
( D6 K2 z, ^5 d+ z/ S$ T- V
{
- I" }; a7 O- H1 i
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
' H9 G& |2 D% X) u, Q2 o
i++;
% U1 L7 ]6 T3 ^
//if(i >= 4096)
% n" R/ A! M6 W7 q
// break;
1 L+ t) h- o* n0 w' a: |; \3 N
5 S% L* D0 d; t) Z; ^
}
$ S9 v* U/ H- J2 j# @# ~* e" `9 d
UARTPuts("\n",-2);
9 H: {8 [6 P8 r& r# H6 E w1 K
}
! ~( q: @" V( ?# u5 ]5 E
}
% [; a+ y: x% m ]2 z+ t
) h+ x; l5 ^5 M! E. D9 d' C
}
- L6 M/ X9 ?- Y6 h7 { g
; B8 T8 A9 W% A! z' V& X3 _
C: r( k2 Z' w N) l3 m+ A" I
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
3 E) a( H* A& z+ \/ G
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 R. t- k/ K0 e( a+ b$ b
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4