嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ c- M; t8 Z0 g# L* y2 h* u) W5 K
Void UPP_TASK(Void)
( X8 ~& I3 y7 i( \! P
{
) B2 y' U9 N' z+ f* X) }
% ~0 z9 M$ _4 z' k
int i,j,k,target_int_count=2;
# s8 x% _' n! f( O5 ]4 n* K2 c" f
char ch[2];
" m/ }+ C" k: U" H: W% ?: f6 O$ o
/ p' p7 t1 R' u* d& z; M2 ^
( p& T, c5 H: ^2 j
2 u. w3 D) a% T3 q' M
upp_interrupt_count = 0;
, _; C( Z9 A! T
upp_error_count = 0;
& F7 ~3 d' k/ P2 ~% f
5 e' x* [1 p: m# p2 z. b8 ]7 u
UARTPuts("\tResetting uPP buffers...\r\n",-2);
4 {. N5 I( Q( w- C3 J1 m+ a
// Initialize data buffers
/ t0 b, S$ T5 R( L; b% W
for (i = 0; i < upp_frame_size; i++)
: ^" Q s5 s1 v* u, w
{
+ X0 w# T& U; I* Q/ V* n; n
upp_buffer_b
=i;
. _+ R- [2 ~* z- d: a6 E: L, ]# r) w
upp_buffer_a
= 0xDEAD;
5 z, @" x' }; F
}
B/ p* x1 m0 N) k; I3 p* B
2 l8 Q* L$ U! a7 X
//for(i=0;i<1024;i++)
) i1 B' M7 x1 s, F# P a
// temp
=0;
0 c) }- x: x3 I4 |
! o7 a' R4 {, X6 ?2 G! D$ C6 K
//UPPReset();
6 l, g' b9 B) w l. V7 P
/*启动UPP DMA传输*/
9 [8 q( z; @2 o- z5 R
UARTPuts("upp_prog_dma_i\n",-2);
4 y+ b* h; L5 [4 @" f
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
8 _% H7 U- o- q: J3 Q! r
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
{# |. _# f' a! K" t8 @4 ?; Y7 t
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
* U4 G( u9 T6 j& [2 B
% Z* Z, Y% ?4 \: J" w% E
UARTPuts("upp_prog_dma_i\n",-2);
+ j; e# {2 l e- [+ q7 M
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
s7 x. T& @, T
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% u, s, s- N2 G
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 z; T- x8 [; x1 u
' b4 @4 K0 H: J2 ?0 D: d" K
/*等待UPP传输完毕*/
" \% ?9 {5 W& m4 D5 _
//i=0;
5 V; |0 Q6 a. E4 b: [/ w
//j=0;
- X6 T% ?% L4 W6 C, x+ d
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* H# T- m, J, g" u0 S2 D" N
{
! ?9 X) _& J3 |( }9 M
/* 测试UPP传输的同时操作普通DDR数据
' B0 f# h2 _1 N9 X. T
temp
=i;
& R" W# K8 U0 q8 I! b" z( [
i++;
$ \8 d# h* x( n! l6 J
if(i==1024)
; c6 v9 s# i# M6 Z! t6 i! E
{
' R) B( B& s" {" H/ P+ b( [: x
i=0;
8 i& J) d. a; O) f7 r
j++;
2 b" Q5 Q- B0 d
}
6 [1 ^+ |! g9 g
*/
: _- ]3 W: h, z1 W8 f
) e$ \2 C) Z! B! Z+ J$ N
asm(" nop");
) \0 ?# {( l9 B' q' l
1 B7 \- r+ h: h. k
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- |( Q" f, s' k# c; g; S
}
0 A5 x/ T+ U; U2 H! M
& W3 g- C- Y8 A$ ~* K
/*检查UPP传输的数据是否正确 (loopback modes only)*/
1 n0 r3 F1 W, d, p/ S
//UARTprintf( "i=%d\n",i);
. }- e( s& w- ^7 w. i
//UARTprintf( "j=%d\n",j);
" ^# V4 ?4 g# g) g, N$ T2 p \
UARTPuts("Data mismatch in buffers.\n",-2);
7 ?4 W. b( }. q( t7 Q
if (upp_interrupt_count == 2 && upp_error_count == 0)
! }3 w/ N0 c% V6 j5 a9 j1 Y+ i
{
; f0 g* }) z$ [* j% w
for (i = 0; i<upp_frame_size; i++)
! V( v+ ^$ \+ C
{
8 `3 m' a* r- r. K; q6 V
if (upp_buffer_a
!= upp_buffer_b
)
5 A, U, T5 p9 S+ U" w! P
{
, M* j) Y5 ]+ |% a+ X4 J4 v
upp_error_count++;
3 t$ p! q# D3 r: `, c
}
$ @5 T2 V3 H( o
}
* q' X8 S$ n& y$ A* u( Z
}
1 t( T% v% G- I' P" D
9 a5 X! M& |9 I, f# K
/* 报告通信结果*/
Z" u5 T& v4 y2 M0 c. v4 d, {
if(upp_error_count != 0)
0 a+ r- q; s& } O
UARTprintf( "upp_error_count=%d\n",upp_error_count);
* M! o4 w- F7 k6 h
else
6 c, G) ]1 a% H- G) w+ Q9 u$ r9 p
UARTPuts("uPP transfers complete!\n",-2);
3 k+ W: i( Q/ U% i! l
5 Z% b) t0 f$ a$ a' d
UARTPuts("Do you want to print all the data?(y/n) ",-2);
5 }2 d5 T! N3 M6 _3 s ^* Z
UARTGets(ch,2);
( c1 _7 |# N9 D7 ~' {
UARTPuts("\n", -2);
7 M& O+ ]# j' T( ?$ \, Y% m
2 m. ^6 h8 n5 G
if(ch[0] == 'y')
0 x1 u' {5 q- m- G& E" D
{
) W' g2 z9 V N' i2 v
/*打印全部读到的数据*/
* b! H0 O" f- C, Q4 J
for(i=0; i<upp_frame_size; )
@; B; P7 U4 M
{
7 Q0 Z3 q2 G$ c* [* j ]. p
for(j=0; j<5; j++)
2 r) _0 F% H2 \: \# u0 a
{
3 n0 G4 }; ] R, v: F: H
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
" P: s* @4 L% q m; {' b/ L
i++;
' `) m$ K B: x: c: D
//if(i >= 4096)
- B' r, [0 C/ I3 n6 |( }, U
// break;
u; n+ _$ `) O5 |
" _( n8 m& r! h: ]
}
9 J1 i4 ]" d; I* i
UARTPuts("\n",-2);
* ?* g% U- h' E# h: `0 l, Q \5 u
}
& d$ c3 Q- m6 h
}
' M, f# K. @* x/ m
' q# o( y# I% M/ ^9 N
}
$ T3 ~5 U9 F' u% j1 h
% g/ m, l E; ]4 `* o
: N; [5 J$ s6 M, ]0 v7 p5 l
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* {# H$ P- A8 I2 Q' _
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) a1 d* S' T+ l( n! R+ F
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4