嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 P1 M2 S- i W: B B% O3 ^
Void UPP_TASK(Void)
0 \2 n; ^* y; z
{
# `3 v4 G: ?2 u2 g3 k. W
5 \, r; b( y8 W+ K `+ W
int i,j,k,target_int_count=2;
/ [7 |* r, N9 ~# ?2 S3 d
char ch[2];
" ?( q# v/ d1 H$ U
, n t8 k* j5 b' s( g, L' D
8 f9 A, ?, e, r
# Y9 A- m: q: w# f
upp_interrupt_count = 0;
9 p0 F) z0 E9 J1 L2 k$ V2 @
upp_error_count = 0;
& A9 X- c0 k5 h5 \ k
8 `' D% V( r2 U
UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 K* K; z9 j* g- p/ |5 v/ g
// Initialize data buffers
2 T5 o& x& H7 J' F) R0 J2 W' J5 i
for (i = 0; i < upp_frame_size; i++)
, m0 s8 s$ @/ z$ n
{
1 V3 `" S6 Z/ n Z
upp_buffer_b
=i;
, d/ B- o, F b1 m# n
upp_buffer_a
= 0xDEAD;
/ |( j- y4 ~, l- S
}
# G3 O8 t# B8 R" d- J r
+ c2 V- i; k6 `
//for(i=0;i<1024;i++)
+ c& C+ D: a. ]- p H
// temp
=0;
" y% h( h6 N$ N# q/ P2 f7 T: P
- n& W+ l9 F3 n
//UPPReset();
6 s% u7 R; v- U2 w* Q5 y8 |+ I
/*启动UPP DMA传输*/
0 x, Q+ e Z0 ?9 v4 o+ h) T2 d
UARTPuts("upp_prog_dma_i\n",-2);
$ M7 o8 P; a/ d- h+ c9 O& X" G
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
) \! l' R7 i( _/ ~! r
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; d# u j) a2 M& Z; e0 f4 H! _- |. P
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, E( m: p- G I+ F! S; `
- A7 u; B/ |' w, x. P( ?+ J
UARTPuts("upp_prog_dma_i\n",-2);
: I) e# U/ h/ @2 S: g; B) |
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" ]7 u( Q8 W; Q
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ }9 ]0 F, ]! `+ q n
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
3 Z( e5 W/ j' s6 c
; T. o" {6 ?5 S8 P" n
/*等待UPP传输完毕*/
4 r* x& q3 L+ G( J2 S! s: [
//i=0;
2 u. f1 N; E* t# p8 |8 r9 m# X
//j=0;
6 \4 n: A, t& a: _+ g
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
6 _% Z. A$ U4 L
{
. z6 ], Q7 i( _$ c- m$ _9 q, a
/* 测试UPP传输的同时操作普通DDR数据
! S9 w( |5 i: v8 `: z9 w; L4 [. E
temp
=i;
1 |1 s+ p: w* n# c, |& Z
i++;
: ]/ }/ |: F- U$ v
if(i==1024)
# O2 a2 T$ _- i
{
1 J) x( @' N- w7 G4 k
i=0;
- x) t1 R6 l& R: ^; B' a0 X
j++;
& E7 z! o4 P2 O1 I
}
$ S2 f0 l1 m0 I3 r, s7 F4 c; l
*/
7 _ B9 k W- K0 y3 M7 M
+ F; X# S8 |; e. n
asm(" nop");
- n4 R% A) x1 R, H5 h( a0 h7 q0 F
) Q4 N! y) }6 o" p3 M# Z8 }
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) E% K f8 E7 y/ k
}
9 k% _% O$ `2 N% `: w
( I a0 j, j! n& K
/*检查UPP传输的数据是否正确 (loopback modes only)*/
& D6 c1 ^! {6 [6 W
//UARTprintf( "i=%d\n",i);
4 O# ?9 J; H* o/ Y, {9 V
//UARTprintf( "j=%d\n",j);
# O0 l3 u: D2 b
UARTPuts("Data mismatch in buffers.\n",-2);
8 m. `, o1 T7 ~/ a$ D' H% r
if (upp_interrupt_count == 2 && upp_error_count == 0)
1 t1 P% V; N6 T$ x3 O7 }( K
{
% x3 `) e/ J: |1 I* D4 P
for (i = 0; i<upp_frame_size; i++)
" ?, z; p9 I* V7 A+ ?+ r) y
{
3 M/ ] I( s5 s: m& j
if (upp_buffer_a
!= upp_buffer_b
)
7 T' o. K" m) C3 b6 M. _
{
: u4 b" Y+ H3 o' D- ?
upp_error_count++;
9 X% B3 p& }" w8 \; J
}
# Z! A5 K: N/ B) S
}
' o! z7 I1 B3 U1 k8 {
}
5 J9 F$ m* S1 @) ]8 E
% `' Q. m. M" ?/ k
/* 报告通信结果*/
. M0 d9 T* X* ^2 |' t+ w+ J. }
if(upp_error_count != 0)
) U$ b$ f. [- X( q% R. q
UARTprintf( "upp_error_count=%d\n",upp_error_count);
$ j; N; u% H" ?4 \5 r
else
1 L- q4 q1 V$ ?8 L B4 i3 n
UARTPuts("uPP transfers complete!\n",-2);
6 h& D- G& y5 L4 {; D; A
- c6 [% x( i2 q& c. N
UARTPuts("Do you want to print all the data?(y/n) ",-2);
& h0 n) Y% u2 Z+ Q7 m. ~2 A
UARTGets(ch,2);
! w; R. E, a" Y" B8 g; \4 Y7 u
UARTPuts("\n", -2);
! V/ f4 K$ d& ~$ @% l' L
+ Z# C: ?, e/ [
if(ch[0] == 'y')
8 T8 o. o/ I; t7 Q
{
8 L3 W- @2 U3 V) \" n
/*打印全部读到的数据*/
) r: ^5 m% g; M6 G) a
for(i=0; i<upp_frame_size; )
: \& a4 i* m* q
{
: V7 U7 c, h1 I5 ]4 Q8 G6 t$ k
for(j=0; j<5; j++)
2 h2 m' |) |& h1 C
{
7 k) L* K5 g0 \9 i3 F% g& ]7 {
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
) L8 Q& U$ S6 T5 k4 o) I, q# a/ g
i++;
# g" O4 H( T* ?" |5 `
//if(i >= 4096)
8 y0 a& j& Z$ S" v; m
// break;
G$ |* W- z2 Q' R- {- O
7 B# H1 R4 e0 N( R0 b' _$ R; ?- E/ \
}
/ g; P4 \; \- ?* b7 x! `# D& |+ F9 I
UARTPuts("\n",-2);
& N7 C( I/ Y' W# y
}
! }2 A* }6 v* b2 X
}
& p7 m$ k! t0 i ?
6 _1 w6 I* w0 {
}
9 m2 x0 [: ~4 P r/ r
C4 r) E( S# X5 z; ]
% C4 k6 \4 p# ^- ?' A$ t
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
: ~8 T p3 W: r" n0 ]$ \
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( a; m5 w% I( i" L! M; |+ W8 \
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4