嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
* I& {- l8 h" U) n1 J' s3 _
Void UPP_TASK(Void)
! h( X( Z3 Q3 [; C1 ~
{
) Y) K5 t% L, X# g
$ S$ C1 v3 r# s4 F
int i,j,k,target_int_count=2;
4 Z9 W9 Q/ ]' a
char ch[2];
9 k) m: i" {& e% r( I4 v, `& H
' T/ g' _3 ?' z3 [& h& g% I9 j( P7 U
7 @7 ]7 l6 R( ~" [
0 Q+ D# o4 e# }; S" t! H* Y
upp_interrupt_count = 0;
6 P3 b! c7 G3 G F
upp_error_count = 0;
, E5 J* s# D7 p& }3 Z" H
( }2 t3 m. c3 h8 H* K( Q
UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 y+ j1 {( d, g" o
// Initialize data buffers
. x- E! G# B& p* }4 r2 Q7 q- j
for (i = 0; i < upp_frame_size; i++)
' R- F7 O. B6 \6 S# ?0 k! R8 R1 p
{
' o7 K' L W" @5 q. |
upp_buffer_b
=i;
; Y# E8 v) a/ T0 D |# O. q: G7 D
upp_buffer_a
= 0xDEAD;
1 @# e9 ^* O6 Y8 g' H: G7 |
}
/ ^4 K1 G) F* E3 R" ^6 o% t
% ]# ~. C+ C8 C0 p' [1 y
//for(i=0;i<1024;i++)
3 X+ Z$ }6 H$ J0 L/ t$ ~) D0 Z3 ?
// temp
=0;
* Z6 p: e/ Z. w. ^: H
- M P4 T# R6 @2 S' \* c
//UPPReset();
) S' T8 ^' h5 T, N% e M4 N
/*启动UPP DMA传输*/
. {) a& [/ S/ E6 u) k' _
UARTPuts("upp_prog_dma_i\n",-2);
; w. r; w# O2 _6 k+ Z
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
1 ?1 R/ X R. x; k
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 z( D" o" D) ]0 V+ c
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) P3 B4 ?$ k0 ^) x' E ^
6 p$ s' |/ u, {( x( w1 ^
UARTPuts("upp_prog_dma_i\n",-2);
: }- N2 a0 R5 U: T3 ?1 s
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
5 x! R- X4 |' p
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 ]# M8 ?+ X0 l* @# K
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! l8 }+ b1 A- f: M% ]
' q( C& }$ K& o( k% b$ i. R6 ~+ t
/*等待UPP传输完毕*/
" u& u$ R z( }! ~; m
//i=0;
4 B6 a( e6 \; y% e# y
//j=0;
1 U% k- ~$ w; ~$ o
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
" t6 K$ a$ M% ~* s& g. C
{
# l( C* Q2 c7 a& g# W, a
/* 测试UPP传输的同时操作普通DDR数据
: [' }: z3 e. \7 D8 _9 @5 s
temp
=i;
7 D8 y4 U$ `" G, q: K( ]
i++;
- a( k# ^( L4 } X# y) \
if(i==1024)
8 t2 c9 x2 F9 r
{
+ j' R% n! S+ h8 U) Y
i=0;
, W/ w0 n, H2 f5 S- [, l0 }
j++;
. r" s5 ~. k- h" e( ?+ ~
}
7 c9 R: F% Y* l& j
*/
, O+ a) l c5 @6 b2 ?
& v: H0 I$ m- r. y) {
asm(" nop");
5 E5 ]4 I% L+ M) l, N
, |. \. N2 Q! ?+ u
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
. y9 _' L& A4 e/ f
}
' q' B* a* x* L$ `( E# X# e
' b2 p, |0 ~: A5 J2 w: `* s) _
/*检查UPP传输的数据是否正确 (loopback modes only)*/
/ \% N' x) l- r0 [1 f# s, k
//UARTprintf( "i=%d\n",i);
) L* s4 Y3 w. J& I8 _) ]
//UARTprintf( "j=%d\n",j);
- n& T' ^# w8 o; v, D+ L+ P
UARTPuts("Data mismatch in buffers.\n",-2);
1 r. | S4 p; h* l$ O! \
if (upp_interrupt_count == 2 && upp_error_count == 0)
: c: z& T1 q F
{
8 s( j: P7 D- G q
for (i = 0; i<upp_frame_size; i++)
! h! f* r6 w% ?3 r1 y2 E1 m
{
' u% b! M$ ?$ d6 g2 b. W
if (upp_buffer_a
!= upp_buffer_b
)
( T8 |2 q2 [; e+ Q3 C7 X& ]9 p
{
, ~7 v: c: a! V, z' s: \( f
upp_error_count++;
' n2 J& F& j4 s; E
}
& U4 A6 `' ?9 F" l! T5 x7 c
}
7 z% F3 U1 Y6 C# H; [
}
7 d7 j+ w: ~ H& X% z
" \: d# R) f7 `+ w1 B& p2 N
/* 报告通信结果*/
. ^( a; M& t9 |0 @0 j
if(upp_error_count != 0)
# u& a$ ]9 n+ n; A8 L& Z @
UARTprintf( "upp_error_count=%d\n",upp_error_count);
8 r0 W" S3 s8 B" X3 A5 l# ^
else
% q; O& J9 o+ p# R5 W
UARTPuts("uPP transfers complete!\n",-2);
( ^! d) N' ^9 I2 O9 I9 l. N
+ [5 `1 A* j3 P2 b0 d; X$ ^. h x! w8 m
UARTPuts("Do you want to print all the data?(y/n) ",-2);
+ g3 c" f, W: w. C2 ^, R) k" E
UARTGets(ch,2);
! A3 T8 K' s/ L. r6 N' Y
UARTPuts("\n", -2);
$ L6 d G# Q# p1 W0 r9 A8 N
6 p, I3 m% F- e1 X0 m6 Z
if(ch[0] == 'y')
) K( M2 q6 S- \: `2 B
{
( g; y2 \, H: G9 t- t# q9 X/ D
/*打印全部读到的数据*/
- y5 T1 R1 V& C- D; ~: W5 g. N, h
for(i=0; i<upp_frame_size; )
. `! M: w4 V+ w6 [( z" e# P c
{
0 c# w8 }2 P) Y2 v3 W
for(j=0; j<5; j++)
- T# c$ ^; W6 `4 W; m8 o* t9 _5 Q0 k
{
: l' f$ {0 s- r$ h* d1 y( Q7 H$ e
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
3 r4 }: x5 D# N$ O1 l) s
i++;
) g9 m- F! L% v! s0 q
//if(i >= 4096)
8 A- c; v) e7 e9 ^6 f* T1 H
// break;
# I. S) n0 K) o7 Z' n" p+ l) r
% N, j2 M3 r3 N' g
}
r! D4 {$ _1 V! K4 ~( f; u
UARTPuts("\n",-2);
+ `+ h3 Q3 x) E5 q- O, p! [8 W
}
- x/ L! A$ x% Q$ q* \5 }
}
( f9 t( C9 H4 P4 o
+ W4 ^, K6 X& w6 @, R
}
! Y; i9 s5 V. y$ Y
9 }, Y7 h2 S1 V4 r. E1 c( n$ d4 o
0 { E2 N& c+ a% A% M8 O' f2 i
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" v5 z% Q2 m% {8 |
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 L+ {. x- U2 v( I) U. T
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4