嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 ?% Z- k$ J$ U. |
Void UPP_TASK(Void)
/ ~* G( s; g$ \1 @) |# A
{
( M: v% v: v9 g# L6 R2 q8 g8 _+ X+ Z- i
6 Z. y: ?, g! c- O$ X# E! l" ? I
int i,j,k,target_int_count=2;
; `: _7 g' l" ~- Y; L5 u( s
char ch[2];
6 V3 s7 [5 h3 I5 k: N
v% t* `$ b+ V4 D" s- y
5 ]% }9 ?& i1 @, S6 `# s8 {+ A% q- j
( B" P5 H: ~% f* k
upp_interrupt_count = 0;
: e L9 F* y: R( _- G
upp_error_count = 0;
- M3 M* G4 p" x+ Z# g
2 |1 T" C `# H$ n3 S
UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ G. ~" M z' h
// Initialize data buffers
: U! t- ^8 c3 q
for (i = 0; i < upp_frame_size; i++)
9 q$ a; y* N0 H9 T1 w6 _. Q
{
6 B* a/ l1 |6 Y1 b" o- X: n
upp_buffer_b
=i;
8 Q1 T+ ~" I" q5 ? q4 a
upp_buffer_a
= 0xDEAD;
% }6 r: Q$ q0 ?3 l4 V0 }8 Y
}
" N) j7 B; I- e# Q3 Q
. a# X5 k3 K) }% [8 F1 m
//for(i=0;i<1024;i++)
1 ~: D" c+ r! ?! f X. s
// temp
=0;
: _4 G9 f0 H# k3 [$ C- x+ d
$ B/ \, O$ g* p2 X3 T
//UPPReset();
% h' G) i6 m7 V# U5 S# j; D8 @
/*启动UPP DMA传输*/
* |( h+ ]* P) v0 d
UARTPuts("upp_prog_dma_i\n",-2);
0 @+ l$ P; u9 Z( V: U4 ~
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# E9 f. U3 e/ d9 j* k' y2 l
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 K1 R4 x3 s* N/ [( e& q
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' m0 r' ]9 U) E g/ l
8 O+ W1 t8 X4 k+ z& _3 N$ C
UARTPuts("upp_prog_dma_i\n",-2);
% w; y5 l, i9 l- o) u* T
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 Y% c3 J3 N( _+ k2 w! b. u; Q. ^
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- k" `, ^5 ^- U" G' p# u
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# P& y6 ~7 T ~8 d! E& w
) p8 }* k1 H7 W; ]! y
/*等待UPP传输完毕*/
6 Y5 j1 ~ c+ q7 o: q
//i=0;
* s* q# S& }9 g/ Y; G* P* V4 t
//j=0;
1 r8 J% g" C2 H; P4 [8 E
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* i6 m+ U! n1 v8 u9 r
{
) Z5 _7 b8 W: y$ `5 [5 y2 ^
/* 测试UPP传输的同时操作普通DDR数据
1 \: o7 ^8 `( N! U- A ]$ k# I
temp
=i;
, u, ~% _& i6 r
i++;
/ R4 c, p# q6 |2 p# r
if(i==1024)
4 F- K. ~. P# P' b1 W
{
: k7 G# ?/ N# @: B% G+ N
i=0;
# x' H5 [! o _" t
j++;
z2 Y3 m. V+ D. \
}
, X' r _/ I. z+ t/ w; B
*/
7 {% o4 J* q. k) V1 S2 Y
0 M% @3 j4 K) p* `( f
asm(" nop");
- ?; ~4 e9 j3 f
" |0 | |+ d ?) F
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 L. @8 t5 Z4 o) L
}
! w K y; @( a4 @4 D c( p: j* I' Z
2 h" `" I; p5 }9 s1 p$ v
/*检查UPP传输的数据是否正确 (loopback modes only)*/
' O3 K& Y% N0 e' q7 A1 Y2 u
//UARTprintf( "i=%d\n",i);
& H$ K* @) Z- | e$ J( Q
//UARTprintf( "j=%d\n",j);
2 _: L1 K# `7 v
UARTPuts("Data mismatch in buffers.\n",-2);
) D1 L, ~1 V) E1 p! S7 O
if (upp_interrupt_count == 2 && upp_error_count == 0)
1 n. c# y7 ]( a1 N1 G: `; X/ L/ ]5 ?2 s
{
0 g6 V2 b. i9 X& h p9 S4 S
for (i = 0; i<upp_frame_size; i++)
6 |+ k; n; H6 W2 S. G
{
! k: @" m3 ?, t7 G' X1 z) l
if (upp_buffer_a
!= upp_buffer_b
)
6 C5 x8 E! o/ L: g: p2 t/ h6 T
{
6 I5 x! P! X& i& X( A
upp_error_count++;
% h! x/ J" K _- k
}
4 c( a; r2 j, m% A, Q( _
}
) {1 i" X* D- o# F
}
! z) R8 Y" i& |6 \
2 w4 j0 ?# Y, T! l5 V4 B
/* 报告通信结果*/
, B2 t! E) @- T9 ]6 Q6 ]' S y
if(upp_error_count != 0)
6 f1 x* \# A* V7 h9 C
UARTprintf( "upp_error_count=%d\n",upp_error_count);
3 s' ^/ J7 h& H( A
else
/ R9 v, N* q% o& |
UARTPuts("uPP transfers complete!\n",-2);
! \& m" }; i6 M2 w1 l- Y
; c. W) ?) l2 {$ d) Q/ k
UARTPuts("Do you want to print all the data?(y/n) ",-2);
( K: I" w. F* s; a) F# ]- F( s
UARTGets(ch,2);
8 g- {7 ?5 c4 A. v
UARTPuts("\n", -2);
+ x8 }" _. b! n t4 [" Q$ r
( m, _5 ~8 [4 R9 `4 y3 s9 X
if(ch[0] == 'y')
! c. P J! f4 l* V4 Q5 j2 p
{
! Y7 v6 k8 o" a7 i" P$ k
/*打印全部读到的数据*/
+ W# ?" b% E, d
for(i=0; i<upp_frame_size; )
+ P( A2 S* g& ]$ G& F) _, R
{
4 d3 ?+ k- H0 p* [9 F9 S, b$ |
for(j=0; j<5; j++)
1 f( o2 R" i3 f# `3 i. Q$ O) [0 l6 z
{
1 n! N2 v7 I4 p$ I1 t
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
a5 H$ O) E, u8 o& P5 K
i++;
" E5 E6 ?0 {, r0 e& g( _2 N4 K
//if(i >= 4096)
$ c9 w: z: n6 ^% n
// break;
2 w% @' g, e) t& H+ }* K! ^% I
- K9 T9 E- d; |' B3 o2 W% i/ S
}
6 m( X+ \# [2 }; i
UARTPuts("\n",-2);
0 v, |/ N8 w5 ^. j
}
! d, _5 g: |- Q; U; [
}
! j! E6 X5 K, Z
5 U5 _1 j( S e9 `
}
+ l# ?% n- ~0 e
3 n$ m/ V# z+ U! B: @. Z" w& [
% F8 F; }- l! K5 h& W4 y1 o& f
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
: D8 T$ I3 H: W7 a
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ J% t- H( B" S) I
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4