嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( B; k) R' s j+ `2 d' Y5 Y
Void UPP_TASK(Void)
Z+ ]' E' } o0 ?0 _- ] X2 x
{
5 h4 t$ v" q. B# z$ N/ F7 @5 F
+ |9 h0 O8 U O, a9 J' J1 V
int i,j,k,target_int_count=2;
# d$ O& f: W( R; v
char ch[2];
& U; d% l8 r# S8 ?- }$ y2 a; O0 x
& m: y1 X5 q( n% H
, S- o; G# J* Q+ ?9 Z9 e
& E# ?2 x$ x* C3 ]
upp_interrupt_count = 0;
; v- U$ I9 d c1 X4 I
upp_error_count = 0;
/ G/ H" E/ `$ l+ b. z
3 |) Y- N" m) @, K% h
UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 B$ ]1 p! _9 G7 E( w. l# Q
// Initialize data buffers
' K0 K0 V0 ^$ a$ i3 d
for (i = 0; i < upp_frame_size; i++)
. C* w( V8 C8 [
{
- P+ J3 N) }8 [& X! `4 L! ~
upp_buffer_b
=i;
5 y7 M: k3 b; Z1 M+ ]: K
upp_buffer_a
= 0xDEAD;
+ L" B9 V2 x$ m& F8 Y- Q( a8 ]1 I
}
9 M. `6 j" n& l9 I# [
0 ~/ S2 Q; _8 t+ {
//for(i=0;i<1024;i++)
. M* z: P2 V" }& C7 T
// temp
=0;
d, a6 M) ~- d$ k- G& X! V
' r- }1 Y$ ]3 f) t( V+ c
//UPPReset();
& N& T1 V* D7 n. S
/*启动UPP DMA传输*/
0 V6 R( ?8 ?: y" R
UARTPuts("upp_prog_dma_i\n",-2);
! U. v- e. n. o
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
1 D5 O. W# x" O- L
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 S# n/ E/ u( `# H
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ P4 c% `. B( [
9 F$ @3 m) Q L7 R. A0 @) o( p
UARTPuts("upp_prog_dma_i\n",-2);
* y' X4 p& b& V+ M
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
% ^+ r' ]/ N# l8 O- C
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" l" N5 N' \8 a0 v6 n0 i2 ^
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# r) f. X# w. @' u9 y: N
& a. q8 C( d' i
/*等待UPP传输完毕*/
! u/ p$ o/ o5 r6 n9 d
//i=0;
& P' b# N6 Q- I6 O/ G, Q5 z/ V
//j=0;
6 ~( E, E9 @! B. O1 z
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( r& t( k0 F5 b8 r: i7 H' {1 O) L
{
& Q7 P7 b" K; u5 c
/* 测试UPP传输的同时操作普通DDR数据
3 n5 F, G8 I4 Y( S& {
temp
=i;
}" ^% @' d3 h {
i++;
. y6 j# \2 q" z- _# s/ M
if(i==1024)
a; m0 C+ E- X4 s" u% s
{
4 t& [# L5 D2 |4 e6 M
i=0;
* D. L& o, @! I( j( k
j++;
4 m& o3 \& z" ?! |& a7 H% T9 ]! v
}
$ @9 c' l1 g) l8 e; ?
*/
0 _/ A6 \+ z4 ]
) F, L7 G* S7 b9 q" _% [: R
asm(" nop");
& Q* p& T8 N. x! ]; Y
* r9 [% N6 g% x& ]0 L: [7 ?
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
% @, R: H6 }/ `3 ^' p! `+ E$ ^
}
8 e- m7 d, V3 }3 u# l$ Q' d0 x
2 `. J$ C8 D+ e l7 e4 \; {% l4 L( P
/*检查UPP传输的数据是否正确 (loopback modes only)*/
( j! \# p2 Y9 g: U# U
//UARTprintf( "i=%d\n",i);
$ E" x; w2 }$ ~% |5 n8 y
//UARTprintf( "j=%d\n",j);
4 M# E$ j' c" _- V a0 a
UARTPuts("Data mismatch in buffers.\n",-2);
$ s Q) X5 F) B% [( R: r
if (upp_interrupt_count == 2 && upp_error_count == 0)
9 A0 m2 J$ J, S1 q2 a. n F( s0 c7 B
{
( H5 o* ]' q3 F) q/ c
for (i = 0; i<upp_frame_size; i++)
" o g. I" j ^, C1 E3 p+ P I; p
{
4 r! D' B: K4 M) f$ t/ z) Q3 p: B$ R. k6 B
if (upp_buffer_a
!= upp_buffer_b
)
+ f( k% Z% {* n
{
+ [ C% b' d, x0 g
upp_error_count++;
+ W8 D. r1 N/ J0 r
}
: {+ G7 h; p. @7 T; m: j6 L; ^1 Y/ }
}
: r; T% Y8 O( P% u2 u
}
5 d$ ^; T& |( `) e% T6 W
7 Y* s& X- {4 ^- Y! v
/* 报告通信结果*/
1 h7 J7 r" w: ?% O# g/ I
if(upp_error_count != 0)
' N2 O( q5 D7 k. e6 F: f: J
UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 k& Q/ d6 c) p8 t! z* N$ p) p# l
else
* U: Q4 v) ?* q* S
UARTPuts("uPP transfers complete!\n",-2);
3 S% U: X* b1 e' a! ^8 U: a
N8 W/ O4 Z* ~
UARTPuts("Do you want to print all the data?(y/n) ",-2);
+ @1 x( \9 b4 D2 l
UARTGets(ch,2);
& C* V* O% H3 l. d/ X; I
UARTPuts("\n", -2);
) S" n5 o6 N% _4 ]# g; j* v) I
7 g: x( A' W/ h1 D( C( P1 V! S
if(ch[0] == 'y')
% ]. L7 j7 B- \% V) \9 w
{
# r0 m! i, z" s: O* E: g1 Q
/*打印全部读到的数据*/
) Y! g! b8 l& v ?, |" s. T
for(i=0; i<upp_frame_size; )
# _4 n! D3 j- E2 l0 d6 w
{
3 ~* ~" e& P [& \* |
for(j=0; j<5; j++)
; O$ u _- ~5 h/ j& N& W$ d; h
{
* s' Z, Q9 ]: L0 c
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
. h: B9 I0 e/ p: F+ P* i
i++;
1 S/ L- d5 Y' y9 z8 t
//if(i >= 4096)
# n; ?1 ?# }2 ^8 @) X
// break;
5 e ?& B+ x K* g5 T: B) F
1 P8 ^ F2 P, N9 G+ U, |
}
; U1 m. a4 m. G9 j
UARTPuts("\n",-2);
' d5 I" A; p" \- y% m) u
}
) V* C; A6 Q- y
}
7 l9 N9 O$ \/ |( v; @; G
6 n% n: l! j( |% h
}
" m) R5 I* J n5 J
0 ]8 ^$ n: F: `& J- {0 V9 M
7 y( O9 ?) z) {6 m3 T
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 o. f/ g, b) |- x" }& X6 W
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* R' f" n0 ?8 \) R+ e
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4