嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( \, b! i( Q7 @+ {; a8 F
Void UPP_TASK(Void)
- @( ]4 m& k" a, p, z4 ]/ ^
{
2 l. y% M- ?% ^- n5 ?& C9 @8 g+ L
0 f4 c, `7 S) r2 I" }5 Q
int i,j,k,target_int_count=2;
6 k- A% W# A3 w& y3 T( I2 x
char ch[2];
# P+ I# n0 Z! P$ h' @$ T. u- J( p& ^
) Q+ q% n: ?! D- y- d1 m" u
1 H- s! K: b( Y/ O6 B# m
! P9 i* p S9 N; b
upp_interrupt_count = 0;
, L$ S. R h- M( R
upp_error_count = 0;
( b/ ]9 T7 X& A+ N
. N' w& D3 K$ d+ `& l- {. P5 b }$ I
UARTPuts("\tResetting uPP buffers...\r\n",-2);
# J0 p; C( C' B4 q
// Initialize data buffers
+ |3 |$ o# |2 j! ~) A5 o
for (i = 0; i < upp_frame_size; i++)
# A+ p# O' B: p
{
, B3 V5 c% b2 Q4 Y) l) c
upp_buffer_b
=i;
$ b7 V4 {1 \) E% v
upp_buffer_a
= 0xDEAD;
* X, H% ?- g. D8 m5 T
}
) h4 c9 F7 W: t" |
: V: U. y/ c$ @% m& d, d6 n- A
//for(i=0;i<1024;i++)
* v3 c& F4 \/ S4 t. }
// temp
=0;
4 v0 c2 N& H0 q% R- a
, G) O( v) f, P5 I0 L# u$ E; L% {
//UPPReset();
) S' Y: |/ J& ?0 C. g
/*启动UPP DMA传输*/
6 ]; _, U. @0 Z) Z
UARTPuts("upp_prog_dma_i\n",-2);
8 F9 L: B& i( e; n0 s6 y
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 ~/ L; e* P$ s
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 U, M% {3 j& m2 G. H: ^6 B5 l
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
* \$ g8 _; @7 z
* O4 y3 V" z& @
UARTPuts("upp_prog_dma_i\n",-2);
" j) K# F; V" I6 Y* S; z: c
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
: z1 L0 G0 S3 }# I% K) r! u3 X+ c
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) o) M7 y+ I7 j6 @7 m; T. G
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 k L8 ~* C3 i% A5 K- M
5 o: H( Y" g1 Y3 M! U' D5 \/ _
/*等待UPP传输完毕*/
( l& i+ K8 `% c0 V, C, u# j: ^
//i=0;
9 T1 u# i& Z4 f
//j=0;
; j% u% g' A1 N0 }/ _% C4 H
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 s/ {; k5 j4 J
{
7 t" D8 [6 r' l; r) o' ~4 W& s* O4 i
/* 测试UPP传输的同时操作普通DDR数据
D- |5 h: G: P( \0 }9 Z! \
temp
=i;
0 A( k7 B8 L$ y0 k
i++;
F! c5 v- Z7 t5 `
if(i==1024)
$ a+ e" g8 ~- [9 M: B; T
{
- S# X/ n3 f9 P
i=0;
8 E3 ^$ i7 U' N. L
j++;
- N( S* i. I. V& Q4 q' |
}
& b! I+ ?8 g l; }% |3 w
*/
1 E/ ~, S. }1 F4 s* K
- m8 r) H+ f2 E; _6 P; _$ ~
asm(" nop");
4 p% R: A2 I2 g6 @3 |
5 [2 d! E1 R- G; b/ v" T. y
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 O5 `1 g+ Z2 v( R4 _
}
- m: C0 U: S; b! E' I
2 B9 @) \- P% O$ [9 p8 {& G$ S
/*检查UPP传输的数据是否正确 (loopback modes only)*/
$ f' I5 i1 r+ q( f5 F9 J* @8 z
//UARTprintf( "i=%d\n",i);
4 B, D+ w, J. E) D7 Y" e
//UARTprintf( "j=%d\n",j);
& ?) i8 o& O- P& N g. G
UARTPuts("Data mismatch in buffers.\n",-2);
+ @: n F2 i1 X ]. \
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 {- S) }6 W) `, p' ^5 l
{
: v- t, I, {" L1 X' S
for (i = 0; i<upp_frame_size; i++)
' [; t: k4 Q ?+ o& t2 a4 [
{
2 a0 W# I6 r; N) U& x! u
if (upp_buffer_a
!= upp_buffer_b
)
4 Q: i7 E" l/ p3 [4 b4 L/ w4 K
{
+ Q8 g. ~, o: C; u
upp_error_count++;
0 Z) @- m! n9 y1 J r/ U8 n$ F6 T( x
}
6 I7 \4 v. _' k
}
. f7 J% O9 B; x8 W6 o* }
}
$ g$ u+ T/ i. q% r# }
4 R5 y! p/ Q* }! ~- d8 \
/* 报告通信结果*/
9 J8 O4 b( O# k
if(upp_error_count != 0)
2 j$ B9 _0 M M1 g6 [; L: Z7 N4 j+ ]
UARTprintf( "upp_error_count=%d\n",upp_error_count);
# O% D& P8 `% ~; l u
else
3 @( x# ]/ r6 n2 h) U
UARTPuts("uPP transfers complete!\n",-2);
% f4 Q; t. h+ d8 S
/ u2 [# ~$ o' K: c7 U5 l U
UARTPuts("Do you want to print all the data?(y/n) ",-2);
* @" U/ [9 n2 C4 x q4 n1 B
UARTGets(ch,2);
, f$ E- n8 Y) F4 c/ p: I( |
UARTPuts("\n", -2);
2 R$ j. S! W! x: _; x9 e) h% Y
8 j/ b, H% e+ H! G4 E
if(ch[0] == 'y')
6 C( N; \" S" I5 n' Q
{
2 R& J0 C; y! R0 X/ ~
/*打印全部读到的数据*/
4 G* C% m% Q# K
for(i=0; i<upp_frame_size; )
& I% B0 v! n6 O, w4 s- Z. z
{
2 d0 E' w: r J2 U) U3 X
for(j=0; j<5; j++)
6 ?3 K7 N* ]9 l+ F }1 }
{
1 h! [& x0 M+ N: c, b
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
- e; l7 H9 X1 W! T" Z& ~0 i& c
i++;
; @' E! J2 ~8 E7 b# h
//if(i >= 4096)
, i" r- o$ J4 g; K' v1 {4 b
// break;
" j- E! N8 ~3 \1 k6 {
7 @4 N2 w: H& i( H% Y+ F) ^ D* @: O
}
3 }4 r* ^# G4 M# O3 u2 l1 X# F
UARTPuts("\n",-2);
; N1 q" V/ _: I6 D; Z8 G' K" S; P3 |
}
" t1 a6 y5 ^! A. B; U
}
9 E( h' p, s6 Z( ^
$ R3 C$ n! Q+ M3 v, E* }
}
. ]. @- a* w7 f; |$ d4 P# `
/ i# V6 D7 r% H7 h3 U; e
% {, e( n1 h+ ?: B. ?# D
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
4 _3 J# Z/ C/ N. O- R: O
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( ^: W: { T6 e2 K
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4