嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
) Y! Q0 d: B$ k3 W
Void UPP_TASK(Void)
; j& b3 p/ M# f. Q& Q0 i
{
5 L0 \2 V3 Z, Z! B0 c$ c4 D( M& @
# v; m2 [ k( P f" o, g- E, V
int i,j,k,target_int_count=2;
4 `) y# H; T4 ]! d) m4 w
char ch[2];
- [- p. ^* I8 H. i! j
/ i5 ?: I& O6 u3 U4 H, G& [( Y
; ?% G/ Q: [, _" ]7 u: B5 n
6 D. w: M3 Q, H( m# J4 o# A3 ?
upp_interrupt_count = 0;
( k1 f* o5 c- \- a! X. _* g- l% u; I
upp_error_count = 0;
1 B5 W4 |) `1 M+ w
. g. u0 `' |; i0 s
UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 a1 P2 h7 |! h+ [
// Initialize data buffers
0 _* O& g6 B8 I( n" p$ \
for (i = 0; i < upp_frame_size; i++)
' _3 ^8 K1 m- L$ b' e9 G* j
{
/ F3 v9 ]5 ~! \$ i7 ^
upp_buffer_b
=i;
9 f8 f" r8 @& b/ r
upp_buffer_a
= 0xDEAD;
1 x1 C5 ?3 c( i: g3 |0 N' T
}
3 d1 M, y: c8 _' R+ F
' a- B" d) K" D% _9 T& p( F* o, c5 ^, e
//for(i=0;i<1024;i++)
/ y. u6 h M0 I6 R9 K3 |/ l9 ~' t
// temp
=0;
* J" e4 k7 h5 p% ~4 z8 B
2 H1 D! D2 y) @* y) Q3 n
//UPPReset();
/ C6 P3 F! {. w
/*启动UPP DMA传输*/
6 V7 t- J; @8 J9 `
UARTPuts("upp_prog_dma_i\n",-2);
5 A& u0 n! V6 Q( o" R1 |
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
! M9 p7 Z- c) c) v$ T% f2 k
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ m4 p4 U$ `7 s: z5 e5 v4 l! u( w
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
$ x7 Q" J* a2 U5 v/ x
4 w: [! k9 V) r$ ^; v" Q8 v
UARTPuts("upp_prog_dma_i\n",-2);
- Y6 j+ c# `4 e& h/ {9 ^- f
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
% H( M( ?1 ~$ o! @ Q1 g
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" \( D, J& J" N* D4 m
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
2 L9 T/ l2 s/ u1 I0 _* I4 Q: v
$ f# R9 [( P% @& K! L8 m' ^' p8 L1 ?
/*等待UPP传输完毕*/
( @6 i" @1 S+ O- K
//i=0;
$ y3 n2 w. x+ W: }; X
//j=0;
% \1 k- O3 Q4 x9 O2 q O
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
- S" q j) O- o) n. e
{
3 l! B* K: G; j2 I( d3 X
/* 测试UPP传输的同时操作普通DDR数据
& H& u. C; w' u! q
temp
=i;
' w3 a# m. Y9 i' t; X; i
i++;
- W4 o7 N) v- a: Z, I! [
if(i==1024)
% c4 A2 p, f8 \8 J+ j# R' {5 S. s. x
{
/ Y" n/ \, F: O7 Q8 R( f
i=0;
4 D& K- F2 J! J o3 L# Y
j++;
0 E; y" p5 p/ n# n
}
: y/ r/ t k" `$ c
*/
8 V; u' U* O$ A
8 S+ Q$ S" R1 @+ @
asm(" nop");
0 j. f8 |& D: t- E7 s! F4 J
9 k5 ]: R2 H$ ^: F
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! i! ]2 n" B% u8 `/ m
}
. v a( A; u0 u1 K. k
|' z2 [4 k2 k1 @! K! B( ^
/*检查UPP传输的数据是否正确 (loopback modes only)*/
; ~, P. J m* l* L: l( i
//UARTprintf( "i=%d\n",i);
; v3 h N6 ?+ ]' t+ ^
//UARTprintf( "j=%d\n",j);
1 B7 I) V! T( ~, q' I: L! k& E }
UARTPuts("Data mismatch in buffers.\n",-2);
; H+ V' d* d: \6 c6 N
if (upp_interrupt_count == 2 && upp_error_count == 0)
- E3 ]' p- V6 C
{
; g6 x6 P+ Z$ @1 E3 c7 m
for (i = 0; i<upp_frame_size; i++)
/ Q$ o8 s7 B4 J/ ^
{
/ z8 T" l. C) D% z( K0 _8 w
if (upp_buffer_a
!= upp_buffer_b
)
& W K( v; x4 f+ J8 n
{
- a8 ^+ a4 w1 z y, w+ b! w2 r7 O
upp_error_count++;
$ E p q6 D/ c# _ y* R
}
: A2 x5 @+ G* Z" A/ t
}
' s/ x! Q% e" u% E4 l7 Y
}
5 Z$ {6 K7 n2 v
, K; F/ I# P2 R: ^/ o. j( u5 S. r
/* 报告通信结果*/
+ K6 K0 J3 k: X! @) T h7 `2 b
if(upp_error_count != 0)
4 e% V/ ]* r) D# I
UARTprintf( "upp_error_count=%d\n",upp_error_count);
, B( v: l G( n
else
5 s8 c' v D. ~
UARTPuts("uPP transfers complete!\n",-2);
8 m, q0 c' Z" ?! e! j4 Q
' \& G- A$ a y5 }
UARTPuts("Do you want to print all the data?(y/n) ",-2);
* O! Z0 Y* f: B, _4 n" \8 C
UARTGets(ch,2);
0 d/ M7 w* d9 x
UARTPuts("\n", -2);
0 I7 H8 B# z5 N, _/ w- _: q
1 i. ^- [( w& @9 {5 {$ q# x i2 }
if(ch[0] == 'y')
' f+ b" {- B& R! N/ w2 j
{
, M9 W. t9 M3 [9 N$ k K
/*打印全部读到的数据*/
& }' [* X! s8 `) Z: H2 Z- M
for(i=0; i<upp_frame_size; )
& K2 ]# Q) H: M( d0 s# h) I" J$ n \
{
& H2 O4 [: Q! k" d& F0 \
for(j=0; j<5; j++)
( F# q5 O2 t$ P% j
{
# O7 @# J# a2 F7 C8 T0 {
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
+ X. E. w* D" F: {! i1 F
i++;
% ~7 K* e4 ?4 H$ j9 S7 c$ W
//if(i >= 4096)
. [4 z* Z9 [3 ^7 ?% \6 ^
// break;
7 E5 y& N6 L2 {/ k4 P
* z* P* P. m- F9 G- I2 G6 u
}
: d' J& E/ ]% V9 A
UARTPuts("\n",-2);
9 {+ m }9 n8 R. D3 f( c
}
1 W6 \/ l9 c3 h
}
& A+ Y: k8 k2 F; E8 L
- T* `4 |* L" u) V9 E
}
0 d" b! _2 G: }/ |$ J( z
, W* c2 n0 R' u* E5 z* ]
& d' q9 W* y9 h; a! s8 g ?
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
! J1 h1 d: X9 p
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 c9 z4 N4 [; t) w5 n& [
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4