嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ m5 C* W; U/ f: D+ V4 D7 n0 M
Void UPP_TASK(Void)
9 r# @( `7 B3 f( M6 D
{
: i7 [: h7 v7 A) E' i4 I+ c: P/ c8 P
# z- P0 |! D$ R6 l; A
int i,j,k,target_int_count=2;
5 D0 i3 d7 }* C' Z- T
char ch[2];
) \6 \4 l9 j6 Z* ?% J/ a
Z2 |1 g) z8 X6 c$ ?; a2 _
4 |) i. p( N3 R
, L5 H- P: a' {5 b: ~- n+ p" _
upp_interrupt_count = 0;
& g( d, J, B* S; X
upp_error_count = 0;
) w! b$ B- e7 g" t5 z! l5 ~2 t
3 j: Q! ~2 ~% X7 p1 N4 Y! N1 [# I
UARTPuts("\tResetting uPP buffers...\r\n",-2);
% W, F' M0 n$ M
// Initialize data buffers
. j4 K6 _+ ]0 q; @9 f. U: b
for (i = 0; i < upp_frame_size; i++)
. y- Q/ }3 _! T5 K
{
: z j$ E7 K$ v$ Z+ y1 z
upp_buffer_b
=i;
% K+ j: t1 Q+ x$ d- y
upp_buffer_a
= 0xDEAD;
8 M e1 Z d2 ~$ V r
}
& Q% M& {2 j1 P- z- X
9 \" j: t8 B5 u7 Q. C7 j' x# G
//for(i=0;i<1024;i++)
6 N9 B2 t( o/ {! S( n
// temp
=0;
1 n! s7 F1 A1 ?% I$ c
4 C1 x1 R% d2 B# ]6 i8 @0 O" Q; W4 S
//UPPReset();
0 G& z8 @ ?, K* L7 M2 d5 D7 w% L
/*启动UPP DMA传输*/
3 Y3 q3 X& y' u6 t* s% v. ]
UARTPuts("upp_prog_dma_i\n",-2);
: D& Q, Q9 o, c2 ? h
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
1 E- A% o( M+ l
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) [9 @- N& ~' R' E/ C0 I
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
S7 V4 S C) h9 B1 p v3 L% H
8 L$ X/ }4 Q- s% _: Z) n9 K
UARTPuts("upp_prog_dma_i\n",-2);
2 c+ A% [# N( ?3 P4 N$ k/ t- U# n: a
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
: J9 ] g8 i7 q
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. ], H) R4 e' I
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: T! M, f* @0 T7 w- H, g0 C0 k
& F' n8 g$ v+ ` U z
/*等待UPP传输完毕*/
$ |8 e! J; u5 A2 a1 z. E
//i=0;
) f. y3 N" Q/ F0 h( r! X
//j=0;
* E' F2 {$ z7 T' b
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' w" t) [) J6 h3 |, t# b- n
{
0 P6 A. s, U; `
/* 测试UPP传输的同时操作普通DDR数据
4 W' I0 F' |1 I4 a, [0 J
temp
=i;
$ S) K1 m# `5 @) e
i++;
6 }9 @1 {* ~' x. h
if(i==1024)
* z: J' D; x8 E3 n3 G1 \: f
{
+ R4 E! |5 ~ a2 y
i=0;
; A( q6 w( D4 C1 n' H d& W, A
j++;
! [ q3 s9 c1 } R
}
- ]# f& D/ R2 h2 n
*/
. S7 {: K, O, x
1 q# O6 g# s* B ]5 d u! J2 }! u
asm(" nop");
5 n% g' D2 ^) G& {+ }$ b5 Q! L
: p; R% L7 U$ O
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 W% `% I* D- |3 R& p
}
( h, C }; R+ Y
# a) d* V8 p; _6 |
/*检查UPP传输的数据是否正确 (loopback modes only)*/
% u8 E1 N m) }2 `
//UARTprintf( "i=%d\n",i);
{) J* p; Z5 p! R& j7 [
//UARTprintf( "j=%d\n",j);
1 w2 K+ G& [/ ~+ f; R' S% `$ U
UARTPuts("Data mismatch in buffers.\n",-2);
, O. ^& P) ]0 M3 s9 Z& v o
if (upp_interrupt_count == 2 && upp_error_count == 0)
; `% o6 G/ ?# v5 K
{
9 F* A# |1 k/ l- Z: H
for (i = 0; i<upp_frame_size; i++)
8 ?2 j9 p3 o1 S1 c, `
{
, i- f! @9 [' t( T
if (upp_buffer_a
!= upp_buffer_b
)
$ ~$ r3 s2 V8 R! B G
{
2 a) ^8 m* d4 Z( i$ V$ [
upp_error_count++;
' g" R }, O8 j$ [& \( G
}
, o$ v2 `6 G' Z
}
; _' o: h# b$ s% n9 A+ v
}
' B- M0 j# |9 N5 e; @. i
3 Q. e0 {7 B* S) Y+ M: ]( A
/* 报告通信结果*/
& D3 W. N1 Q' R6 W/ z6 a
if(upp_error_count != 0)
6 ~% E$ x7 G9 i+ c; {: Z. K3 R% W
UARTprintf( "upp_error_count=%d\n",upp_error_count);
+ T& r" s) d; ]& h
else
1 E* B$ A$ w1 O! w: n4 I
UARTPuts("uPP transfers complete!\n",-2);
/ V" o9 D+ Y4 }4 p
6 {' f& G A4 b
UARTPuts("Do you want to print all the data?(y/n) ",-2);
* n% Z- j# S7 X- f( j( ?- b1 q3 Y
UARTGets(ch,2);
+ I+ {1 _4 h7 S0 V {: O1 L9 l
UARTPuts("\n", -2);
6 g5 F# d6 j# z, J+ U- z
0 m3 y- g$ U7 b8 L5 f& B
if(ch[0] == 'y')
6 J4 a# Y3 i, ], z. i
{
* x, ]: F5 \7 i- Q+ _' a$ V
/*打印全部读到的数据*/
Z7 S* b! A0 F5 `. |) q5 M2 U5 b
for(i=0; i<upp_frame_size; )
* G4 _! W% w! Z7 I! c. C+ f9 s1 ^
{
+ t4 }- W+ E) N) y2 n8 D( ]
for(j=0; j<5; j++)
5 w3 C6 t( k' [
{
! D$ ?$ m1 r0 E2 ~
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
! g d0 i- z3 G) u
i++;
% b4 x/ v$ y, x/ Z" E
//if(i >= 4096)
9 B( \$ u. G( v p% t
// break;
% h3 F8 [' N0 a; ^; V+ n
* R5 d8 [9 D% X, g/ H1 P+ ~
}
& J% t1 ?: r6 G6 w1 @! w0 _3 B& ^
UARTPuts("\n",-2);
3 B2 z& p7 [/ [% H
}
4 A7 }" d) M) v4 H" j
}
6 z2 m& t9 `6 _% \$ k0 c+ o h! i
$ k8 e8 y' A, J: ^6 R8 J% Q/ K4 r
}
{1 m' g' T% X) P" O4 [& t+ `
) V9 C+ ^% Q' x- o
r4 U1 D5 s Y0 g* v0 o
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% n: E! p: p; b2 h9 s$ M
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 l9 u) s0 [$ z d+ ~5 q" x
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4