嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
8 t! }. L- F7 L7 {& i
Void UPP_TASK(Void)
5 p8 e1 j* G2 u5 J0 z( n
{
! A% ^1 M" N. A* t
- T4 S* _( [% g ? j
int i,j,k,target_int_count=2;
9 T: {* f4 ^6 E) _
char ch[2];
5 @9 [& ?0 q% `9 u l5 D+ {
& x8 D3 a6 m) x- s: t$ g
" E- K M7 O8 [5 W1 T
- X: I0 [# Q0 ?" m4 m4 P; g0 A' z" M
upp_interrupt_count = 0;
% s8 _! q3 k5 G2 [
upp_error_count = 0;
$ h$ r! I8 w0 U W( x8 o# _
8 X/ x$ m9 f3 k$ o1 ?( S
UARTPuts("\tResetting uPP buffers...\r\n",-2);
' g3 ^7 H: N( r; c
// Initialize data buffers
( g( }. e5 p+ [# o& R
for (i = 0; i < upp_frame_size; i++)
" f& u9 K" `' ?3 m, ^) u
{
- ~4 O. j" m' N0 ?# n6 e/ X
upp_buffer_b
=i;
3 Y+ G5 }' B& c. }# ^* o: G% _
upp_buffer_a
= 0xDEAD;
! R- T- ^& }9 T/ l
}
; ] N/ M0 R' I
( R6 [/ G2 Z- A
//for(i=0;i<1024;i++)
: W4 @. X, h: I% {
// temp
=0;
( J5 Y0 Q) ^" Z2 i5 U" L5 P5 H
9 I8 m1 x7 _0 @1 Y+ |2 X! o- r! K
//UPPReset();
/ J0 L8 ?+ H: u) F. ]& w u% b1 y# q
/*启动UPP DMA传输*/
$ Y+ i& A, Z' e
UARTPuts("upp_prog_dma_i\n",-2);
2 a+ G9 f$ J2 H: ]$ v5 ]! S
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
$ v0 t" y& F# E+ u) z0 a
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& s7 E; p$ J. ?! Z4 A ?3 S
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
# e$ C# f3 s. L
4 _! {( L% ^- P3 v }
UARTPuts("upp_prog_dma_i\n",-2);
1 z+ W$ B: G6 _8 ~9 C( l
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. `3 X0 y. ?0 n( Q# B$ e* u
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; S: F" S' P; d$ X5 S' g
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
. j/ j. @1 H9 J/ s) }% J
. I% j' p5 t" w! S8 }
/*等待UPP传输完毕*/
0 h. ^% l. D K5 v+ m5 ~" i
//i=0;
5 s( X# p, e0 g7 W. w' P( P- X
//j=0;
- N3 w4 G+ L& y
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
" G( H8 X# E1 j: _& j
{
( a' g6 _1 Q7 ?+ A* r' J3 E! l
/* 测试UPP传输的同时操作普通DDR数据
4 J7 U% o0 e6 j1 A6 B
temp
=i;
/ i, A0 O3 p/ T) T& c# ?% C0 O% Y
i++;
/ \) T3 V$ ^/ c! ~& }1 n
if(i==1024)
2 h8 v) t1 P6 ] S2 @& m
{
% F1 X8 s8 I, y5 u5 k: s
i=0;
/ b, W# y5 x l6 u$ Y* `0 o
j++;
) O2 j: L7 P( }8 F5 d, h, J
}
5 j( \' R) k3 G% S- m4 q. s3 E% H, ~
*/
/ K& k2 _4 m! \* K! e
4 J) V( n* _& F3 l# r
asm(" nop");
4 W, J$ P0 l9 Q$ t8 w7 E Y
5 P* J7 c( @$ i+ j# O
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) p9 I$ X0 ?: C2 X! ] @; N
}
B$ H; B2 u- j: q4 F! N
9 u% ^3 d. S# Q: p+ g
/*检查UPP传输的数据是否正确 (loopback modes only)*/
9 S+ N; V7 |3 x0 r \! v
//UARTprintf( "i=%d\n",i);
0 @3 j4 m, m" Y9 w5 M2 q
//UARTprintf( "j=%d\n",j);
- z, z t8 S7 U$ d' ^, {
UARTPuts("Data mismatch in buffers.\n",-2);
3 L4 o& J8 U+ W, F
if (upp_interrupt_count == 2 && upp_error_count == 0)
6 O5 t2 [' D" y; e) e
{
4 ?0 F, n$ a7 ^
for (i = 0; i<upp_frame_size; i++)
! x; z# X7 _' g
{
0 S& J+ K9 W; Y1 |, Y% C, m( W- e% ], Q
if (upp_buffer_a
!= upp_buffer_b
)
+ h# j& k4 }- D0 L% m
{
) q% u, J5 A: m7 |) i! {) j4 @4 Q
upp_error_count++;
2 d+ `( [$ B( @2 G
}
. l! r0 L$ k7 |# A; c' v
}
9 h, j" V4 y- U
}
) A7 E: k+ s ^5 Q: S5 C4 N# m
! B6 K1 Z7 ~: e1 ^1 \" Z H" ~) a
/* 报告通信结果*/
: Z/ n5 u# k; a% \# O
if(upp_error_count != 0)
' j/ K1 I5 q4 z" H: G* O
UARTprintf( "upp_error_count=%d\n",upp_error_count);
d' d7 C/ Z# l/ I% Q8 ^
else
* S5 ]6 b5 i" \$ z1 D6 D8 \6 d
UARTPuts("uPP transfers complete!\n",-2);
9 \2 r% H' h; \6 O3 G- t7 D
7 W" S9 l v o* u
UARTPuts("Do you want to print all the data?(y/n) ",-2);
" O6 [4 M9 s8 I$ w
UARTGets(ch,2);
! [7 J7 T4 n3 t" }8 z- J$ g$ z
UARTPuts("\n", -2);
0 }" A: z( [% k9 x5 b
9 J6 j' V, r: w* n8 e& y# p
if(ch[0] == 'y')
2 {, t1 v6 Z" s# N
{
/ R/ p; N) d& n! J/ E
/*打印全部读到的数据*/
1 @( x, o9 t9 q; V0 F$ ?- ^/ j* D8 U( I
for(i=0; i<upp_frame_size; )
+ B L. s$ R, |
{
$ P( T, I& g' H+ f/ P% L$ P
for(j=0; j<5; j++)
0 r9 {9 q% Q9 X: w, T1 @
{
, q( y. v0 {. V! |1 o, p2 k
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
' c3 g9 I7 W4 l3 s* [ y) y
i++;
" p9 \* n$ i, c6 l" O, ?) b; ?
//if(i >= 4096)
9 \& e2 e j. {9 Y
// break;
/ p# Y m. z4 B1 E
8 \) G& H% m- n E* D# l
}
7 k0 w; k: W" Q' V3 | J
UARTPuts("\n",-2);
: o) A, c& h6 y. Z
}
2 [" q0 n$ D- z0 G
}
+ H" o; V- m0 v A: a8 O: M+ e' P
. A! a+ M4 X7 M, l" M G
}
$ s9 _( S( d/ ]+ d. e
1 x4 C% v3 {( Y/ {- s
, X& s7 _) Y& ^5 W3 S+ i# _, p
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 m9 m* b8 j6 O4 k$ `1 o5 ~1 w
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' n' n6 n l7 I9 A: C9 h' x2 d
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4