嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
5 z4 T2 G& n6 H: J a# e
Void UPP_TASK(Void)
/ g* F/ A" A0 o( b$ c
{
% p4 H" D/ K6 T# i2 V
/ S/ c; R" d8 s/ B# O, G# ^
int i,j,k,target_int_count=2;
/ @1 P+ e0 j) K% B
char ch[2];
2 E9 @% n# z# H2 _7 u: ^
5 {& S# P% _# _' q ]8 g: c; q5 O. ]
; z/ n: n1 g, c. g5 b" j5 o! j1 B
, s6 d/ V5 d7 ]0 x
upp_interrupt_count = 0;
6 ?1 @; Y# s# o7 D2 C
upp_error_count = 0;
1 u' b: E5 _' w$ u$ {1 B+ _
c! I, N# n. H7 ~" _. G
UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 G) k+ _4 z9 v( d# l
// Initialize data buffers
4 ~; f. r) h, k, T: _' D7 Q
for (i = 0; i < upp_frame_size; i++)
6 g6 {' T$ ~4 ?4 i% n9 t O5 e
{
( G% q, p5 @# E8 U: f6 C5 V# I
upp_buffer_b
=i;
, C( ~" K! P0 i
upp_buffer_a
= 0xDEAD;
: G0 H/ T5 X3 J/ t
}
3 l7 B3 y$ R/ y
) F+ j* E5 ]6 H+ Q1 G9 ~5 E
//for(i=0;i<1024;i++)
1 X. y A* T/ P( q( P# f O/ n
// temp
=0;
5 a! w& d9 a$ q
' M8 A- Y* \% n/ G) i) m
//UPPReset();
. Y* I) z X0 Q! Z& Z
/*启动UPP DMA传输*/
$ x$ H' U& p5 _4 R7 f
UARTPuts("upp_prog_dma_i\n",-2);
- p+ Q( _; E. X6 { p" p' l q
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
$ e1 z! P4 u, c
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, [7 i' ]2 N. y8 R. m" K. \7 v% v
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
/ v8 x, O) s J, s( n
- ~" g* }* H+ j: p
UARTPuts("upp_prog_dma_i\n",-2);
: X- P6 [7 `9 K7 }4 F; v2 T
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
3 y/ h3 D8 R% M
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( l+ }$ w4 T% J/ @* X; q
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
. [3 ~" V& N0 v7 K
9 e3 n9 B+ H, q# ^( E
/*等待UPP传输完毕*/
" T" }: [1 S; P3 d. A
//i=0;
/ q( G% f. H* ?" J) B! a) Q
//j=0;
, ^6 ~% L' H6 j0 F6 @
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
6 w, D/ H& w. z% _
{
# g! P, v6 V8 D. S
/* 测试UPP传输的同时操作普通DDR数据
2 I g( T1 j7 B, p4 C6 q3 ]
temp
=i;
0 N9 A& l( o* v! k7 W& B' M
i++;
9 _# v! s1 i% L/ m0 u# `
if(i==1024)
4 E- P* ~' s; ?9 }
{
( M% k2 C: G Q+ o, H: r
i=0;
6 U$ v' s* g& ~8 O9 y8 G! ?9 E& t4 O' F
j++;
7 H2 K5 D. E Y% w2 z8 A, D
}
" v/ _/ j6 S2 _& G4 F
*/
3 q' a) {+ s, i% H$ ^/ S. @$ a5 {
' ^ |2 I8 V! H8 M, h! C3 o
asm(" nop");
. x0 b& F1 L% M- C
0 i# \6 v4 N4 @. c+ u
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
l5 E2 f; _0 D$ X
}
5 C% J# }+ p* p% K5 G* e9 S: u1 k
' a. e6 L# N' T2 }+ S* I
/*检查UPP传输的数据是否正确 (loopback modes only)*/
9 t1 r1 X* D! j m; T# i
//UARTprintf( "i=%d\n",i);
0 J: ~5 r6 n% d; S W
//UARTprintf( "j=%d\n",j);
0 V9 q6 l8 Z+ ^( n# K$ S ~
UARTPuts("Data mismatch in buffers.\n",-2);
$ n) J* i9 l* I( ^. I! q- R
if (upp_interrupt_count == 2 && upp_error_count == 0)
o2 s8 q) F5 N+ @& b4 s6 |/ x
{
1 m3 c$ ?' N( ^; y2 k
for (i = 0; i<upp_frame_size; i++)
% a3 R9 [% L( z+ z5 A
{
$ T' u2 k2 [- z3 L, s4 |
if (upp_buffer_a
!= upp_buffer_b
)
8 _! G7 d$ H# }, ?
{
: s3 x$ Z" {+ o. H8 L# n
upp_error_count++;
* H& r3 c& W) B
}
# O9 Q+ b. i) u g& t7 u: ^( ?( W
}
# N+ }8 y% x( K
}
' T( ?% _$ V+ q8 g) B8 n
% m9 Z' |. b) y
/* 报告通信结果*/
+ \. q9 S% D- j$ Q& R
if(upp_error_count != 0)
0 y+ [3 U) P1 v) P2 O
UARTprintf( "upp_error_count=%d\n",upp_error_count);
3 ]- H5 l$ A! r/ [
else
7 R' c. C: C4 ]4 C
UARTPuts("uPP transfers complete!\n",-2);
, n: l8 g, u( a4 |5 |
+ u# c* S2 e- ?: N# Z
UARTPuts("Do you want to print all the data?(y/n) ",-2);
( E5 U" O8 A$ S2 O/ [/ n0 |
UARTGets(ch,2);
; M: T% q( ?2 a$ F- ^+ y% V
UARTPuts("\n", -2);
3 c) g! Q' A0 p2 G q7 P' f) j
" S! ]) t3 h- K; g/ M
if(ch[0] == 'y')
, J% U8 J4 E0 _- A1 Y. r E
{
; `( J9 C3 q# M( |. [/ D9 r
/*打印全部读到的数据*/
. p+ i! }8 w3 T: a- B* F* x4 ^2 l
for(i=0; i<upp_frame_size; )
& O1 y6 ~* H' _6 B8 Q3 a1 `
{
1 M0 g! |, j# X; d' I
for(j=0; j<5; j++)
( O: X& P: ?# Z% @+ F1 J' U
{
8 @ ~1 c5 M$ P& S
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
5 m* F; z2 R+ |$ {$ q! t
i++;
" G% q1 B. ]" ^: I$ ?
//if(i >= 4096)
; S+ z8 Y& v- W" j
// break;
5 z. _1 A3 j1 ~- n1 e
- F, U H* [, }# V
}
4 w$ X8 f5 W% O5 [0 ]- _- q/ g5 k
UARTPuts("\n",-2);
) D3 }2 g$ S3 _. j( }/ T1 }
}
5 E" } T, I% w4 ]: L( N G ~" w
}
( D. R6 e5 c& P/ d# d
1 _+ U: z' L- E( M
}
0 c* C3 }% z* H5 e' ~ d6 U, L
8 D' P2 w. J, W7 f1 A
3 E# R O% L# o. y/ Q: X; P
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 r0 b z7 j2 G3 J% ^" b/ @' x
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 J1 x+ U/ x# O3 V
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4