嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
7 E! w w/ r% y4 F2 s& Q6 Z# u
Void UPP_TASK(Void)
! C- O* n4 i% {; I( L$ V$ O
{
& T n5 `, z* ^# p3 n
# I$ f# d& z/ X: {# S. r& T: U8 L
int i,j,k,target_int_count=2;
4 W& j" O ]9 ?
char ch[2];
; r7 f0 H+ p, P! }# j& J r
' i% @1 o8 e6 {7 K
* r7 K# |5 F0 Y. ^; j6 _6 q
0 B' Z+ |+ x) \0 F
upp_interrupt_count = 0;
% p1 s( |/ d4 C# @
upp_error_count = 0;
8 g3 S* h+ X- G# o9 q6 v
6 t/ w! Q+ A1 O7 x# J" w$ x4 l
UARTPuts("\tResetting uPP buffers...\r\n",-2);
* H9 n9 ~3 h" d5 P" L
// Initialize data buffers
* h# c2 ~( E$ d6 Q9 L }
for (i = 0; i < upp_frame_size; i++)
0 i1 s+ M% N8 U3 W# Q' D
{
8 c; f6 P% I; Z; F7 m2 }
upp_buffer_b
=i;
6 L. C: ]& l) L4 F4 u$ q
upp_buffer_a
= 0xDEAD;
5 ^4 b8 [: S3 E
}
6 G' y" H7 ^' S$ e9 Q2 T
! v- i1 ~9 U9 b" t0 i6 p8 Q
//for(i=0;i<1024;i++)
( L7 X W B8 X
// temp
=0;
3 \- z& z8 l( M) {5 X
# {3 E, I% _. ]1 T9 R
//UPPReset();
) _, j$ U8 R1 Q4 I
/*启动UPP DMA传输*/
& R+ _8 H! v) n) ^& s3 F
UARTPuts("upp_prog_dma_i\n",-2);
) }8 m$ I+ F( i
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% e5 C' e3 Y3 L0 t: H+ i7 W( P
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 m% @& X y0 v. r- b
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 ^9 Z5 u# Z! Z# A
0 e# U7 F, w5 t% _
UARTPuts("upp_prog_dma_i\n",-2);
- ]' b7 f& x7 A8 K; n' g. d- q
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 {% i+ P! s0 w6 _
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: C. v% O" ?; ^, s$ `5 p) d- A B
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
- ?+ L, G: O& C4 K
" F5 p( M8 f5 N; R7 W- x
/*等待UPP传输完毕*/
& U$ l2 p" z/ a. L% Y
//i=0;
. z4 e! z4 L& [; y1 }) ~
//j=0;
2 q) A+ y' U5 a1 t, W# J9 S: e/ ?
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% M( M1 l" A8 W$ s6 V4 |/ h
{
8 G5 R; K0 A5 G, v# d
/* 测试UPP传输的同时操作普通DDR数据
d9 e0 l. y" I: B( p, A
temp
=i;
- R, f4 E4 o' H. T2 J* V; d! p
i++;
. U8 z+ Q6 r; o6 N
if(i==1024)
4 Y- t5 s5 `4 S' [, T# u# U5 Q; @$ `5 R
{
1 P3 I$ ?4 l2 p/ V
i=0;
8 u: n, J; n0 e7 z1 Z2 G9 b
j++;
0 `- f# S9 t Q2 Q
}
6 E7 `/ C1 k" p$ e8 g) d7 j8 E
*/
3 l9 O# A3 i% k8 ?8 a
7 }4 t4 Y8 ?5 l5 C* f- U
asm(" nop");
5 G% g1 a. @! y$ b- J2 v9 z3 K: A
+ c8 p: z0 [5 T$ i7 z
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
& g8 }* u- ]' O7 U
}
/ e$ X5 x4 A" A6 x
+ m" C+ D$ u8 V
/*检查UPP传输的数据是否正确 (loopback modes only)*/
& C8 b% m% C8 h
//UARTprintf( "i=%d\n",i);
" S2 ]/ ~0 l |& `' L
//UARTprintf( "j=%d\n",j);
0 a6 |% ?- Q# i4 G' T
UARTPuts("Data mismatch in buffers.\n",-2);
/ W' G- j8 C) ^) i, S! y8 i Q
if (upp_interrupt_count == 2 && upp_error_count == 0)
; S1 B- R$ ]8 R) N* _1 f! A
{
% v3 q6 _2 I' x$ b* r+ q- U7 `3 J
for (i = 0; i<upp_frame_size; i++)
8 T6 h* V. T& E! j9 G; O# u
{
: E4 }! O% B# |2 q; Y" G
if (upp_buffer_a
!= upp_buffer_b
)
P% ^ A$ s- g% I6 Y
{
0 m; Z3 b* A( U5 y2 U) D
upp_error_count++;
8 ]1 m, f; |7 `1 u: M. r
}
/ m" q# M2 Y- p0 k" P. A
}
- d4 k% r0 G9 @
}
Q V- O6 y" e( _) E0 W
$ T8 _$ A9 ?* S/ v2 U' C2 N
/* 报告通信结果*/
) ?5 H. U) J( n: d* h, `! k* W
if(upp_error_count != 0)
9 _2 D: M b0 `" H
UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 g6 g5 c. ?: ~; p2 _0 Q8 W
else
% b& J+ x/ ] ]2 K: b' j
UARTPuts("uPP transfers complete!\n",-2);
: P8 N$ b; u+ R8 j" l2 s% [3 |
6 L& g5 J! l9 `, J* v) W: g4 l
UARTPuts("Do you want to print all the data?(y/n) ",-2);
) \4 `% W- Y8 V0 X& V
UARTGets(ch,2);
! ]5 o+ Q6 n" O" i; h; |6 r
UARTPuts("\n", -2);
' O5 t7 w9 N# x1 P4 Q# x% H \
( h) K$ |& ?+ j0 ^+ u7 O
if(ch[0] == 'y')
$ O+ \8 U( ?& M4 @ v; k
{
; P; ?$ {! @0 J) c7 y6 x6 s
/*打印全部读到的数据*/
1 r* {2 t: q* f8 E! {7 K
for(i=0; i<upp_frame_size; )
% M3 B9 F6 o$ d- K6 M$ v. C
{
& S2 {6 Q/ X% |. J6 ^, T* Q B. y
for(j=0; j<5; j++)
0 v( s4 J1 y4 Q+ @& w4 l
{
! j% m \( J$ C% G! O9 H ?
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
+ y+ o5 @( Z: ^8 r* y/ X) G7 `
i++;
3 _; V# `2 o( |3 l8 p
//if(i >= 4096)
" n: X% i- V I- h& |. b
// break;
* x4 @ p% o5 P* g, o
2 }2 g8 q$ F3 u
}
( C; h" Y* }9 W5 G1 c
UARTPuts("\n",-2);
$ Y2 f" L/ x: ]. Z0 }
}
c# {4 k- K9 c- K6 X* R
}
' v$ l' Y- r, j# v9 ^3 x `
2 F! M$ }# ?2 E ?' ?- m
}
+ ?. V6 z( E$ \) W8 ^
% d" }' R4 r# O6 c- C
1 S9 J# `% Y# a* y, d
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
- U7 X$ Z2 \4 w) m8 u
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" D4 _' r/ t- Q6 p% e6 e8 @2 t
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4