嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
! `9 n: n: \2 g( O( f& J
Void UPP_TASK(Void)
: N& J# v5 M* @& P' x* N
{
4 R9 h9 ~, R7 x8 R
0 X' m4 [" H! M% w S* u# B
int i,j,k,target_int_count=2;
/ l( S+ X7 k! ?, g0 d7 O; }
char ch[2];
3 a& ~1 D+ s3 @! w7 X. f
% V4 S$ R& Y* l
9 d3 i4 z" M0 y7 n
6 }$ H" m2 t! ?5 q& U
upp_interrupt_count = 0;
( h* ] M0 a) R; @0 e1 q# J% G
upp_error_count = 0;
7 l6 `: W) ?+ |
! C/ @- V# q9 h2 `" Z2 \
UARTPuts("\tResetting uPP buffers...\r\n",-2);
( o& }! \5 t- I: M+ e( k3 Q
// Initialize data buffers
4 g* w2 s+ v9 X8 n1 g& ]1 z1 B
for (i = 0; i < upp_frame_size; i++)
; R3 A, C3 x4 {+ ~' D
{
3 c4 s9 H+ V2 c/ X
upp_buffer_b
=i;
' d, |: G; i9 x
upp_buffer_a
= 0xDEAD;
9 c3 Y8 K, ]( T" O) E
}
7 K$ O |( L( b1 A( x, ~/ U; e5 H
- S9 F* r5 _% \, _0 I0 V
//for(i=0;i<1024;i++)
: H9 m t k$ e
// temp
=0;
) M9 M$ d! v8 ^& A; J* X$ j
! ^" T- P$ M- B% q" F$ U$ A% ^
//UPPReset();
; U6 B# { O3 a4 _0 t
/*启动UPP DMA传输*/
7 Z) a3 E! u( |
UARTPuts("upp_prog_dma_i\n",-2);
7 c5 L) R% n% s" s' v, b/ }
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
. w3 L4 J, K: N
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- I; Y" }, ?9 j8 m% `7 `, Q5 l
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
0 j t4 G) g) i' ]: b$ Z0 Y
8 {6 t+ b( B9 T! W& `5 M
UARTPuts("upp_prog_dma_i\n",-2);
& ^. K2 a9 H2 f( v
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
, |( I. ?* y- l0 n" c
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 C' m( m4 O, q* @6 |! P
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 c* _6 ` C" R
" N+ w# D! c7 c ~
/*等待UPP传输完毕*/
. M o, a6 P/ o% G
//i=0;
. y% `" Q2 j0 @6 S& u
//j=0;
- a$ \# p8 q2 W& A6 q0 p
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
. m2 a( s3 O/ K. r M. s4 }
{
2 q6 m- F" b p7 F
/* 测试UPP传输的同时操作普通DDR数据
Q0 o2 V) j/ p
temp
=i;
% V8 [) e" E$ B- z) M' z! S4 a; g0 n
i++;
% ?% B8 J% P) a- V, Q; Z+ @
if(i==1024)
+ V, a5 T. ?/ l- E0 K& Y
{
; w- Q; A/ I5 Q8 K8 V8 X
i=0;
5 B8 \+ V2 g f. e( s
j++;
+ }: ~& q, B) Z" A e
}
; R' X$ F2 Q' J; R8 L
*/
( z5 v# S+ g E
4 x. U, d4 w; c& L1 d
asm(" nop");
# W# x: V) Y h' N# e
1 o" j) f& y) p9 {
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 A# O: W- J( j4 L9 l2 K' L$ d% ^
}
- Q* t. Y3 Z8 [* P6 y
* j* J+ M' b4 b7 P( ^. K
/*检查UPP传输的数据是否正确 (loopback modes only)*/
k3 R3 S( T' O" o; x
//UARTprintf( "i=%d\n",i);
. r' j/ s+ j+ K, u, r3 q1 d
//UARTprintf( "j=%d\n",j);
# S6 r( ` K# w2 u2 d2 G4 u3 n
UARTPuts("Data mismatch in buffers.\n",-2);
6 k5 m# M: B* t# T- I
if (upp_interrupt_count == 2 && upp_error_count == 0)
6 D6 m) s: u. B1 {# [9 m$ w# m. G1 r
{
$ C$ e# N' r/ Z- e8 [1 n
for (i = 0; i<upp_frame_size; i++)
# a3 G( o" V3 U
{
: Z* \5 s7 M& ~6 g7 Z0 x+ z
if (upp_buffer_a
!= upp_buffer_b
)
) ^0 M* M; d. d/ J0 L; g& y
{
" j; N4 Z* v- L1 f4 g) I
upp_error_count++;
; B6 E* _! O$ D2 C
}
K& ~: `! d/ E
}
/ B' r8 l& q1 `! e( C& f) I# Z
}
2 |8 |/ ]4 J& F0 l- u
/ ^$ M* D) B. g$ |
/* 报告通信结果*/
7 H6 H2 M3 y0 Z
if(upp_error_count != 0)
\6 v1 R8 r& w' y
UARTprintf( "upp_error_count=%d\n",upp_error_count);
3 }, U- n$ q6 r
else
7 j" k0 T' ]$ R6 b( d3 i
UARTPuts("uPP transfers complete!\n",-2);
$ U% s7 M7 e% L' q' I! T
2 w% E+ e9 E8 o6 O
UARTPuts("Do you want to print all the data?(y/n) ",-2);
2 I4 B. ^' a* ^+ D1 a# V" m _
UARTGets(ch,2);
* w H: q$ I; ]# z
UARTPuts("\n", -2);
6 N3 W) t2 Q- {! _
+ d# T: X+ b) i1 N
if(ch[0] == 'y')
- ?/ k$ N# U+ ^* S# b
{
" K; Y9 Q& f# Y H8 L3 `$ O
/*打印全部读到的数据*/
% D- r5 _! B' n1 g
for(i=0; i<upp_frame_size; )
! r/ g5 F+ E K) |/ q
{
5 J9 W8 I7 L6 Z3 v: O3 U
for(j=0; j<5; j++)
( K% a# v) r; }* o
{
$ Q4 M: Z' o# x' I5 h V& p
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
; ?! Q* s) _7 _7 ^/ R- c, o
i++;
- Y+ ^1 ?# m! |
//if(i >= 4096)
9 r8 L( F) p- |. k/ y& c
// break;
; }$ ?1 V, w' c3 _% P
_; ^+ y2 d9 F
}
8 q$ s! M: P: O( B0 q- v
UARTPuts("\n",-2);
r0 s* q# w* g( o8 Q
}
; L, _0 L7 w1 I+ b; i. g1 K- X
}
% J& @0 e, V" x1 B' K X8 L; T
! ?& Q" V" e5 [
}
7 K& R' W7 h) _4 Z* |+ X
6 Y5 b& H* o( M, z2 T9 `
9 {3 y+ g2 _8 z, J% s6 h
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% S3 O3 w0 G' K5 X' c% D* ~$ W
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
X7 c) _ K1 A A% |7 ?1 H! {
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4