嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
; r* K* i7 C, v( J
Void UPP_TASK(Void)
+ U7 S4 g* L2 U& e
{
1 m. H2 i% H( f* f
2 n- y8 ? a8 w% {5 L% m+ v8 w' |; ?
int i,j,k,target_int_count=2;
% x& f3 [9 f# e- g( s
char ch[2];
) w4 b F, A) w5 `, o R5 S
. ?9 X- ?) u0 D9 g+ |
0 |3 v8 X9 P# c0 M5 z* F
2 I6 u9 y' k1 l. z
upp_interrupt_count = 0;
# Y1 W# K( q; w- g4 W
upp_error_count = 0;
0 x/ v6 ]8 {( @7 j% ]$ C
; A4 }4 s" \5 {
UARTPuts("\tResetting uPP buffers...\r\n",-2);
( y# j% w5 u8 [. r- Y( s
// Initialize data buffers
* @+ K3 z7 E/ k( Y) }! I
for (i = 0; i < upp_frame_size; i++)
" h$ q& u4 Z% _+ Y2 V9 S/ h7 i
{
+ @; W3 H o _) s8 k: h, `
upp_buffer_b
=i;
$ y) B/ o" R5 a& r1 x. o
upp_buffer_a
= 0xDEAD;
) B8 U3 ?: x! h) M+ [4 D( A
}
& m" Y5 s. C" z1 C7 } i
1 G) [, v$ S0 W# u
//for(i=0;i<1024;i++)
1 e h( G& O7 A* Z) b
// temp
=0;
* t3 x7 v2 i) q; E" A: @ ^+ a
6 V/ C4 v+ f4 b3 [& {3 I, J+ L
//UPPReset();
; J7 S) I* x- p; ]
/*启动UPP DMA传输*/
5 `5 r- @* l" l4 q
UARTPuts("upp_prog_dma_i\n",-2);
9 A# Z/ t1 `6 b& s, I
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( M5 p* Q! f% `/ H' n1 u
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! a2 X9 G7 p* K
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
/ F8 ]/ |; V, i7 D7 V- a* B/ @" C
. d' J( @- W. s: t2 v
UARTPuts("upp_prog_dma_i\n",-2);
; @. u/ X' g; x) {& N3 b: H% f
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
- ?, j N* x* ^8 ^3 u+ D- ]
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
X4 ?1 R* V x4 |! K' @
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
3 {; R4 i5 \. `9 N2 N8 P
- K j. J; H3 M3 c
/*等待UPP传输完毕*/
9 a0 _' @4 k; J# g
//i=0;
% R/ t0 B; c1 q( _
//j=0;
' \6 A& P3 Z& }# W2 c
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 C( G- K5 p/ J( n' N
{
2 K1 W. g8 p6 _- N! W
/* 测试UPP传输的同时操作普通DDR数据
v* o1 g( `+ Y- P+ c
temp
=i;
4 m6 } f! J* L8 C$ z/ b
i++;
' T$ |, {' }2 T( |1 O
if(i==1024)
. v1 [- C3 }8 u" O9 A6 Q' S
{
0 K+ M- f# ?3 X) H! p
i=0;
1 L' E4 E" q7 F# a* j' X* v
j++;
* i6 B9 b! I) ~5 }
}
: f1 E& T6 d, n
*/
: O4 L+ o3 K5 P3 C! Y7 y* D
6 Y$ W' N' J( s: N+ K
asm(" nop");
R' `* m7 t# }8 [ u
) E1 C9 }9 N$ t
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- y; g5 L+ U& m: h+ O0 e
}
1 z. P! h+ p4 n% q5 g! D
$ b5 n( J' j: K3 w
/*检查UPP传输的数据是否正确 (loopback modes only)*/
8 t Z6 v' i( k1 ^5 v$ T
//UARTprintf( "i=%d\n",i);
' p0 E J+ o& g: l
//UARTprintf( "j=%d\n",j);
* f' M5 |/ w6 t8 S
UARTPuts("Data mismatch in buffers.\n",-2);
B# M9 Z( J {& F
if (upp_interrupt_count == 2 && upp_error_count == 0)
& D8 w) ]" n. r3 P5 e
{
$ M; j, ~- K* b A/ b
for (i = 0; i<upp_frame_size; i++)
6 O; |; D0 }5 Y3 j& \% F% M
{
3 @8 E4 E. }/ ~6 b$ Q# w
if (upp_buffer_a
!= upp_buffer_b
)
6 r2 U' p7 A) a" j V8 t
{
. x$ o0 ^7 `# |) I: K6 }! Y1 O+ ]% f
upp_error_count++;
, D& H& _/ C- d$ e6 k( r( o
}
! z5 e8 c8 j' y9 O/ P$ z
}
' _* k1 G) Q4 j; a8 H% N2 ^
}
; G% }9 M' Z, @- P8 o# L
- q* ~" h3 e) T2 ?1 |5 Y" P' f$ E
/* 报告通信结果*/
! s& v' N2 b1 e
if(upp_error_count != 0)
- q+ z5 X* h( ~9 _: J- r- @/ n
UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 }. ~0 I3 G: l& o% E
else
+ N U. `' \9 j. H4 n
UARTPuts("uPP transfers complete!\n",-2);
" J, t7 ?5 y! k0 v3 u; G
5 v* i! A7 N4 m
UARTPuts("Do you want to print all the data?(y/n) ",-2);
+ z. D! C" Z! g* a' O( o h) R
UARTGets(ch,2);
% G2 x1 |8 Z, T4 U8 c6 I
UARTPuts("\n", -2);
+ U; X; P7 z. U- ]6 e
8 {' p. J/ V9 Z' t
if(ch[0] == 'y')
1 ]: A0 l$ B; c0 H
{
% {& i" m+ Z8 {$ a7 z$ @( P. k
/*打印全部读到的数据*/
% a9 D, ?* |2 x* f3 J
for(i=0; i<upp_frame_size; )
3 U4 ?/ f$ c) v0 t6 |
{
4 D5 D! H0 F, Y% E. y- p
for(j=0; j<5; j++)
0 {0 A1 `( s+ F3 g. |' Q
{
% U4 t4 n' }3 y% H* @* F% w& A- L
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
! ?+ e. n& y" G7 Y
i++;
0 a: O9 d% ?9 F4 g
//if(i >= 4096)
1 d( R: u3 j( D+ l+ v. N4 ` ]+ S
// break;
# D6 ?9 p; g1 Z7 o N, U' ~
9 x; [' J" A: P' ~* H l* {3 D$ k
}
9 m8 q e( s% j2 D2 v! `8 G! v, h
UARTPuts("\n",-2);
& r# e9 }/ F( S& O- l
}
7 q+ G E" q2 ?* i! _3 l: R
}
3 e. v. U' n; Y% b: d
3 j/ Y7 b# s! m& ^: X
}
, b4 q) q. [4 L$ g/ _
3 D; y# m \# v r% [7 A! y$ a
% s$ r3 H1 H/ r( X" }+ Q" ?
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
7 Z J0 J6 a& X, D3 F
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 G" u3 L) n3 s2 Z* i/ {
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4