嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' d" R3 |# f, O! g* c4 T% T- M
Void UPP_TASK(Void)
# Y! h3 }" G' d! S& l
{
i3 W& p. e- Y* H: z' M: e
: N+ B; I! f& t
int i,j,k,target_int_count=2;
' e7 f2 w1 u2 o- c) q$ p
char ch[2];
e% a5 |: x* g! k4 [8 |
1 ]: p! L- v+ s, {! h/ |
* A; N# M% v1 I
0 l- e* i: H1 O3 D
upp_interrupt_count = 0;
" ?7 u! D. H* ^3 g% V
upp_error_count = 0;
1 X7 y9 s6 k* F6 t3 c+ F3 `0 {
- H" b! n$ ^- S Q. j8 d8 S
UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 g! Q, t* b3 S8 P/ k$ w8 n
// Initialize data buffers
6 {5 P2 F9 Y8 Q" D* O2 K1 y) K
for (i = 0; i < upp_frame_size; i++)
/ e5 }% f6 u# Z; N
{
( C& r7 C/ f2 B2 M7 V4 p! _/ u
upp_buffer_b
=i;
5 D" ^; c2 v f: o; a
upp_buffer_a
= 0xDEAD;
( E% \0 I7 F8 ^
}
9 V4 A7 ~2 X0 S/ p0 `8 I9 f
# _ d" `* _* h+ D4 K! y: L
//for(i=0;i<1024;i++)
7 ?! ^8 e8 P1 @9 B4 A
// temp
=0;
' P/ L, U) Y& J7 B/ s& I: J6 T
# Q3 k, W6 r; I6 E) ?% I& O
//UPPReset();
" S, Q; O5 J( g5 o, W( U8 L
/*启动UPP DMA传输*/
4 G: o# D' Y3 [+ d
UARTPuts("upp_prog_dma_i\n",-2);
u; ^1 o. h8 S3 l. `4 u- f* e
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# w' X9 t% d+ \& ]" r# ?3 p5 ]- U
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 X$ E* p4 Y7 p9 `0 Y0 I; x& J3 n
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 ]1 }6 u9 I- z4 T/ y
8 ]. j4 w0 W1 v3 D2 F+ T& U
UARTPuts("upp_prog_dma_i\n",-2);
6 F! _& L. {) c8 H: P0 Y% d5 g
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
% m; }- R9 Y5 d. S- Z- u
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 r. k* [- k6 a" _, v; Y
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
- U9 n' n* Z5 O3 R
5 }; i7 p5 I, S" F3 E& X) A4 e
/*等待UPP传输完毕*/
/ \6 V4 w: i5 F4 X& }. f
//i=0;
/ I3 N) W+ i e$ z
//j=0;
* ~& P" D& v5 T$ |: w% u; l
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! h- u% e# Q' B, |- ~' ]1 w
{
9 T; |$ @4 |- }9 W) v! Y
/* 测试UPP传输的同时操作普通DDR数据
" X& w) I5 C% g5 [; g, @& e% x1 k" W
temp
=i;
9 I% c# F2 |1 D. h6 p. O
i++;
9 x' r, P" H$ g5 K# U" l8 k1 L" h
if(i==1024)
6 b0 K3 N( |% o
{
- C' o* z; z) i6 N7 k
i=0;
/ q, m8 t+ L! S5 h5 H8 I. ^! F1 x
j++;
! U! p2 @# B7 a7 ?2 M/ \
}
& |! v$ L/ U4 I% N1 Y
*/
4 h9 a' O- @( U; q& X$ g5 c% K
7 ~% p5 K7 R, v8 t9 ~: t' A
asm(" nop");
/ w, |* { z7 q4 l* K/ n2 z4 y) I
# k4 |- t9 J! J1 ~. e) V9 K
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 `! s3 Z( G2 E6 C7 i
}
/ f$ n$ c8 x% J+ i ?( s
# p/ q1 n7 d3 m/ S6 {: \
/*检查UPP传输的数据是否正确 (loopback modes only)*/
* c4 E6 @- W/ {* Z, H
//UARTprintf( "i=%d\n",i);
* p S6 ^* W" W: O( [! f7 s G6 A4 g: ~
//UARTprintf( "j=%d\n",j);
6 r0 H$ E, E0 n: {. Z
UARTPuts("Data mismatch in buffers.\n",-2);
2 W% r& u, s& d3 y" r. ?" d
if (upp_interrupt_count == 2 && upp_error_count == 0)
4 z2 r9 [: s* ~8 c
{
$ z1 w N* l& N; k* r* z
for (i = 0; i<upp_frame_size; i++)
( G7 f& w0 p: D9 ~7 O5 b3 k
{
4 G% S5 ?: G5 |
if (upp_buffer_a
!= upp_buffer_b
)
( e8 r1 z' d/ t6 o1 x) @
{
, u1 O7 y' Y6 S/ q6 H' B
upp_error_count++;
: F) m/ b5 v3 e; Y3 U
}
& j: V3 T$ }- |1 I" i
}
7 R* T4 x. Y, n. } ]$ K8 o. b
}
8 L, C% W9 A1 t' d; X# ~
, O# ?" h+ S4 ]( M& ~( Q. E
/* 报告通信结果*/
; U5 Q) |" \$ p# h/ l+ b6 p; l
if(upp_error_count != 0)
' i( ]- u* x9 r* m$ O# `
UARTprintf( "upp_error_count=%d\n",upp_error_count);
! O' o# \9 k6 n5 }& T8 R
else
' E5 e L4 x1 o3 c* P
UARTPuts("uPP transfers complete!\n",-2);
2 x. Q- j5 X1 h- \2 u5 S
5 a3 o S9 \/ b# R/ T0 D5 L* W
UARTPuts("Do you want to print all the data?(y/n) ",-2);
1 _& L5 k0 `- M1 o0 N+ h
UARTGets(ch,2);
" g! k! o) G' v/ ?( B& w# x
UARTPuts("\n", -2);
7 {6 h" z6 q; L/ r2 ^4 a3 d! `
2 f' i: H. H& u% W; W
if(ch[0] == 'y')
3 b9 }5 m4 p. H. w
{
l5 I0 k, |" ]3 A3 p
/*打印全部读到的数据*/
+ X6 Q1 @# n0 q& @4 Z( o# ~- \
for(i=0; i<upp_frame_size; )
% ?% m D* {" Q# Q+ G
{
4 L1 `, X- u4 x% ^, {9 y& l j+ y
for(j=0; j<5; j++)
( q: g/ g9 e! o7 e
{
& {% b- ~) d) Y. Q( [, u& Q% w' c3 U
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
. I+ i) _" K8 R1 F, ]
i++;
0 e( `/ p0 D {
//if(i >= 4096)
" s3 H+ {9 f! C1 o5 o% c* o- [) v
// break;
* L! _9 J8 F' j) D" g9 @; B
5 B! Y! n- C6 s( _
}
/ ]/ @- \4 B% \# P
UARTPuts("\n",-2);
# \' n% A9 P: C
}
1 P5 f; p- Z2 T3 o5 Y: A0 \
}
" n1 C" } s& t. k1 E# k' L
, W- v& A5 n- y: b
}
( J0 v' A9 d6 v0 h
' a* V9 h0 [, ^9 Y6 x$ B
' `% c8 W& N+ i4 k6 [/ k
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. l8 ]2 a- g, \/ E
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 t0 G/ ? o$ }
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4