嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
8 i( w: [4 y( R/ C2 u' R: ^
Void UPP_TASK(Void)
- f6 W B u7 I; }( Y$ }
{
5 Q- d; Z/ o: g y3 a8 Q: z) D' E
/ k$ }7 `* ], d- o3 o2 }# Y
int i,j,k,target_int_count=2;
( r7 @" s6 M+ ?! @: E" C
char ch[2];
' X1 }! k2 @' ]. t! h
; g {9 n3 ]$ p+ P; ]6 H: C
6 p9 C& l. Z( a5 k7 T: R4 m
0 P1 J; }4 ]% \# E( `
upp_interrupt_count = 0;
* A5 G" L2 d; L. a- I! H0 t' f7 H
upp_error_count = 0;
% i) U0 o$ U0 Z, E# m
. R# N) m) q$ t& k) ~
UARTPuts("\tResetting uPP buffers...\r\n",-2);
8 L6 o' U* ]9 x$ P( U
// Initialize data buffers
0 l! i3 h5 A( D# J5 G
for (i = 0; i < upp_frame_size; i++)
, T0 G" ]2 s: E, G
{
) f# @$ }' e% \9 d) k8 d
upp_buffer_b
=i;
8 n3 `6 }6 m, ?7 D, \# T
upp_buffer_a
= 0xDEAD;
# }. ~! r( w2 h* C
}
6 T+ H& }' ^. v* q( H
7 n5 p+ K5 c z, W& d
//for(i=0;i<1024;i++)
7 M7 I9 n( j& ?
// temp
=0;
7 u3 u% u$ F8 e/ m$ A) m
Q1 F6 G" f4 c7 P
//UPPReset();
' D1 S; T4 Q, M0 g
/*启动UPP DMA传输*/
; [6 M' j4 @/ f) C/ m5 F
UARTPuts("upp_prog_dma_i\n",-2);
8 k" v0 @1 l* R+ M3 W& V( R
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
8 x7 {& w( T1 ^
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( L- W; ~0 a9 \, R7 ^
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 N4 H, H6 C9 w! f3 V
/ g) h/ i/ I5 ?2 j
UARTPuts("upp_prog_dma_i\n",-2);
& ~5 D, Y M& U- }
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 M% l9 N' z+ m2 x/ U2 |
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 D5 T: q+ [ V2 B* J0 v+ k
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ e* ^ H3 L+ G
: u6 P2 c% J3 F
/*等待UPP传输完毕*/
|. N3 d' U: K! g3 R( F7 w
//i=0;
( p0 Z5 d" A8 Z; T# z+ q5 W" b' [
//j=0;
' M; H( g3 l% A- }$ D
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ U- g3 L- G- {7 y( k' E8 k
{
L1 G" v% Q# O, X9 Y1 {
/* 测试UPP传输的同时操作普通DDR数据
$ ?2 v; F, D% J8 i. i0 z3 g9 H
temp
=i;
- J9 Q$ e8 `3 J
i++;
- [! }# L# `& ?, ^' L
if(i==1024)
1 {0 x {( B( V. P3 t7 B9 c
{
" z6 E6 r) }& }2 ?
i=0;
5 c$ C) c4 z5 z N0 L/ d0 t
j++;
, o ]: q G' V, o' ]
}
& C; [% k$ p2 p+ Q# P/ ]
*/
% c! h! \! G* J
( }3 s' I+ E8 F, P1 l3 t8 B9 X
asm(" nop");
D h$ f6 f" `# e
" Q' q. Q& Z! n/ j
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 R$ y$ {- o o0 k- h# D n
}
5 I$ p' r" t& {6 T9 A( m" T
* Z+ n* \$ I* U& x* Q G
/*检查UPP传输的数据是否正确 (loopback modes only)*/
$ d0 h! k2 u0 Z; t% C, z) N u9 x
//UARTprintf( "i=%d\n",i);
- M6 O7 L; @" Y! r8 y1 L
//UARTprintf( "j=%d\n",j);
) \& P7 F, k! w3 o
UARTPuts("Data mismatch in buffers.\n",-2);
# I8 i, n! q4 g. u6 V4 B3 ]
if (upp_interrupt_count == 2 && upp_error_count == 0)
, i4 V i9 j# ?" h% e3 m9 @4 G
{
) }) S+ m0 b; T L1 _
for (i = 0; i<upp_frame_size; i++)
# q, B2 X% p/ Z
{
) K. O4 D! P# P9 L( {
if (upp_buffer_a
!= upp_buffer_b
)
2 F( J5 Y" r" o; S) W9 y
{
+ j8 O: }- r' L' W
upp_error_count++;
% B4 f2 [$ v! {- c
}
: X I6 O4 i$ X. @! H
}
( l- M$ {0 q5 P, D) u
}
0 m4 f0 _- U3 i: q) ]
- Q7 w* j- _% {
/* 报告通信结果*/
' F1 M+ ]* t! C% m* U! r
if(upp_error_count != 0)
/ H6 N1 ?& D% B( d; b2 a
UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 A6 u1 R8 z0 m
else
. k! d% D& ~! ?
UARTPuts("uPP transfers complete!\n",-2);
. H+ K4 }2 ?+ D: T3 ~
% w! p# G8 W( C" O* f8 d
UARTPuts("Do you want to print all the data?(y/n) ",-2);
: p# ]/ u1 _! p/ S: O
UARTGets(ch,2);
( ^, \; ~( j4 j0 i
UARTPuts("\n", -2);
5 L" j# n- W' D3 s9 G
8 P7 Z4 N# B+ X9 K
if(ch[0] == 'y')
- q5 n* E) E* D/ [& r) c/ C
{
; b# U$ e' V6 i, i
/*打印全部读到的数据*/
7 S6 f" h- N+ B4 W( O
for(i=0; i<upp_frame_size; )
3 K+ S/ U, [+ n6 ~( R
{
* c* M9 p9 J6 W3 T2 G
for(j=0; j<5; j++)
0 v+ Q4 u! f4 F. T7 ?
{
- R8 O/ n2 N- o* ?$ k
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
3 K9 e; k3 P& r4 [) F
i++;
. o- u8 Z) |# ?$ Z( g4 a) j
//if(i >= 4096)
4 I# F/ \' F$ g/ c
// break;
t0 \2 I+ K( s1 O+ ` n9 F8 B
$ s7 i2 k& k8 e4 H" z u
}
8 ?% v2 q4 O: t) H/ q# f
UARTPuts("\n",-2);
' T% t: @; _9 {: C
}
5 X2 _5 {; i1 o" _/ k
}
9 w. L u7 ~0 T' \2 E
4 a9 ?8 p% W, s: ]& K, z
}
$ L- M% T4 O# _1 I- m1 b
% T9 {( h7 b% j5 \6 M. @5 Y9 v% S
3 d8 D- j* _* Q; R' n
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( L$ b6 d8 w4 j7 D8 q# z
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
J0 O! f! u+ N1 q$ ~
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4