嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ ~5 B% z, g7 U! G2 k
Void UPP_TASK(Void)
, Q% ?( _9 n u% M! |: J' K4 y
{
+ m! X4 }- a3 p) H# R
+ T" ~- @, I3 c" j: m! j
int i,j,k,target_int_count=2;
& `- I H( o8 i
char ch[2];
) V, ]4 q9 o, h
+ N; q# g, u/ I0 n) Z9 c+ w6 b. n
" e+ T/ E# _( m W. P
3 x# O# k H7 S( h
upp_interrupt_count = 0;
/ J8 W6 @' F, U' G9 z
upp_error_count = 0;
' ]- ^2 }( G9 u7 m4 ?5 z
( ?; J5 C: t% y0 b1 d5 Y% O
UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 }4 S+ \; F* w; E' j( g. W
// Initialize data buffers
6 }* c( z3 O- p0 E
for (i = 0; i < upp_frame_size; i++)
?' C; w! K ?4 x- t
{
& o) G2 k+ {" i; @& l( K
upp_buffer_b
=i;
6 b# D) e8 f! J3 ?$ n
upp_buffer_a
= 0xDEAD;
M& k7 y+ [) t8 C4 i$ w% [( M+ p {
}
* p+ K3 l+ l5 j$ Y$ }$ _5 c( | G
# T! r! J: b: X: f( D$ |! [
//for(i=0;i<1024;i++)
" H$ L% \* b( u$ L, x
// temp
=0;
, L; e1 m k- J! O) I2 Y6 c3 B
/ y+ d% F2 P0 Y1 N
//UPPReset();
6 {9 d1 A8 M6 g: \/ A
/*启动UPP DMA传输*/
. E; r" E, r$ E9 o* e0 q8 S
UARTPuts("upp_prog_dma_i\n",-2);
* C6 O1 O" I! n1 o( M. f
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% J7 Y* L9 M0 a/ F& r
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 v5 u' ^0 O( R6 @1 I2 q- e
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ U) y9 C* j/ m# G/ z
+ s. r1 [1 r n' h9 l
UARTPuts("upp_prog_dma_i\n",-2);
C+ }, t, P9 A) _& {6 w+ L# {* j; M
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
# O4 k' {8 p" L7 |4 Q
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% k6 l8 F; K* J7 G7 c
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 v$ O5 ?, E: i. o
# Q. o$ p) f- e B7 u' j0 u
/*等待UPP传输完毕*/
) a8 g5 G; i( Q: @$ G; X: }
//i=0;
! A" r! q( ^: K* V b
//j=0;
4 x# M! @/ }; D& M
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 i5 r3 v' h; m) F
{
3 {( |' n% v% H7 C9 [
/* 测试UPP传输的同时操作普通DDR数据
7 O# O" |8 }0 z# f, X8 s
temp
=i;
9 T2 P0 t9 N4 L. v$ N
i++;
% V3 \ r* R5 e$ @+ |- m# t7 j" Q+ t
if(i==1024)
/ x* ~: x: a' C+ d. u6 }' L
{
3 C6 s' c' X5 T$ @' A
i=0;
$ b. l8 N* y' i: C+ J5 R4 y
j++;
1 p1 N. G8 w' m9 e3 o% e7 D5 D
}
( w' o! @) m, x: G8 [
*/
- L8 S# U& l8 _" \
4 B: P9 K2 I; X( K+ T( s
asm(" nop");
+ z4 k- l) {7 P/ q
- u0 g4 f6 `1 I2 w
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" k7 f8 Y% N" }% }- b( `/ R0 ~* s d
}
, h) ?; {" k) m S
( E- d, f+ U1 s
/*检查UPP传输的数据是否正确 (loopback modes only)*/
1 x& `; [0 H% q' q- D
//UARTprintf( "i=%d\n",i);
- h, F m) Z4 ^
//UARTprintf( "j=%d\n",j);
! A1 B3 K: } E Z* `$ K$ ^* K
UARTPuts("Data mismatch in buffers.\n",-2);
1 j) H8 y: ]8 G' Y; l/ O. ^
if (upp_interrupt_count == 2 && upp_error_count == 0)
4 ^! D; y7 v/ o# L* L
{
* z6 R, h0 e2 Q6 x4 e [/ J
for (i = 0; i<upp_frame_size; i++)
* y' N- Z: w. i: h
{
" T3 Y- a2 z0 Z) c! f2 B, g
if (upp_buffer_a
!= upp_buffer_b
)
3 y$ P/ W/ D J* P
{
! T; P* g: i& Z7 r# ^
upp_error_count++;
9 `9 J/ g& }) Y V, X
}
* l8 ?& T$ w8 r# }3 w* G
}
H$ M. z' k, y, B( a
}
9 g! l" p# H( ~0 O: }
- J0 V5 _; d& K9 Z- D
/* 报告通信结果*/
5 K& J! S% }0 L
if(upp_error_count != 0)
' l( H5 ~1 A* w5 F8 q; r }
UARTprintf( "upp_error_count=%d\n",upp_error_count);
8 L" Y4 k4 a) G8 }% C7 _
else
: M3 i& b+ e" g2 H
UARTPuts("uPP transfers complete!\n",-2);
" @2 e! F2 Q# c+ V. f
; N0 H9 w! ^, Y
UARTPuts("Do you want to print all the data?(y/n) ",-2);
) D, O2 Z0 A6 e7 Z' n9 a" C1 `' D
UARTGets(ch,2);
) u5 ?; Z4 @ f8 Q9 P
UARTPuts("\n", -2);
7 @" C3 Q& N p
! S8 l6 B8 L9 k2 ~2 u2 M- b
if(ch[0] == 'y')
* f! R& [1 }6 @4 z( C+ k
{
" N# |7 M* P' Q7 ]
/*打印全部读到的数据*/
! g- }! T/ o; J7 h8 o* _) ]
for(i=0; i<upp_frame_size; )
; M+ s8 l/ J) j9 i9 {1 d' s6 K
{
" E$ ]1 O' ^2 G6 E U3 u- ?
for(j=0; j<5; j++)
0 K: `+ M" U$ |3 W
{
5 _- C% P) o9 E) X0 |3 O4 M5 P8 m: B
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
) U9 P8 \6 C( I7 m
i++;
2 v: B$ V3 [$ u) I& f4 D- R+ A& p
//if(i >= 4096)
. Q; s& c U U- K- {; N/ M
// break;
6 Q+ [: X% }" H- R/ ]# T
1 P% N5 P1 q! d% {3 H* l- h
}
1 q) U6 W; a, U: y& ?
UARTPuts("\n",-2);
' H P; J! }% H5 s7 ]" y( i
}
% P, e# R% ^. z1 S( E) B" ?
}
' z* e9 w P, m' z( x% y
4 @) A8 _- O- Y: z P$ G
}
2 f/ [$ ^9 e6 j0 B$ b" k1 u# Y1 U# f
# s2 ]4 |9 Z0 U
5 F$ D, ?+ r I+ O# E$ u9 f
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
0 b! g0 r% w7 |. _. `) d/ `
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
3 J3 F6 x! _3 s6 h' M
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4